硬链接和软链接的区别(什么是软连接和硬连接二者有何区别)

什么是链接?

链接简单说实际上是一种文件共享的方式,是 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 hard25869085 -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 hard25869085 -rw-r--r-- 2 unixzii staff 36 7 8 17:45 myfile25869216 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 都指向同一个文件在硬盘中的区块软链接: 保存了其代表的文件的绝对路径,是另外一种文件,在硬盘上有独立的区块,访问时替换自身路径。

(0)

相关推荐

  • Unix系统中的硬链接和软链接详解

    简单的说连接就是可以指向文件系统中其他位置的一个快捷方式,它非常有用,可以避免键入很长的路径名或cd深入到多个文件夹中,用过Windows系统桌面的程序图标其实就是一个快捷方式,大家也可以这么理解,不 ...

  • 实例讲解Linux系统中硬链接与软链接的创建

    首先要弄清楚,在Linux系统中,内核为每一个新创建的文件分配一个Inode(索引结点),每个文件都有一个惟一的inode号.文件属性保存在索引结点里,在访问文件时,索引结点被复制到内存在,从而实现文 ...

  • linux 硬链接和软链接深入理解

    在学习linux的过程中,我经常把软硬链接,所以今天专门查了一些资料,然后整合在自己的博客中,方便以后复习,查看。 一方面也是因为看了vamei的linux的概念与体系系列文章,感觉不全的做些补充。 ...

  • Linux中文件与目录对应的硬链接与软链接方式总结

    硬链接新建的文件是已经存在的文件的一个别名,当原文件删除时,新建的文件仍然可以使用.硬链接特征:1.拥有相同的 i节点 和相同的存储block快,可以看做是同一个文件2.可通过i节点识别,i节点号相同 ...

  • 如何在win10电脑中建立硬链接软链接和符号链接

    我们想要在win10电脑中进行文件的链接功能,想要建立硬链接.软链接和符号链接该怎么操作呢?今天就跟大家介绍一下如何在win10电脑中建立硬链接软链接和符号链接的具体操作步骤.1. 首先打开电脑,点击 ...

  • Linux系统中ln命令创建软链接与硬链接的方法

    Linux 系统下每创建一个文件,系统都会为此文件生成一个 index node 简称(inode) ,而每一个文件都包含用户数据(user data) 与 元数据(metadata) 用户数据里记录 ...

  • linux系统的硬链接和软连接

    linux系统有硬链接和软连接,都是由ln指令实现,他们有什么区别的,在这里我给大家解释一下 1.创建硬链接 01 创建文件a.txt并写入hello,用ln 指令创建硬链接b,查看b中的内容与a.t ...

  • linux命令大全之ln命令详解(创建软链接和硬链接)

    ln是linux中又一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接.当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在 ...

  • Linux给文件或目录创建软链接或硬链接的方法

    有时Linux用户们为了使用方便,会想给电脑中的文件或目录创建软链接或硬链接.不过有些用户不清楚该怎么给这些文件或目录创建软链接或硬链接该怎么办呢?别急,现在小编就来教你解决的方法. 解决方法: 当我 ...