正确取消硬链接

正确取消硬链接

我有一个像这样的脚本

ln /myfile /dev/${uniquename}/myfile

我想删除 的链接/dev/somename/myfile以减少链接计数。

我该怎么做呢?

答案1

TL;DR...只需删除您不需要的文件名(带有rm)。

如果您创建硬链接(这就是上面的命令所做的),您将有两个名称指向同一存储区域。您可以删除其中一个名称,而不会影响另一个名称或存储 - 只有当删除最后一个名称时,存储区域才会被释放。

将此与使用ln -s- 创建的软链接进行比较,链接不同,它是指向原始名称的指针,而不是指向存储的指针。如果删除原始命名文件,软链接会指向已删除的内容,因此链接仍然存在,但已损坏。

答案2

删除硬链接的命令是rm

来自手册页为了rm

Remove (unlink) the FILE(s).

答案3

我有点不确定你的意思,但我认为你的脚本创建/myfile为硬链接/dev/…/myfile,然后你想删除后者。

如果这是正确的,您可以直接移动文件,而不是链接然后删除链接,从而在单个命令 (mv) 而不是两个命令(ln 和 rm)中产生相同的结果:

mv   /dev/…/myfile   /

答案4

大多数现有答案都提倡使用rm.这是完全正确的,因为您不删除文件:您删除链接(并且当指向该文件的最后一个链接被删除并且最后一个打开的文件描述符被关闭时,该文件也会被删除)。

但是,您还应该了解另一个实用程序,unlink.它缺少 的选项rm,并且总是具有隐式-f选项(有点 - 但它会在丢失文件时失败)。好处是您可以删除以破折号开头的文件,至少在理论上......

...除非您使用 Linux 系统,否则您不能这样做,因为 GNUunlink通过添加命令行选项支持来削弱该实用程序!因此,unlink -t不会删除-tLinux 系统或使用 GNU coreutils 的任何其他系统上命名的文件。

(是的,我知道这一点rm -- -tunlink -- -t有效,无需对此发表评论。)

相关内容