![链接和复制](https://linux22.com/image/176043/%E9%93%BE%E6%8E%A5%E5%92%8C%E5%A4%8D%E5%88%B6.png)
我有一些关于 UNIX 中的链接的问题
- 我可以说 UNIX 中的软链接类似于 Windows 中的快捷方式吗?
- 复制和硬链接之间的区别?
- 谁能给我一个用例,我应该更喜欢硬链接而不是复制?
我现在很混乱。非常感谢任何帮助
答案1
基本的事情是,复制会生成文件的副本,而链接(软链接或硬链接)则不会。
作为一个抽象模型,将您的目录视为一个表,其中包含:
filename where the file is content of the file
---------------------------------------------------------
a.txt sector 13456 abcd
b.txt sector 67679 bcde
当我复制文件时cp a.txt c.txt
,我得到以下信息:
filename where the file is content of the file
---------------------------------------------------------
a.txt sector 13456 abcd
b.txt sector 67679 bcde
c.txt sector 79774 abcd
当我硬链接文件时ln b.txt d.txt
,我得到以下信息:
filename where the file is content of the file
---------------------------------------------------------
a.txt sector 13456 abcd
b.txt sector 67679 bcde
c.txt sector 79774 abcd
d.txt sector 67679 bcde
所以,现在b.txt
和d.txt
是完全相同的文件。如果我f
向 中添加一个字符d.txt
,它也会出现在b.txt
硬链接的问题是只能在同一个文件系统上进行。因此,大多数人都使用软链接,ln -s a.txt e.txt
:
filename where the file is content of the file
---------------------------------------------------------
a.txt sector 13456 abcd
b.txt sector 67679 bcde
c.txt sector 79774 abcd
d.txt sector 67679 bcde
e.txt sector 81233 "Look at where a.txt is located"
作为一阶近似,软链接有点像 Windows 中的快捷方式。然而,软链接是文件系统的一部分,因此适用于每个程序。 Windows 快捷方式只是一个由explore.exe
(和其他一些程序)解释的文件。但是 Windows 程序需要在解释快捷方式时做一些事情,而在 Linux 中,软链接是自动处理的。
链接的大多数用途都使用软链接,因为它们更灵活,可以指向其他文件系统,可以与 NFS 等一起使用。
我见过的硬链接的一个用例是确保用户不会删除文件。系统管理员在“指针”目录中创建了硬链接,当用户无意中rm
编辑了一个文件(显然这种情况经常发生)时,他可以立即恢复该文件,而无需使用磁带,无需双倍磁盘空间等。
其工作原理如下:
filename where the file is content of the file
---------------------------------------------------------
a.txt sector 13456 abcd
b.txt sector 67679 bcde
当用户输入 时rm a.txt
,表格将是:
filename where the file is content of the file
---------------------------------------------------------
b.txt sector 67679 bcde
所有参考都a.txt
丢失了。磁盘空间可以回收用于其他文件。
但是,如果系统管理员保留重要文件链接的副本,则该表格将是:
filename where the file is content of the file
---------------------------------------------------------
a.txt sector 13456 abcd
b.txt sector 67679 bcde
link.a.txt sector 13456 abcd
link.b.txt sector 67679 bcde
当用户现在键入 时rm a.txt
,该表将变为:
filename where the file is content of the file
---------------------------------------------------------
b.txt sector 67679 bcde
link.a.txt sector 13456 abcd
link.b.txt sector 67679 bcde
由于仍然存在对从 13456 开始的文件的引用,因此该文件的磁盘空间不会被标记为空闲。所以该文件仍然存在。当用户现在询问是否可以以某种方式恢复该文件时a.txt
,系统管理员只需执行操作ln link.a.txt a.txt
,文件a.txt
就会重新出现!还有最新的编辑。 (当然,它link.a.txt
位于同一文件系统上的另一个目录中,这并不意味着您可以忘记备份,但在当时和地点,这是一个有用的选项)。
答案2
不,快捷方式是独立文件,必须先由 Windows 资源管理器/Shell 打开,然后打开处理它们的应用程序或执行应用程序。另一方面,Unix 应用程序可以直接打开符号链接并将其作为真实文件使用。
复制创建文件的副本,而硬链接仅创建链接到磁盘上相同数据的新索引节点。硬链接在磁盘上占用的空间几乎为零。
我从未在任何程度上使用过硬链接,所以我无法给你任何例子。下面是 Unix 中符号链接和硬链接的一个很好的比较:https://blog.usejournal.com/what-is-the-difference- Between-a-hard-link-and-a-symbolic-link-8c0493041b62 https://www.geeksforgeeks.org/soft-hard-links-unixlinux/