5.1 linux文件系统
5.1.1 file命令及其用法
file + 文件或目录:查看文件类型
可执行二进制文件格式:
Windows: PE
Linux: ELF
5.1.2 Linux文件系统
1、Linux文件系统的一些概念
rootfs: 根文件系统(每个文件系统都必须是根文件系统内的路径)
FHS(文件系统层级标准):Linux
2、Linux文件系统目录及各目录作用
(1)/boot:
系统启动相关的文件,如内核、initrd,以及grub(bootloader)
[daniel@localhost share]$ ls /boot
config-3.10.0-693.el7.x86_64
efi
grub(引导加载器)
grub2
initramfs-0-rescue-35642350c74f4b3287a0e5a8634f72ea.img
initramfs-3.10.0-693.el7.x86_64.img(系统启动的系统文件)
initramfs-3.10.0-693.el7.x86_64kdump.img
initrd-plymouth.img
symvers-3.10.0-693.el7.x86_64.gz
System.map-3.10.0-693.el7.x86_64
vmlinuz-0-rescue-35642350c74f4b3287a0e5a8634f72ea
vmlinuz-3.10.0-693.el7.x86_64(内核)
(2)/dev: 设备文件
设备文件:
块设备:随机访问,可以随机访问任意位置的数据,数据块
字符设备:线性访问,按字符为单位(鼠标和显示器)
特殊设备没有大小,只有设备号
设备号:主设备号(major)和次设备号(minor)
(3)/etc:配置文件
大多数程序的配置文件都放在此目录或者此目录的子目录
(4)/home:用户的家目录
每一个用户的家目录通常默认为/home/USERNAME
(5)/root:管理员的家目录;
(6)/lib:库文件
静态库, .a,便于程序单个运行使用
动态库, .dll, .so (shared object),可以共享使用节省空间
/lib/modules:内核模块文件
(7)/media:挂载点目录
挂载移动设备
(8)/mnt:挂载点目录
额外的临时文件系统
(9)/opt:可选目录
早期第三方程序的安装目录,现在通常放于/usr/local中
(10)/proc:伪文件系统
内核映射文件
(11)/sys:伪文件系统
跟硬件设备相关的属性映射文件
(12)/tmp:临时文件
/var/tmp,另外一个临时目录
(13)/var:可变化的文件
/bin: 可执行文件, 用户命令
/sbin:管理命令
(14)/usr:shared, read-only:全局共享的只读文件
/usr/bin:系统启动之后运行正常系统功能的需要的文件
/usr/sbin
/usr/lib
/usr/local:第三方软件的安装路径
/usr/local/bin
/usr/local/sbin
/usr/local/lib
5.1.3 命名规则
命名规则:
1、长度不能超过255个字符;
2、不能使用/当文件名
3、严格区分大小写
绝对路径:相对于根节点的路径
相对路径:相对于当前位置的路径
5.1.4 操作系统功能
操作系统:
运行程序
设备管理
软件管理
进程管理
网络管理
5.1.5 文件管理
1、文件创建和删除
(1)touch
# touch 主要作用修改文件时间戳,也可用来创建文件(linux同一个目录下不能创建名称相同的文件夹和文件)
-a 只改变访问时间
-m 只改变修改时间
-t 指定修改的时间
-c 若文件不存在也不创建新文件
stat file显示文件的状态信息


