深入理解linux文件
本文最后更新于 2024-08-31,文章内容可能已经过时。
一、linux的文件存储
假如有一个用户在linux系统中编辑了一个文件,编辑完内容后,关闭编辑器时会问用户改如何命名这个文件,设置完名称之后会选择一个目录将该文件保存到指定目录下,在这个例子中包含了linux系统中与文件相关的三个组成部分
- 数据:就是文件的内容,保存在一个叫data(数据块)的结构中
- 元数据:保存一个文件的特征的系统数据,用来保存除了文件内容和文件名以外的与文件相关的信息, 诸如文件的创建者,日期,大小等等,保存在一个叫inode(i节点)的结构中。
- 文件名:用来保存文件名称,文件名保存在一个叫dentry(目录项)的结构中。
二、i节点介绍
通过前面的课程我们知道,inode是用来保存文件的元数据的,除此之外还保存文件相关属性信息,如链接数等。我们通过类似stat hello.txt这条命令查看指定文件的inode信息。
三、链接文件介绍
Linux中如果用户想把同一个文件保存在两个地方,或用两个不同的文件名保存,除了复制之外还有另外一种选择,就是链接,在linux系统中链接分为硬链接,软链接,空链接,递归链接等
链接命令: ln
语法:
ln 源文件路径 链接位置路径
常用命令选项:
-s 创建软连接
-f 强制执行
-i 交互模式,文件存在则提示用户是否覆盖
-n 把符号链接视为一般目录,显示为一般文件
-v 显示详细的处理过程
- 硬链接:允许一个文件拥有多个有效路径名,这样用户就可以建立硬链接到重要的文件,以防止“误删”源数据,不过硬链接只能在同一文件系统中的文件之间进行连接
- 软链接 : 也叫符号链接,类似于windows系统中的快捷方式,与硬链接不同,软链接就是一个普通文件,软链接可对文件或目录创建。
这是概念上的描述,我们用一句话来将这两种链接进行总结:
a、硬链接不能链目录,不能跨文件系统,软链接可以;
b、源文件删除后软链接失效,硬链接依然可用;
我们通过下面的例子可以看到硬链接和软链接的创建方式以及基本对比
软连接
# 在root家目录下创建一个文件ztx
[root@zutuanxue ~]# touch ztx
# 为/root/ztx文件创建一个软连接文件在/tmp目录下
[root@zutuanxue ~]# ln -s /root/ztx /tmp/
# 验证快捷方式是否创建成功
[root@zutuanxue ~]# ls -l /tmp/ztx
lrwxrwxrwx 1 root root 9 11月 26 15:06 /tmp/ztx -> /root/ztx
# 查看源文件和链接文件的i节点信息
[root@zutuanxue ~]# ls -i /root/ztx /tmp/ztx
674632 /root/ztx 929916 /tmp/ztx # 发现软连接的文件i节点不同
# 删除源文件
[root@zutuanxue ~]# rm -f /root/ztx
# 验证链接文件是否可用
[root@zutuanxue ~]# cat /tmp/ztx
cat: /tmp/ztx: 没有那个文件或目录 #删除源文件发现链接文件失效
硬链接
# 创建一个源文件 名字为组团学
[root@zutuanxue ~]# touch zutuanxue
# 为/root/zutuanxue文件创建一个硬链接文件 到/tmp/zutuanxue
[root@zutuanxue ~]# ln /root/zutuanxue /tmp/zutuanxue
# 查看源文件和链接文件的i节点
[root@zutuanxue ~]# ls -i /root/zutuanxue /tmp/zutuanxue
674632 /root/zutuanxue 674632 /tmp/zutuanxue # 硬链接的i节点和源文件的i节点一致
# 删除源文件,看看硬链接文件是否可用
[root@zutuanxue ~]# echo test > /root/zutuanxue
[root@zutuanxue ~]# rm /root/zutuanxue
rm:是否删除普通文件 "/root/zutuanxue"?y
[root@zutuanxue ~]# cat /tmp/zutuanxue
test #删除硬链接源文件后,发现链接文件依然可以使用
除了上面我们说到的硬链接和软链接之外还有
- 空链接,所谓的空链接就是软链接指向的源文件不存在了,包括源文件被删除,改名。
- 递归链接:递归链接不如空链接常见,如果想看的话几乎需要专门寻找,如果用户创建两个软链接,linka与linkb关联,而linkb又与linka关联,这时候就会出现递归链接,比如
- 绝对软链接和相对软链接:主要指的是用户在创建软链接的时候使用的是绝对路径还是相对路径来指定链接目标,如果链接创建完成之后不会移动,那么这两种方法可以随意使用,但是如果链接文件需要被移动,那么建议还是使用绝对路径,比如
好了链接我们就说到这里,下面我们看一下时间戳
四、时间戳
时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总毫秒数。通俗的讲, 时间戳是一份能够表示一份数据在一个特定时间点已经存在的完整的可验证的数据。 它的提出主要是为用户提供一份电子证据, 以证明用户的某些数据的产生时间。 当我们使用stat命令查看文件的时候除了创建时间你会发现有三个跟时间戳相关的信息
| 缩写 | 命令 | 目的 |
| —– | ——– | ———————————- |
| Atime | 访问时间 | 文件数据每次被阅读后的更新 |
| Ctime | 改变时间 | 文件的i-节点信息每次被改变后都更新 |
| Mtime | 修改时间 | 文件数据每次被改变后的更新 |
五、常用目录管理命令总结
- 目录:
| 命令 | 用法 | 功能 |
| —– | ————– | —————- |
| mkdir | mkdir 目录名称 | 创建一个目录 |
| rmdir | rmdir 目录名称 | 删除一个空目录 |
| cd | cd 目录名称 | 进入一个目录 |
| ls | ls 目录名称 | 列出一个目录内容 |
- 文件:
| 命令 | 用法 | 功能 |
| —– | ———— | —————- |
| touch | touch 文件名 | 新建一个文件 |
| rm | rm 文件名 | 删除一个文件 |
| cat | cat 文件名 | 打印一个文件内容 |
- 其他:
| 命令 | 用法 | 功能 |
| —- | —————– | ————————— |
| cp | mkdir file folder | 将文件file拷贝到目录folder |
| mv | mv A B | 移动A到B目录或者从命名 A为B |
| ln | ln -s A B | 给A做一个快捷方式,放到B位置 |