日期:2014-05-16 浏览次数:21020 次
译者注: 最近在看文件系统相关的,每当读到inode相关的东西时,书上或者博客上都会涉及硬链接/软链接相关的内容,于是今天专门针对硬链接翻译了几篇英文,弄懂它!
本节翻译自:http://c2.com/cgi/wiki?HardLink
在传统的UNIX文件系统中,一个目录就是一个包含关联列表的文件。目录文件中的条目是字符串形式的文件名及其对应的唯一文件标识符-- inode号。一个inode号本质上是一个磁盘上的指针,文件对象可以高效的通过它定位。没有两个磁盘对象共享一个inode号,也没有一个磁盘目标有两个inode号。
“硬链接”本质上是“目录项”的同义词。当一个目标第一次被创建,就会为它创建一个目录项。这其实就是硬链接,而大多数人常常把“硬链接”联想成“为一个已有的对象创建一个额外的目录项”。但是原来的目录项其实没有任何特殊,所有的链接都是平等的,所以一定意义上来说没有方法能识别出哪个是原来的。
目录也可以包含目录,当然,这是通过硬链接完成的。当一个子目录被创建时,在其父目录中也创建了一个目录项,这个目录项用于将子目录的名称与新创建inode关联起来。此外,新的目录文件中也自动创建了两个目录项,这两个目录项分别将".",".."
和当前目录及其父目录关联起来。所以,创建一个子目录会创建一个新的硬件链接到其父目录,以及两个对新创建对象(子目录)的硬件链接:一个来自其父目录,另一个来自他自己("."),也就是说一个目录项的硬链接数最少是2。
long@zhouyl:~/test$ mkdir abc long@zhouyl:~/test$ ls -l total 1 drwxr-xr-x 2 long long 4096 Apr 17 09:02 abc | -- 硬链接数
这一节翻译自: http://unix.stackexchange.com/questions/22394/why-hard-links-not-allowed-to-directories-in-unix-linux
第一节中已经对硬链接和inode等概念有了很好的解释,但是为了保证原文的完整性,下面内容可能有重复解释!
允许目录的硬链接可能会打破文件系统的有向无环图结构,可能创建目录循环,这可能会导致fsck以及其他一些遍历文件树的软件出错。
首先,要想理解这点必须先了解inode。文件系统中的数据保存在磁盘上的数据块中,而这些数据块由inode集合在一起。可以说inode就是文件,但是inode缺少文件名,所以就需要链接。一个链接其实就是一个指向inode的指针。目录是一个保存着这些链接的inode,目录中的每一个文件名都是一个指向inode的链接。这里提一下,UNIX系统中打开一个文件也会创建一个链接,但是它是不同类型的链接(它不是一个命名链接)。long@zhouyl:~/test$ touch test long@zhouyl:~/test$ ls -l total 0 -rw-r--r-- 1 long long 0 Apr 16 16:56 test long@zhouyl:~/test$ ln test test1 long@zhouyl:~/test$ ls -l total 0 -rw-r--r-- 2 long long 0 Apr 16 16:56 test -rw-r--r-- 2 long long 0 Apr 16 16:56 test1