Linux中的文件有两种数据:
用户数据
元数据(metadata)
用户数据就是数据block。
元数据包含inode、用户名、时间,大小等信息。
其中inode是文件的唯一标识。
//创建一个硬链接 ln 葵司.avi Java学习第一课.avi //查看一下文件的信息 1048578 -rw-r--r-- 2 root root 0 Feb 24 03:04 Java学习第一课.avi 1048578 -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 #1048578 -rw-r--r-- 1 root root 5 Feb 24 03:13 Java学习第一课.avi 1048578这个还在,说明文件还在。 //Linux删除具体的机制是什么呢? //文件接删除的时候,系统调用会检查inode link count的数值, //如果他大于等于1,那么inode不会被回收。因此文件的内容不会被删除。 //原来inode link count是2 //删掉一个还剩1,所以文件内容不会被删除,数据块还在
上图是通过文件名查看文件内容的方式,先文件名,然后是其inode,然后找到inode索引的数据块。
//创建一个软链接 ln -s 葵司.avi 葵司quick.avi ls -li #1048578 -rw-r--r-- 2 root root 5 Feb 24 03:13 Java学习第一课.avi #1048578 -rw-r--r-- 2 root root 5 Feb 24 03:13 葵司.avi #1048589 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去找),所以安全,节省空间。
但是我们一般使用的时候,还是软链接多。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/69904754/viewspace-2636814/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/69904754/viewspace-2636814/