链接和复制

链接和复制

我有一些关于 UNIX 中的链接的问题

  1. 我可以说 UNIX 中的软链接类似于 Windows 中的快捷方式吗?
  2. 复制和硬链接之间的区别?
  3. 谁能给我一个用例,我应该更喜欢硬链接而不是复制?

我现在很混乱。非常感谢任何帮助

答案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.txtd.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

  1. 不,快捷方式是独立文件,必须先由 Windows 资源管理器/Shell 打开,然后打开处理它们的应用程序或执行应用程序。另一方面,Unix 应用程序可以直接打开符号链接并将其作为真实文件使用。

  2. 复制创建文件的副本,而硬链接仅创建链接到磁盘上相同数据的新索引节点。硬链接在磁盘上占用的空间几乎为零。

  3. 我从未在任何程度上使用过硬链接,所以我无法给你任何例子。下面是 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/

相关内容