Linux中的软连接和硬连接

链接文件

链接文件包括两种方式,软链接文件和硬链接文件。无论是软链接还是硬链接,文件都保持同步变化。软链接是可以跨分区的,但是硬链接只能在同一分区内[1]

一、软连接文件

软链接类似于windows中的快捷方式。可以是任意文件或目录,并且可以链接不同文件系统的文件。软链接文件甚至可以链接不存在的文件,这就产生一般称之为”断链”的问题(或曰“现象”),链接文件甚至可以循环链接自己,类似于编程语言中的递归。软连接的相关文件,若源文件遭到删除,则其他相关软连接文件即使可以打开,也只是一个空文件。

软链接文件只会在你选定的位置上生成一个文件的镜像,不会占用磁盘空间

创建指令:ln -s 文件1(源) 文件2(符号文件)

软链接创建后通过命令llls -al查看符合文件所在目录,可看到符号文件链接的实际指向。
如图所示:

我们此时打开符号文件,可看到源文件内容
如图所示:

此时,我们删除源文件,紧接着通过ll查看软链接的颜色变化,然后再次和刚才一样打开符号文件,可以发现此时打开的文件没有任何内容
如图所示:

反之,在对符号文件进行读或写操作的时候,系统会自动把该操作转换为对源文件的操作,但删除符号文件时,系统仅仅删除链接的文件(即快捷方式被删除),而不删除源文件本身。

二、硬连接文件

硬链接创建后,会在你选定的位置上生成一个和源文件大小相同的文件,硬连接的作用是允许一个文件拥有多个有效路径名,一般可以对重要文件建立硬连接,防止文件被误删。硬链接在使用llls -alls -hl时,可以看到链接数(文件权限右边的数字),每创建一次硬链接,其相关系列文件的硬链接数就会加一。也就是说,在Linux中,只有文件的硬链接数等于0才算是真正的删除了这个文件[2]

创建指令:ln -d 文件1(源) 文件2(新)ln 文件1(源) 文件2(新)

  • 硬链接特点

    • 不允许给目录创建硬链接;

    • 只有在同一文件系统中的文件之间才能创建硬链接。(实践的方法就是用共享文件把windows下的”aa.txt”文本文档连接到linux下/root目录下”bb”。ln -s aa.txt /root/bb连接成功。而ln aa.txt /root/bbln -d aa.txt /root/bb失败[3])。

    • 对硬链接文件进行读写和删除操作时候,结果和软链接相同。但如果我们删除硬链接文件的源文件,硬链接文件仍然存在,而且保留了愿有的内容。

参考

[1] 链接文件配置

[2] 50-Ubuntu-其他命令-2-软硬链接示意图

[3] ubuntu下的软链接和硬链接