……了解 Linux 文件系统 及 相关案例
开场白~
Linux 学习的第二周,一个拖延症晚期患者的自我鞭策:完成比完美更重要,在互联网领域十年磨一剑往往会把剑磨残。。。
一、Linux 发行版的系统目录命名规则及其用途
通过 tree 命令我们可以看到根下各个系统目录名称的树形结构
[root@Centos7 ~] # tree -L 1 /
/
├── bin -> usr/bin
├── boot
├── dev
├── etc
├── home
├── lib -> usr/lib
├── lib64 -> usr/lib64
├── media
├── mnt
├── opt
├── proc
├── root
├── run
├── sbin -> usr/sbin
├── srv
├── sys
├── tmp
├── usr
└── var
/bin:普通用户可用命令,即使文件系统未被挂载也可使用的
/boot:开机设置文件;内核文件也在其中
/dev:设备文件
/etc:系统配置文件
/home:普通用户家目录
/lib:库文件和模块
/lib64:x86_64库文件
/media:用于挂载本地磁盘和其他存储设备
/mnt:用于挂载其他临时文件
/opt:发行版附加的第三方软件安装包
/proc:cpu映射的虚拟文件系统
/root:root用户家目录
/run:系统启动的守护进程
/sbin:只有root用户可用的命令
/srv:服务进程所需的数据文件
/sys:硬件设备映射的虚拟文件系统
/tmp:临时文件
/usr:大部分用户工具和应用程序
/var:存放可变化文件,日志、脱机文件,临时电子邮件文件
二、文件的元数据信息及含义
我们先随便创建一个文件 f1,并添加文本内容
[root@Centos7 ~] # vim /data/f1
[root@Centos7 ~] # cat /data/f1
hello world!
stat 命令查看改文件的元数据信息
[root@Centos7 ~] # stat /data/f1
File: ‘/data/f1’
Size: 13 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 69 Links: 1
Access: (0644/-rw-r–r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2020-04-21 21:51:14.045736588 +0800
Modify: 2020-04-21 21:50:37.032738700 +0800
Change: 2020-04-21 21:50:37.032738700 +0800
Birth: -
File:文件名
Size:文件大小
Blocks:占用块数量
IO Block:块大小
regular file:文件类型,此处为普通文件
Device:设备
Inode:节点号
Links:链接数
Access:所有者权限
Uid:用户id
Gid:用户组id
Access:文件读时间,即访问时间
Modify:文件修改时间
Change:文件属性修改时间
通过 stat -f 查看文件所在文件系统的信息
[root@Centos7 ~] # stat -f /data/f1
File: “/data/f1”
ID: 80300000000 Namelen: 255 Type: xfs
Block size: 4096 Fundamental block size: 4096
Blocks: Total: 13100800 Free: 13092533 Available: 13092533
Inodes: Total: 26214400 Free: 26214393
三、软链接和硬链接的区别
| 硬链接 | 软链接 | |
|---|---|---|
| 本质 | 同一文件不同名字 | 不同文件 |
| Inode | 相同 | 不同 |
| 跨设备 | x | √ |
| 跨分区 | x | √ |
| 创建目录 | x | √ |
| 相互关系 | 没关系 只加减链接数 | 依赖关系 |
| 链接数 | 会增加 | 不会增长 |
| 路径 | 相对于当前工作目录 | 相对于软链接目录 |
| 文件类型 | 与原文件一致 | “l” 软链接文件 |
-硬链接 -
我们在 /data下创建一个 f1文件,ff文件夹
[root@Centos7 ~] # touch /data/f1
[root@Centos7 ~] # mkdir /data/ff
创建一个硬链接,发现报错,原因是硬链接无法跨设备
[root@Centos7 ~] # ln /data/f1 f1.link
ln: failed to create hard link ‘f1.link’ => ‘/data/f1’: Invalid cross-device link
为 ff文件夹创建一个硬链接也报错,原因是文件夹不适用
[root@Centos7 data] #l n ff ff.link
ln: ‘ff’: hard link not allowed for directory
这次可以了,硬链接需要同一分区同一设备
[root@Centos7 ~] # ln /data/f1 /data/f1.link
[root@Centos7 ~] # ls -l /data
total 0
我们可以看到此时链接数为2
-rw-r–r-- 2 root root 0 Apr 26 12:47 f1
-rw-r–r-- 2 root root 0 Apr 26 12:47 f1.link
-软连接 -
在 /data 目录下创建 f2文件,d1/d2文件夹
[root@Centos7 data] # touch f2
[root@Centos7 data] # mkdir -p d1/d2
在文件夹 d2下创建 f2的软连接,出现错误找不到原文件 f2
[root@Centos7 data] # ln -s f2 d1/d2/f2.link
[root@Centos7 data] # ll d1/d2/
total 0
lrwxrwxrwx 1 root root 2 Apr 26 13:30f2.link -> f2显示为红色高亮闪烁
原因为 f2的路径不应相对于原始路径,而应该相对于软链接的路径
[root@Centos7 data] # ln -s …/…/f2 d1/d2/f2.link
[root@Centos7 data] # ll d1/d2
total 0
lrwxrwxrwx 1 root root 8 Apr 26 13:35 f2.link -> …/…/f2
四、Linux 上常用的文件管理类命令
常见的文件管理命令 ls, cd 可见上一篇博客
touch 命令下文可见
basename 路径下的文件名
dirname 文件的路径
[root@Centos7 ~] # basename /data/d1/d2/ff1
ff1
[root@Centos7 ~] # dirname /data/d1/d2/ff1
/data/d1/d2
cp 复制文件和目录,一般无法保留所有信息(所有者,组,修改时间等)
1)复制 单个文件
[root@Centos7 ~] # cp /data/f1 /data/d1/f1.bak
[root@Centos7 ~] # ls /data/d1
f1.bak
2)复制 多个文件 至文件夹
[root@Centos7 ~] # cp /data/f1 /data/f3 /data/d1/d2/
[root@Centos7 ~] # ls /data/d1/d2
f1 f3
3)复制 文件夹
[root@Centos7 ~] # cp -r /data/dd /data/d1/d2
[root@Centos7 ~] # ls /data/d1/d2
dd f1 f3
-a 保留所有权限,一般用于备份(可见时间点保留)
[root@Centos7 data] # ll f2
-rw-r–r-- 1 root root 0 Apr 26 15:21 f2
[root@Centos7 data] # cp -a f2 /data1
[root@Centos7 data] # ll /data1
total 0
-rw-r–r-- 1 root root 0 Apr 26 15:21 f2
-rw-r–r-- 1 root root 0 Apr 26 15:52 f3
-v 显示拷贝过程
-f 强制拷贝
-backup=numbered 目标存在的情况下,覆盖前会先备份并加数字后缀
mv 移动或重命名(工作中一般用于代替 rm)
-f 强制
-v 显示过程
常用语单个文件重命名,多个文件用 rename
[root@Centos7 data] # ll /data
total 0
-rw-r–r-- 1 root root 0 Apr 26 15:39 w1
-rw-r–r-- 1 root root 0 Apr 26 15:21 w2
-rw-r–r-- 1 root root 0 Apr 26 15:42 w3
[root@Centos7 data] # rename w log w*
total 0
-rw-r–r-- 1 root root 0 Apr 26 16:30 log1
-rw-r–r-- 1 root root 0 Apr 26 16:30 log2
-rw-r–r-- 1 root root 0 Apr 26 16:30 log3
rm 删除
-r 递归
-f 强制
rm -rf /* 删库跑路 XD
rm -rf / 会提示错误,无法执行,加–no-persece-root 强制删除
mkdir 创建文件夹
-p 递归
-v 显示过程
[root@Centos7 data] # mkdir -p /data/d1/d2
[root@Centos7 data] # ll -R /data
/data
drwxr-xr-x 3 root root 16 Apr 26 16:38 d1
/data/d1
drwxr-xr-x 2 root root 6 Apr 26 16:38 d2
五、实验操作
1. 案例:修改文件的时间戳信息
默认情况下,通过 ll 查看的是文件的修改时间,即 stat 中显示的 Modify时间
[root@Centos7 data]# ll
total 0
-rw-r–r-- 1 root root 0 Apr 26 13:26 f2
Access:读时间
Modify:修改时间
change:属性修改时间
[root@Centos7 data]#stat f2
File: ‘f2’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 803h/2051d Inode: 67 Links: 1
Access: (0644/-rw-r–r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2020-04-26 13:26:25.613823685 +0800
Modify: 2020-04-26 13:26:25.613823685 +0800
Change: 2020-04-26 13:26:25.613823685 +0800
Birth: -
我们通过 touch f2来修改时间戳,发现3个时间都被刷新了
[root@Centos7 data] # ll f2
-rw-r–r-- 1 root root 14 Apr 26 14:49 f2
[root@Centos7 data] # touch f2
注意,文件内容并不清空
[root@Centos7 data] # ll f2
-rw-r–r-- 1 root root 14 Apr 26 15:00 f2
[root@Centos7 data] # stat f2
File: ‘f2’
Size: 14 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 69 Links: 1
Access: (0644/-rw-r–r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2020-04-26 15:00:59.740504884 +0800
Modify: 2020-04-26 15:00:59.740504884 +0800
Change: 2020-04-26 15:00:59.740504884 +0800
只改读时间Access(属性会一起变动)
[root@Centos7 data] # touch --time=atime f2
[root@Centos7 data] # ll f2
-rw-r–r-- 1 root root 14 Apr 26 15:02 f2
[root@Centos7 data] # stat f2
File: ‘f2’
Size: 14 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 69 Links: 1
Access: (0644/-rw-r–r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2020-04-26 15:08:06.235480921 +0800
Modify: 2020-04-26 15:02:28.998499869 +0800
Change: 2020-04-26 15:08:06.235480921 +0800
Birth: -
只改修改时间Modify(属性会一起变动)
[root@Centos7 data] # touch --time=mtime f2
[root@Centos7 data] # ll f2
-rw-r–r-- 1 root root 14 Apr 26 15:12 f2
[root@Centos7 data] # stat f2
File: ‘f2’
Size: 14 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 69 Links: 1
Access: (0644/-rw-r–r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2020-04-26 15:08:06.235480921 +0800
Modify: 2020-04-26 15:12:53.969464755 +0800
Change: 2020-04-26 15:12:53.969464755 +0800
Birth: -
2. 案例:复制 /etc/profile至 /tmp/目录,用查找替代命令删除 /tmp/profile文件夹中的 行首的空白字符
- 通过 vim /tmp/profile.1 创建一个新的空白文件
- 在 ex模式下,r /etc/profile 读取 /etc下profile 的内容
- ex 模式下 %s/^\s+//g,将空白行首的空格去除
- :wq 保存退出
3. 案例:在 vim中设置 tab缩进为4个字符
- 在家目录下 vim .vimrc 打开 vim配置文件
- 添加 set tabstop=4
- :wq 保存退出
本文深入讲解Linux文件系统,包括系统目录命名规则、文件元数据、软链接与硬链接区别、常用文件管理命令,以及时间戳修改等实践案例。
5444

被折叠的 条评论
为什么被折叠?



