我创建了一个硬链接
$ ln hours.sh hours_link
测试一下
$ ls -l hours*
-rw-r--r-- 2 me staff 653 Apr 12 2018 hours.sh
-rw-r--r-- 2 me staff 653 Apr 12 2018 hours_link
通过取消链接将其删除
$ unlink hours_link
$ ls -l hours*
-rw-r--r-- 1 me staff 653 Apr 12 2018 hours.sh
到目前为止一切顺利,但unlink
可以删除不是链接的原始文件
$ cp hours.sh hours.bak.sh
$ unlink hours.sh
$ ls | grep hours.sh
#not return anything, hours.sh is deleted
查看手册并非常惊讶
unlink - call the unlink function to remove the specified file
rm - remove files or directories
如果不只是认为这是理所当然的,我该如何理解这种转换?
答案1
目录中的每个条目都是该文件的硬链接。两者都rm
删除unlink
硬链接。当且仅当指向该文件的所有硬链接都被删除并且没有进程打开该文件时,该文件才会被删除。
因此,原始名称和使用创建的名称之间没有区别(在形式上,只是名称)ln
。