而文件夹确实是类似文本文件的方式存储的,文件夹可以看做文件inode:文件名组成的文本文件 (文件的属性信息存在inode的元信息中,可以用stat file查看)。只要文件夹内未发生文件的新增、删除、软链或文件夹内文件的inode (也称为索引节点)未改变,文件夹 (代表文件夹的文本文件)的时间戳就不会发生变化。
From <https://cloud.tencent.com/developer/article/1520817>
[daniel@localhost ~]$ touch -m -t 201212121212 x
[daniel@localhost ~]$ stat x
File: ‘x’
Size: 15 Blocks: 0 IO Block: 4096 directory
Device: fd02h/64770d Inode: 33554496 Links: 3
Access: (0775/drwxrwxr-x) Uid: ( 1000/ daniel) Gid: ( 1000/ daniel)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2021-06-01 12:55:16.734391633 -0400
Modify: 2012-12-12 12:12:00.000000000 -0500
Change: 2021-06-01 12:57:12.073157790 -0400
Birth: -
创建文件也可以使用文件编辑器来创建
word为字处理器,不是文本编辑器,处理的不仅仅是文本
(2)ASCII码
ASCII: 美国国家标准信息交换代码
128不同的字符要存储在计算机上:
计算机只能保存二进制:
2^6=0,63 64个数字
2^7=0,127 128个数字
000 0000 - 111 1111
ASCII:通过不同的位数变化来表示某个字符
2^16: 65536
字符标准:GB18030, GBK, GB2312(国标),Unicode(全球统一标准)
0000 1001 0000 1110:上, 卫(它为ASCII码还是字符取决于使用的字符转换器)
linux文本剪辑器:nano
(3)rm
删除文件
-i:删除前询问
-f:强行删除,不接受提示
-r:递归删除目录下所有文件
rm -rf /
(ROOT用户可以通过此命令清理所有文件)
任何操作之前确认一下,再操作
(4)cp
复制和移动文件cp
cp: copy只有最后一个是目标,前面的都是源,默认只复制文件,不复制目录
cp SRC DEST
-r:递归复制目录和目录下的文件(不能覆盖文件)
-p:保存用户原有的属主,属组和时间戳
-P:保持文件自有的链接属性
-a:归档复制,常用于备份
cp file1 file2 file3
可复制一个文件到一个文件
也可复制多个文件到一个目录
cp /etc/{passwd,inittab,rc.d/rc.sysinit} /tmp/
说明: cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中。若同时指定多个文件或目录,而最后的目的地并非一个已存在的目录,则会出现错误信息
参数:
-a 或 --archive 此参数的效果和同时指定"-dpR"参数相同
-b 或 --backup 删除、覆盖目的文件先备份,备份的文件或目录亦建立为符号链接,并指向源文件或目录链接的源文件或目录。假如没有加上这个参数,在复制过程中若遇到符号链接,则会直接复制源文件或目录
-f 或 --force 强行复制文件或目录, 不论目的文件或目录是否已经存在
-i 或 --interactive 覆盖文件之前先询问用户
-l 或 --link 对源文件建立硬链接,而非复制文件
-p 或 --preserve 保留源文件或目录的属性,包括所有者、所属组、权限与时间
-P 或 --parents 保留源文件或目录的路径,此路径可以是绝对路径或相对路径,且目的目录必须已经丰在
-r 递归处理,将指定目录下的文件与子目录一并处理。若源文件或目录的形态,不属于目录或符号链接,则一律视为普通文件处理
-R 或 --recursive 递归处理,将指定目录下的文件及子目录一并处理
-s 或 --symbolic-link 对源文件建立符号链接,而非复制文件
-S <备份字尾字符串> 或 --suffix=<备份字尾字符串> 用"-b"参数备份目的文件后,备份文件的字尾会被加上一个备份字符串。默认的备份字尾符串是符号"~"
-u 或 --update 使用这项参数之后,只会在源文件的修改时间(Modification Time)较目的文件更新时,或是名称相互对应的目的文件并不存在,才复制文件
-v 或 --verbose 显示执行过程
-V <备份方式> 或 --version-control=<备份方式> 指定当备份文件时,备份文件名的命名方式,有以下3种:
1.numbered或t, 将使用备份编号,会在字尾加上~1~字符串,其数字编号依次递增
2.simple或never 将使用简单备份,默认的备份字尾字符串是~, 也可通过-S来指定
3.existing或nil将使用当前方式,程序会先检查是否存在着备份编号,若有则采用备份编号,若无则采用简单备份
-x 或 --one-file-system 复制的文件或目录存放的文件系统,必须与cp指令执行时所处的文件系统相同,否则不复制,亦不处理位于其他分区的文件
--help 显示在线帮助
--sparse=<使用时机> 设置保存希疏文件的时机
--version 显示版本
示例:
.复制文件,只有源文件较目的文件的修改时间新时,才复制文件
cp -u -v file1 file2
.将文件file1复制成文件file2
cp file1 file2
.采用交互方式将文件file1复制成文件file2
cp -i file1 file2
.将文件file1复制成file2,因为目的文件已经存在,所以指定使用强制复制的模式
cp -f file1 file2
.将目录dir1复制成目录dir2
cp -R file1 file2
.同时将文件file1、file2、file3与目录dir1复制到dir2
cp -R file1 file2 file3 dir1 dir2
.复制时保留文件属性
cp -p a.txt tmp/
.复制时保留文件的目录结构
cp --parents /var/tmp/a.txt ./temp/
.复制时产生备份文件
cp -b a.txt tmp/
.复制时产生备份文件,尾标 ~1~格式
cp -b -V t a.txt /tmp
.指定备份文件尾标
cp -b -S _bak a.txt /tmp
(5)mv: move
移动文件
mv SRC DEST
mv -t DEST SRC将多个源文件复制到同一个目标
mv -f DEST SRC 强制覆盖
mv abc mn:将abc移动到当前目录,并且更改名称为mn
(6)install
install SRC DEST:可用来复制文件
-d 指定DIRECOTRY ... :可用于创建目录
install -t DIRECTORY SRC...:把多个文件复制到同一个目录
5.1.6 目录管理
1、查看目录
ls
cd
pwd
2、mkdir
mkdir:创建空目录,只有路径中的最后一个点才是要创建的目录
-p:循环创建目录
-v: verbose详细信息,显示创建过程
例:mkdir /root/x/y/z
创建多个目录
/mnt/test/x/m,y
(1)mkdir -pv /mnt/test/x/m /mnt/test/y
(2)mkdir -pv /mnt/test/{x/m,y}
3、展开
(1)波浪线展开
~USERNAME (波浪线展开):cd自动转换到用户家目录
(2)命令行展开(花括号展开):
/mnt/test/
创建如下几个目录a_b, a_c, d_b, d_c
类似于(a+d)(b+c)=ab+ac+db+dc
所以可以写为{a,d}_{b,c}
[root@Daniel-R480 ~]# mkdir -pv /mnt/test/{a,d}_{b,c}
mkdir: created directory ‘/mnt/test/a_b’
mkdir: created directory ‘/mnt/test/a_c’
mkdir: created directory ‘/mnt/test/d_b’
mkdir: created directory ‘/mnt/test/d_c’
[root@Daniel-R480 ~]# ls /mnt/test/
a_b a_c d_b d_c
4、tree
# tree:查看目录树
[daniel@localhost ~]$ tree /mnt/test
test
├── a_c
├── a_d
├── b_c
└── b_d
5、rmdir
删除目录:rmdir (remove directory)
默认只能删除空目录
-p:循环删除空文件夹
[root@Daniel-R480 ~]# rmdir /mnt/test/
rmdir: failed to remove ‘/mnt/test/’: Directory not empty
练习:
1、创建目录
(1)在/mnt下创建boot和sysroot;
[root@Daniel-R480 ~]# mkdir /mnt/{boot,sysroot}
[root@Daniel-R480 ~]# ls /mnt
boot c d etst sysroot test
[root@Daniel-R480 ~]#
(2)在/mnt/boot下创建grub;
[root@Daniel-R480 ~]# mkdir /mnt/boot/grub
[root@Daniel-R480 ~]# ls /mnt/boot/
grub
(3)在/mnt/sysroot下创建proc, sys, bin, sbin, lib, usr, var, etc, dev, home, root, tmp
a)在/mnt/sysroot/usr下创建bin, sbin, lib
b)在/mnt/sysroot/lib下创建modules
c)在/mnt/sysroot/var下创建run, log, lock
d)在/mnt/sysroot/etc下创建init.d
[root@Daniel-R480 ~]# mkdir /mnt/sysroot/{proc,sys,bin,sbin,lib,usr,var,etc,dev,home,root,tmp}
[root@Daniel-R480 ~]# mkdir /mnt/sysroot/usr/{bin,sbin,lib}
[root@Daniel-R480 ~]# mkdir /mnt/sysroot/lib/modules
[root@Daniel-R480 ~]# mkdir /mnt/sysroot/var/{run,log,lock}
[root@Daniel-R480 ~]# touch /mnt/sysroot/etc/init.d
[root@Daniel-R480 ~]# tree /mnt/sysroot/
[root@Daniel-R480 ~]# tree /mnt/sysroot/
/mnt/sysroot/
├── bin
├── dev
├── etc
│ └── init.d
├── home
├── lib
│ └── modules
├── proc
├── root
├── sbin
├── sys
├── tmp
├── usr
│ ├── bin
│ ├── lib
│ └── sbin
└── var
├── lock
├── log
└── run
作业1:
1、创建目录/backup
# mkdir -v /backup
2、复制目录/etc至/backup目录中,并重命名为“etc-当前日期”,如etc-2013-02-26;要求保留文件原来的属性,保持链接文件;
cp
-r
-p
-d
# cp -a /etc /backup/etc-2013-02-28
命令替换
3、复制文件/etc/inittab为/tmp/inittab.new,并删除inittab.new文件的后两行;
# cp /etc/inittab /tmp/inittab.new
# nano /tmp/inittab.new
作业2:
1、思考:ls命令是否可以显示某目录的整体大小,即包括其内部的所有文件的整体大小?
[root@Daniel-R480 tmp]# ls -lht
total 516K
-rw-r--r-- 1 root root 18 Jun 18 18:01 b
-rw-r--r-- 1 root root 12 Jun 18 17:36 a
-rwxr-xr-x 1 root root 0 Jun 10 09:47 test
-rw------- 1 root root 248K Jun 8 18:01 yum_save_tx.2021-06-08.18-01.yIzI_S.yumtx
-rw------- 1 root root 256K Jun 8 17:08 yum_save_tx.2021-06-08.17-08.qKUX5n.yumtx
-rwx------ 1 root root 836 Jan 29 2019 ks-script-QveTmi
-rwx------ 1 root root 4.7K Jan 29 2019 ks-script-5qnQJp
-rw------- 1 root root 0 Jan 29 2019 yum.log
2、通过帮助手册,学习使用du命令;
# du 估计文件空间使用情况
-s (summarize,显示总计情况)
-h(显示大小)
[root@Daniel-R480 tmp]# du
0 ./.font-unix
0 ./.ICE-unix
0 ./.Test-unix
0 ./.X11-unix
0 ./.XIM-unix
516 .
[root@Daniel-R480 tmp]# du -h
0 ./.font-unix
0 ./.ICE-unix
0 ./.Test-unix
0 ./.X11-unix
0 ./.XIM-unix
516K .
[root@Daniel-R480 tmp]# du -s
516 .
[root@Daniel-R480 tmp]# du -sh
516K .
[root@Daniel-R480 tmp]#
3、通过帮助,学习read命令;
变量:内存空间,有名称
变量赋值:
变量替换
作业3:
描述GPL, BSD, Apache三个开源协定的大体联系及区别。
作业4:
1、如何获取Linux当前最新的内核版本号?
2、列出你所了解的Linux发行版,并说明其跟Linux内核的关系。
Linux, GNU: GNU/Linux, 以源代码发布
在源代码编译之后形成发行版:Fedora, RedHat(CentOS), SUSE, Debian(Ubuntu, Mint), Gentoo, LFS(Linux From Scratch)
编译:将源代码编译成可以在对应的硬件平台上安装运行的版本
C程序
Tom,在AMD上编译
Jerry在intel上编译
RedHat: 通用格式
奔腾:
性能配置最好的状态,在本机上编译,进行安装
Comments Closed.