任何习惯使用 Windows 的人都能想象符号链接是什么以及它们的用法。另一方面,硬链接的概念对于 Windows 来说是陌生的(我说得对吗?)。
我想知道 Linux 中硬链接的典型用途是什么。我已经看到过不同的帖子描述了它们工作方式的不同。我想问的是,在哪些典型情况下,用户最好使用硬链接而不是符号链接?
答案1
当我需要在两个或更多位置使用单个文件时,我会使用硬链接,我预计有一天我会删除其中一个位置,并且我可能会忘记我有指向该文件的链接。这可以防止我最终得到指向不再存在的文件的符号链接。
澄清:
文件名实际上是指向该文件的硬链接。因此,每个文件至少有一个硬链接,也就是我们通常所认为的“文件名”。删除文件时,实际上是在删除其硬链接(因此名称为“删除”,而不是rm
“删除”)。删除文件的最后一个硬链接后,系统也会删除该文件。
答案2
硬链接允许...
一个可执行文件可以有多个名称。
例子:
ls -l /bin | grep -v ' 1 ' | sort
将为您列出/bin
。结果...-rwxr-xr-x 2 root root 63 2010-01-19 21:49 gunzip -rwxr-xr-x 2 root root 63 2010-01-19 21:49 uncompress -rwxr-xr-x 3 root root 26300 2011-12-12 22:40 bunzip2 -rwxr-xr-x 3 root root 26300 2011-12-12 22:40 bzcat -rwxr-xr-x 3 root root 26300 2011-12-12 22:40 bzip2
bunzip2 和 bzcat 并不使用 3 个文件,而是使用同一个文件,并在文件内部区分要执行的操作。节省代码,代码越少,错误的可能性就越小,维护也越容易。
可以通过多条路径访问单个文件。
以包管理器为例,它会为每个已安装的包创建一个 /usr/share/doc/$packagename 目录,并在该目录中创建一个名为 LICENSE 的文件,其中包含包的许可证信息。典型 Linux 系统上的许多包都是 GPL 许可的,因此文件系统上可能只有一份副本和 199 个链接,而不是有 200 份 GPL 副本。ptman@Serverfault
硬链接在这里起作用(而软链接不起作用)的原因是:仅删除其中一个硬链接不会删除文件本身。