取消链接删除不是链接的文件

取消链接删除不是链接的文件

我创建了一个硬链接

$ 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

相关内容