LINUX “软链接”和“硬链接”的区别

今天在知乎上看到一篇十分有趣的问题:

如何评价微软高级工程师痴迷于soft link这一linux常见概念?

虽然又是知名撕逼王曾某的撕逼帖,但是我还是想就题目中链接的问题简单地讲讲。

什么是链接?

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

它是用来干什么的?

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

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

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

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

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

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

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

This is a plain text file.

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

$ ln myfile hard
$ ls -li

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

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

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

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

$ echo "New line" >> hard
$ cat myfile

This is a plain text file.
New line

可以看到,这两个文件果真就是一个文件。

下面我们看看软链接(也就是符号链接)和它有什么区别。

$ ln -s myfile soft
$ ls -li

25869085 -rw-r--r--  2 unixzii  staff  36  7  8 17:45 hard
25869085 -rw-r--r--  2 unixzii  staff  36  7  8 17:45 myfile
25869216 lrwxr-xr-x  1 unixzii  staff   6  7  8 17:47 soft -> myfile

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

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

$ rm myfile
$ cat hard

This is a plain text file.
New line
$ cat soft

cat: soft: No such file or directory

之前的硬链接没有丝毫地影响,因为它 inode 所指向的区块由于有一个硬链接在指向它,所以这个区块仍然有效,并且可以访问到。

然而软链接的 inode 所指向的内容实际上是保存了一个绝对路径,当用户访问这个文件时,系统会自动将其替换成其所指的文件路径,然而这个文件已经被删除了,所以自然就会显示无法找到该文件了。

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

$ echo "Something" >> soft
$ ls

hard   myfile soft

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

总结

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

  • 硬链接: 与普通文件没什么不同,inode 都指向同一个文件在硬盘中的区块
  • 软链接: 保存了其代表的文件的绝对路径,是另外一种文件,在硬盘上有独立的区块,访问时替换自身路径。

出自:https://www.jianshu.com/p/dde6a01c4094

原文地址:https://www.cnblogs.com/shilinnpu/p/8494537.html

时间: 2024-10-19 06:47:32

LINUX “软链接”和“硬链接”的区别的相关文章

linux软链接与硬链接的区别

Linux 文件系统最重要的特点之一是它的文件链接.链接是对文件的引用,这样可以让文件在文件系统中多处被看到.不过,在 Linux 中,链接可以如同原始文件一样来对待.链接可以与普通的文件一样被执行.编辑和访问.对系统中的其他应用程序而言,链接就是它所对应的原始文件.当您通过链接对文件进行编辑时,您编辑的实际上是原始文件.链接不是副本,linux有两种类型的链接:硬链接和符号链接(软链接). 硬链接(hard link)只能引用同一文件系统中的文件.它引用的是文件在文件系统中的物理索引(也称为

Linux下软链接与硬链接的区别

Linux下软链接与硬链接的区别 Linux中的文件都文件名和数据,在linux上面被分为两个部分:元数据与数据.用户数据,即文件数据块(data block),数据块是记录文件真实内容的地方,而元数据是文件的附加属性,如大小,创建时间,所有者等信息.在Linux中,元数据中的inode号(inode是文件的元数据的一部分,但其不包含文件名,inode号即索引节点号)才是文件的唯一标识而不是文件名.文件名仅是为了方便人们的记忆和使用,系统或程序通过inode号寻找正确的文件数据快.下图为程序通过

[转帖]Linux 下软链接和硬链接的区别

Linux 下软链接和硬链接的区别 http://os.51cto.com/art/201911/605267.htm 软连接 文件是小的 只是一个链接 删除和其他处理不影响 原始文件的计数 删除源文件 链接文件立马完蛋 但是可以跨文件挂载点进行连接. 硬链接 增加了innode 的引用计数. 删除时 只要还有一个有链接 文件就还有. 但是不能跨挂载点进行硬链接 软连接 就是 ln -s 硬链接 直接 ln 在 Linux 系统中,一切都是文件,然而为了区分不同类型的事物,我们有了: 普通文件

Linux软链接和硬链接文件

下面是Linux系统软件底层的存储结构,我们将从底层上来去解释Linux系统下的软硬连接文件 <一>: 解释(底层) 硬链接,其实从底层数据上来看, 硬链接其实就是增加了一个目录项.底层对应的inode table.数据区中的值是不变的, 也不会重新创建. 软链接, 其实从底层接上看, 软链接其实就是相当于重新创建了一个文件,, 无论是目录项,inode table,以及数据区都是重新重建的,而这个文件功能比较特殊, 它是用来指向另外一个文件的. <二>:命令的使用 硬链接命令:

linux软链接和硬链接

1.Linux链接概念Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link).默认情况下,ln命令产生硬链接. 在Linux系统中,内核为每一个新创建的文件分配一个Inode(索引结点),每个文件都有一个惟一的inode号.文件属性保存在索引结点里,在访问文件时,索引结点被复制到内存在,从而实现文件的快速访问. QUOTE: ln [options] existingfile newfileln[options] existingfile

Linux 软链接和硬链接的理解与学习

要想弄明白Linux的软链接和硬链接的概念,首先要明白linux是怎么管理文件的. 以下笔记部分内容来自互联网搜索,个人理解加以整合所得. 1. 文件系统 (作者:Vamei 出处:http://www.cnblogs.com/vamei/archive/2012/09/09/2676792.html) 文件被组织到文件系统(file system)中,通常会成为一个树状(tree)结构.Linux有一个根目录/, 也就是树状结构的最顶端.这个树的分叉的最末端都代表一个文件,而这个树的分叉处则是

linux 软连接和硬链接的区别

linux 软连接和硬链接的区别 2011-06-27  zale的图...   阅 3345  转 23 转藏到我的图书馆 微信分享: 4点不同 : (1)软连接可以 跨文件系统 ,硬连接不可以 .实践的方法就是用共享文件把windows下的 aa.txt文本文档连接到linux下/root目录 下 bb,cc . ln -s aa.txt /root/bb 连接成功 .ln aa.txt /root/bb 失败 .(2)关于 I节点的问题 .硬连接不管有多少个,都指向的是同一个I节点,会把

第三章 Linux 软链接与硬链接

Linux 软链接与硬链接 通过实验加深理解 [[email protected]]$ touch f1          #创建一个测试文件f1 [[email protected]]$ ln f1 f2          #创建f1的一个 硬连接   文件f2 [[email protected]]$ ln -s f1 f3       #创建f1的一个 符号连接 文件f3  即软链接 [[email protected]]$ ls -li            # -i参数显示文件的ino

linux中软链接和硬链接的区别与小结

ln命令 该命令在文件之间创建链接.这种操作实际上是给系统中已有的某个文件指定另外一个可用于访问它的名称.对于这个新的文件名,我们可以为之指定不同的访问权限,以控制对信息的共享和安全性的问题. 如果链接指向目录,用户就可以利用该链接直接进入被链接的目录而不用打一大堆的路径名.而且,即使我们删除这个链接,也不会破坏原来的目录. 语法:ln [选项] 目标 [链接名] ln [选项] 目标 目录 链接有两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link).