我们都知道在 Linux 中删除文件用的是 rm 命令。
还有另一个命令可用于在 Linux 中删除文件和链接:unlink,虽然它听起来像是仅用于在 Linux 中删除链接,但它也可以删除文件。
当你删除一个文件时,Linux内核发现它对应于inode number X,它会从它的目录列表中删除文件条目并将inode X的链接计数减少1。现在inode X的链接计数为0,内核知道没有人链接到这个inode,所以删除这个 inode 并删除与之关联的数据块是安全的。
让我们看看如何使用 unlink 命令。
unlink命令
unlink 命令用于删除文件和链接,您可以使用它来删除软链接和硬链接。
–help它是最简单的参数之一。
要删除带有取消链接的文件,可以这样使用它:
unlink filename
要删除链接:
unlink link_name
成功删除文件或链接后,您将看不到任何输出。
基本上,这就是 unlink 命令的内容,它不能做任何其他事情。
不能一次删除多个文件或链接
虽然 rm 命令可以一次删除多个文件,但 unlink 一次只能删除一个文件。您一次不能给它多个文件,您也不能使用通配模式。
如果您尝试类似的操作,它会引发错误并且不会删除任何文件。
root@bunian:~/test$ unlink *.txt
unlink: extra operand ‘file2.txt’
Try 'unlink --help' for more information.
一次删除多个链接也是如此。
无法使用unlink删除目录
unlink 命令的 GNU 实现不能删除目录,如果您尝试删除文件夹,则会引发错误。
root@bunian:~$ unlink new_dir
unlink: cannot unlink 'new_dir': Is a directory
rm 和 unlink 命令的区别
unlink 命令使用 unlink 系统命令,而 rm 命令使用 unlinkat 系统调用,两个系统调用几乎相同。
这两个命令之间有一些明显的区别,您已经可以看到了。
unlink 命令一次只处理一个文件或链接。rm 命令一次可以处理多个。
rm 命令可以使用递归选项删除目录。unlink 命令不能删除目录。
rm 命令执行安全检查,如果您没有文件的写入权限,它会要求您以交互方式确认它或使用 force 选项-f。
unlink,没有安全检查,它将删除写保护的文件。
与 rm 命令不同,Unlink 没有额外的功能或选项。
在某些用例中,您可能更喜欢使用 unlink 命令而不是 rm,想象一下,您想“强制删除”一个文件而不考虑写保护,但如果文件不存在,您希望脚本失败。如果文件不存在,则 rm -f 不会显示任何错误,但 unlink 会引发错误。