Linux中的文件有两种数据:
用户数据
元数据(metadata)
用户数据就是数据block。
元数据包含inode、用户名、时间,大小等信息。
其中inode是文件的唯一标识。
//创建一个硬链接
ln 葵司.avi Java学习第一课.avi
//查看一下文件的信息
-rw-r--r-- 2 root root 0 Feb 24 03:04 Java学习第一课.avi
-rw-r--r-- 2 root root 0 Feb 24 03:04 葵司.avi
//这两个文件的inode号一样,根据上面的定义,实际上是一个文件
//这里我们举个例子来说明一样
//孙悟空有很多名字,比如说,孙行者,齐天大圣,弼马温
//当年如来把孙悟空压在了五指山下时候
//孙行者,齐天大圣,弼马温都在五指山下
//因为它们都是孙猴子的名字
//所以,这里我们对葵司.avi写入一些东西,那么看Java学习第一课.avi也应该会出现一样的内容
vi 葵司.avi #写入1234
more Java学习第一课.avi
#1234
//现在菩提老祖说,你弃道从佛,孙悟空这个名字你就不要用了。
//那么现在。孙猴子是不是死了,从世界消失了。
//显然没有,只是名字少了一个而已。
rm 葵司.avi
ls -il
# -rw-r--r-- 1 root root 5 Feb 24 03:13 Java学习第一课.avi
这个还在,说明文件还在。
//Linux删除具体的机制是什么呢?
//文件接删除的时候,系统调用会检查inode link count的数值,
//如果他大于等于1,那么inode不会被回收。因此文件的内容不会被删除。
//原来inode link count是2
//删掉一个还剩1,所以文件内容不会被删除,数据块还在

上图是通过文件名查看文件内容的方式,先文件名,然后是其inode,然后找到inode索引的数据块。
//创建一个软链接
ln -s 葵司.avi 葵司quick.avi
ls -li
# -rw-r--r-- 2 root root 5 Feb 24 03:13 Java学习第一课.avi
# -rw-r--r-- 2 root root 5 Feb 24 03:13 葵司.avi
# lrwxrwxrwx 1 root root 10 Feb 24 03:30 葵司quick.avi -> 葵司.avi
发现inode号变了,我们知道inode号是文件的唯一标识。
inode号一变,就说明是一个全新的文件

软链接文件找到inode,然后找到数据块
数据块里面存的是原文件的信息
再通过原文件找到原文件的inode号。
所以如果删了原文件,那么根据这个文件建立的软链接也将会失效了。
rm 葵司.avi
more 葵司quick.avi
#more: stat of 葵司quick.avi failed: No such file or directory
最后是一些总结:
硬链接:
文件有相同的 inode 及 data block;
只能对已存在的文件进行创建;
不能交叉文件系统进行硬链接的创建;
不能对目录进行创建,只可对文件创建;
删除一个硬链接文件并不影响其他有相同 inode 号的文件。
软链接:
软链接有自己的文件属性及权限等;
可对不存在的文件或目录创建软链接;
软链接可交叉文件系统;
软链接可对文件或目录创建;
创建软链接时,链接计数 i_nlink 不会增加;
删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接被称为死链接(即 dangling link,若被指向路径文件被重新创建,死链接可恢复为正常的软链接)。
硬链接由于不生成新文件,不现实原文件路径(只能通过inode去找),所以安全,节省空间。
但是我们一般使用的时候,还是软链接多。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/117134.html