5分钟让你明白“软链接”和“硬链接”的区别

本文转自简书https://www.jianshu.com/p/dde6a01c4094

 

什么是链接?

链接简单说实际上是一种文件共享的方式,是 POSIX 中的概念,主流文件系统都支持链接文件。

它是用来干什么的?

你可以将链接简单地理解为 Windows 中常见的快捷方式(或是 OS X 中的替身),Linux 中常用它来解决一些库版本的问题,通常也会将一些目录层次较深的文件链接到一个更易访问的目录中。在这些用途上,我们通常会使用到软链接(也称符号链接)。

软链接和硬链接的区别是?

下面我们进入正题,来探讨一下软硬两种链接到底有什么区别?

首先,从使用的角度讲,两者没有任何区别,都与正常的文件访问方式一样,支持读写,如果是可执行文件的话也可以直接执行。

那区别在哪呢?在底层的原理上。

为了解释清楚,我们首先在自己的一个工作目录下创建一个文件,然后对这个文件进行链接的创建:

 
  1. $ touch myfile && echo "This is a plain text file." > myfile

  2. $ cat myfile

  3.  
  4. This is a plain text file.

现在我们创建了一个普通地不能再普通的文件了。然后我们对它创建一个硬链接,并查看一下当前目录:

 
  1. $ ln myfile hard

  2. $ ls -li

  3.  
  4. 25869085 -rw-r--r-- 2 unixzii staff 27 7 8 17:39 hard

  5. 25869085 -rw-r--r-- 2 unixzii staff 27 7 8 17:39 myfile

在 ls 结果的最左边一列,是文件的 inode 值,你可以简单把它想成 C 语言中的指针。它指向了物理硬盘的一个区块,事实上文件系统会维护一个引用计数,只要有文件指向这个区块,它就不会从硬盘上消失。

你也看到了,这两个文件就如同一个文件一样,inode 值相同,都指向同一个区块。

然后我们修改一下刚才创建的 hard 链接文件:

 
  1. $ echo "New line" >> hard

  2. $ cat myfile

  3.  
  4. This is a plain text file.

  5. New line

可以看到,这两个文件果真就是一个文件。
下面我们看看软链接(也就是符号链接)和它有什么区别。

 
  1. $ ln -s myfile soft

  2. $ ls -li

  3.  
  4. 25869085 -rw-r--r-- 2 unixzii staff 36 7 8 17:45 hard

  5. 25869085 -rw-r--r-- 2 unixzii staff 36 7 8 17:45 myfile

  6. 25869216 lrwxr-xr-x 1 unixzii staff 6 7 8 17:47 soft -> myfile

诶,你会发现,这个软链接的 inode 竟然不一样啊,并且它的文件属性上也有一个 l 的 flag,这就说明它与之前我们创建的两个文件根本不是一个类型。

下面我们试着删除 myfile 文件,然后分别输出软硬链接的文件内容:

 
  1. $ rm myfile

  2. $ cat hard

  3.  
  4. This is a plain text file.

  5. New line

 
  1. $ cat soft

  2.  
  3. cat: soft: No such file or directory

之前的硬链接没有丝毫地影响,因为它 inode 所指向的区块由于有一个硬链接在指向它,所以这个区块仍然有效,并且可以访问到。
然而软链接的 inode 所指向的内容实际上是保存了一个绝对路径,当用户访问这个文件时,系统会自动将其替换成其所指的文件路径,然而这个文件已经被删除了,所以自然就会显示无法找到该文件了。

为验证这一猜想,我们再向这个软链接写点东西:

 
  1. $ echo "Something" >> soft

  2. $ ls

  3.  
  4. hard myfile soft

可以看到,刚才删除的 myfile 文件竟然又出现了!这就说明,当我们写入访问软链接时,系统自动将其路径替换为其所代表的绝对路径,并直接访问那个路径了。

总结

到这里我们其实可以总结一下了:

  • 硬链接: 与普通文件没什么不同,inode 都指向同一个文件在硬盘中的区块
  • 软链接: 保存了其代表的文件的绝对路径,是另外一种文件,在硬盘上有独立的区块,访问时替换自身路径。
在CentOS 6的字符界面中,创建文件的硬链接软链接是理解Linux文件系统深层机制的重要实践。为了深入学习这个过程,推荐查看《上海大学Linux操作系统实验:基础命令与环境探索》。这份实验教程将帮助你掌握与硬链接软链接相关的Linux命令,以及它们之间的根本差异。 参考资源链接:[上海大学Linux操作系统实验:基础命令与环境探索](https://wenku.csdn.net/doc/1qtk49z5vj?spm=1055.2569.3001.10343) 硬链接可以通过ln命令直接创建。例如,要为文件mytext.txt创建一个硬链接,你可以使用以下命令: ``` ln mytext.txt hard_link_to_mytext ``` 这条命令会创建一个新的硬链接,该链接与原始文件指向相同的inode。在Linux中,inode是文件系统中存储文件信息的结构,包含了文件类型、权限、数据块指针等信息。硬链接的原理是文件系统中不同的文件名(硬链接)指向同一个inode,因此它们都表示同一个文件。硬链接的限制包括不能跨文件系统创建,且不能为目录创建硬链接软链接(符号链接)则可以跨文件系统,并且可以链接到目录。创建软链接的命令如下: ``` ln -s mytext.txt soft_link_to_mytext ``` 软链接实际上是一个特殊的文件,它存储的是另一个文件的路径。这个路径指向原始文件,因此软链接原始文件并不共享同一个inode。软链接的好处是它们可以链接到不存在的文件,或者链接到其他文件系统中的文件。但是,软链接也有其脆弱性,如果原始文件被删除,软链接就会变得无效,指向一个不存在的路径。 通过实践这些命令,你可以加深对文件链接概念的理解,明白为什么在某些情况下选择硬链接而不是软链接,以及在维护Linux系统时如何有效地使用这些链接。《上海大学Linux操作系统实验:基础命令与环境探索》中包含了丰富的实例详细解释,可以帮助你更全面地掌握这些概念,并在实际环境中应用。 参考资源链接:[上海大学Linux操作系统实验:基础命令与环境探索](https://wenku.csdn.net/doc/1qtk49z5vj?spm=1055.2569.3001.10343)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值