1、操作层面
软链接
先说结论:软链接本质是一个独立的文件
- 先创建一个文件
file.txt
- 再创建一个软链接:命令
ln -s file.txt file-soft.link
(后者链接前者)- 软链接的名字和后缀随便取的
使用命令 ls -li
查看,你可以发现两个文件有着不同的 inode
号,即可证明这两个属于不同文件。
同时,软链接的文件类型标识为 l
软链接有何用:在用户层看来,软链接就相当于一份原文件,两个文件有着相同的内容(文件 file.txt
的内容是 hello Linux
)
硬链接
先说结论:硬链接本质不是一个文件
通过命令:ln file.txt file-hard.txt
给文件硬链接(后者链接前者)
(同理这个硬链接的命名和后缀都是随便起的)(该命令和前面软链接的命令相比,没有 -s
)
可以发现,硬链接的 inode
号和原文件一样,说明不是独立文件
同时信息列表中有个数字从 1 到 2
而其他数据基本相同
上面是操作层面的演示和理解,但是只了解操作是远远不够的
还需理解配套的相关原理
2、原理层面
深刻理解软硬链接
1、软链接有独立的 inode
,软链接内容上,保存的是目标文件的路径(就比如 windows
上的快捷方式:Win图形化桌面上的应用图标)
2、硬链接不是独立的文件,没有独立的inode,硬链接本质就是一组文件名和已经存在的文件的映射关系!(相当于C++的引用)
- 这种硬链接,一个
inode
文件对于多个文件名,是通过引用计数的方式实现的 - 图中的 3 就是引用计数的大小了
我们对一个文件 file.txt
进行硬链接,然后删掉原文件 file.txt
,发现硬链接还指向该文件,证明该文件没有被删除,只是删掉了表面的文件名
而这个过程是不是完成了一次文件的重命名工作?因此
我们经常使用的操作:重命名与给文件起一个文件名,本质实际上就是在 硬链接的过程!
如果我将原文件删掉,可以发现软链接直接变红(警告了)(就是因为软链接保存的是原文件的路径,原文件删掉了,路径