一、inode的概念
此部分参考:https://blog.csdn.net/ML908/article/details/103374494
1、一个文件的数据包括元信息和实际数据,元信息包括以下内容:
2、这些元信息保存在inode(索引节点) 中,每个文件都必须占用一个inode ,每个inode 都有一个号码,在Linux系统内部不适用文件名,会使用inode 号码来识别文件 3、目录文件的结构: 目录也是一种文件,创建一个空的目录就是创建一个内容为0的文件,每一行称为一个目录项 4、Linux系统文件三个主要的时间属性
| |
---|
ctime(change time) | 最后一次改变文件或目录(属性)的时间 | atime(access time) | 最后一次访问文件或目录的时间 | mtime(modify time) | 最后一次修改文件或目录(内容)的时间 |
5、查看inode 号码
ls -i file
stat file
6、inode的作用: (1)当文件名包含特殊字符,可能无法正常删除文件,直接删除inode ,也可以删除文件 (2)移动或重命名文件时,只改变文件名,不影响inode 号码 (3)打开一个文件后,系统通过inode 号码来识别该文件,不再考虑文件名 7、使用df -i 命令可以查看每个硬盘分区的inode 总数和已经使用的数量 8、访问文件的简单流程
二、软链接
软链接相当于源文件的一个快捷方式,存放源文件的路径指向,有自己的 inode 号以及用户数据块。
ln -s 源文件 目标文件位置
- 软链接有自己的文件属性及权限等,可对不存在的文件或目录创建软链接。
- 软链接可以指向目录,而且软链接所指向的目录可以位于不同的文件系统中。
- 当原始文件被删除后,链接文件也将失效。
- 在删除源文件后,向软链接里写入内容,源文件会恢复,并包含与软链接相同的内容。
三、硬链接
硬链接文件本质上与源文件其实是同一个文件,相当于以文件副本的形式存在,但不占用实际空间。
ln 源文件 目标文件位置
- 每添加一个硬链接,该文件的
inode 链接数就会增加1;而且只有当该文件的inode 链接数为0时,才算彻底将它删除。 - 硬链接实际上是指向原文件的inode的指针,所以硬链接的文件属性及权限等和源文件均一致。
- 链接数示意(链路数为2)
- 当无论修改硬链接或者源文件的内容,另外一个都会同步更新
- 删除源文件后,硬链接仍旧可用
硬链接的两个限制
由于硬链接是同步更新的,所以引入了对目录的硬链接就有可能在目录中引入循环,在目录遍历的时候系统就会陷入无限循环当中,这样导致无法定位到访问目录
不同的文件系统的文件管理方式不同,甚至有些文件系统不是索引文件系统,并不一定两个文件系统的inode 有相同的含义。即使有相同inode 含义,硬链接的几个文件,具有相同的inode 号码,不同文件系统中,也可能有使用该inode 号码的文件,也会产生矛盾。
四、软链接与硬链接的区别
| 软链接 | 硬链接 |
---|
本质上 | 不同的文件(快捷方式) | 同一文件(副本) | inode 号码 | 不同 | 相同 | 目录 | 支持对目录创建 | 不支持对目录创建 | 文件系统 | 支持跨文件系统 | 不支持跨文件系统 | 文件类型 | L(symbolic link) | 与源文件一致 | 相互关系 | 删除源文件,链接失效 | 删除源文件,链接不受影响 | 生成命令 | ln -s | ln |
|