现在我们创建了一个普通地不能再普通的文件了。然后我们对它创建一个硬链接,并查
看一下当前目录:
$ ln myfile hard
$ ls -li
25869085 -rw-r--r-- 2 unixzii staff 27 7 8 17:39 hard
25869085 -rw-r--r-- 2 unixzii staff 27 7 8 17:39 myfile
在 ls 结果的最左边一列,是文件的 inode 值,你可以简单把它想成 C 语言中的指针。
它指向了物理硬盘的一个区块,事实上文件系统会维护一个引用计数,只要有文件指向
这个区块,它就不会从硬盘上消失。
你也看到了,这两个文件就如同一个文件一样,inode 值相同,都指向同一个区块。
然后我们修改一下刚才创建的
hard
链接文件:
$ echo "New line" >> hard
$ cat myfile
This is a plain text file.
New line
可以看到,这两个文件果真就是一个文件。
下面我们看看软链接(也就是符号链接)和它有什么区别。
$ ln -s myfile soft
$ ls -li
25869085 -rw-r--r-- 2 unixzii staff 36 7 8 17:45 hard
25869085 -rw-r--r-- 2 unixzii staff 36 7 8 17:45 myfile
25869216 lrwxr-xr-x 1 unixzii staff 6 7 8 17:47 soft -> myfile
诶,你会发现,这个软链接的 inode 竟然不一样啊,并且它的文件属性上也有一个 l 的
flag,这就说明它与之前我们创建的两个文件根本不是一个类型。
下面我们试着删除
myfile
文件,然后分别输出软硬链接的文件内容:
$ rm myfile
$ cat hard
This is a plain text file.
New line
$ cat soft
cat: soft: No such file or directory
之前的硬链接没有丝毫地影响,因为它 inode 所指向的区块由于有一个硬链接在指向
它,所以这个区块仍然有效,并且可以访问到。
然而软链接的 inode 所指向的内容实际上是保存了一个绝对路径,当用户访问这个文件
时,系统会自动将其替换成其所指的文件路径,然而这个文件已经被删除了,所以自然
就会显示无法找到该文件了。
为验证这一猜想,我们再向这个软链接写点东西:
$ echo "Something" >> soft
$ ls
hard myfile soft
分区 任务日志 的第 3 页