一、Linux 下的链接种类
- 软链接:类似于 windows系统中的快捷方式,与硬链接不同,软链接就是一个普通文件,只是数据块内容有点特殊,文件用户数据块中存放的内容是另一文件的路径名的指向,通过这个方式可以快速定位到软连接所指向的源文件实体。
- 硬链接:通过文件系统的 inode 进行链接,类似于 windows系统中的复制,但是不产生新的文件。
二、什么是 inode?
inode 是用来存放文件信息的,每个文件都会占用一个 inode,并且这个 inode 号是唯一的,文件的内容都是 inode 来指定的,而不是文件名,当系统要访问文件时,inode 就会被复制到内存,从而实现文件的快速访问,使用 ls -i
命令则可以看到 inode 号。
三、如何创建硬链接?
可以用 ln 命令来建立硬连接。
格式:ln 源文件 目标文件
常用参数-f
无论目标文件是否存在都要创建连接。
在例子中我们可以发现 test1.c 和 test2.c 他们的 inode 号码都是 44564692。因为inode 号一样,所有这个俩个文件的权限和属性也是一模一样的,也是 test1.c 和 test2.c 是俩个完全一样的文件。
连接数也由 1 变成了 2,这个代表的是有多少个档名链接到了这个 inode 号。
再创建一个硬连接。使用 ln test1.c tset3.c 命令后,则会发现我们这个连接数从2 变成了 3
使用硬链接的优缺点是什么?
优点:
方便;虽然类似于 win 的复制,但是通常并不占用实际空间。而且不管我们是修改 test1.c 或者是修改 test2.c 还是 test3.c,只要修改一个,我们的文件就会被同时修改,因为他们的 inode 号都是相同的。
我们修改 test3.c 的内容为如下图所示:
test1.c 和 test2.c 的内容也被修改成了 nihao,如下图所示:
安全:防止误删除,我们删除 test1.c 或者是 test2.c 或 test3.c 任意一个,我们还是可以通过剩下的连接来访问文件。除非都删掉。
我们删掉 test1.c。但是 test2.c 或 test3.c 还是可以访问到“nihao”这个内容。
缺点:
只能在同一个文件系统才可以创建硬连接(因为不同的文件系统管理方式不同),并且目录之间不能创建硬连接。(太复杂,现在还不支持)
四、如何创建软链接?
可以用 ln 命令来建立软连接。
格式:ln -s 源文件 目标文件
(必须加上-s 参数,使用 ln 如果不加任何参数的话,那么就是 Hard Link,而且源文件要用绝对路径)。
上图中我们可以发现 test1.c 和 test2.c 的 inode 号是不一样的,所以这个俩个文件是完全独立的,总之软连接就是创立了一个新的文件,当访问这个连接文件的时候,系统就会发现他是一个连接文件,然后读取连接文件找到真正要访问的文件。
因为类似于 win 的快捷方式,我们删掉源文件 test2.c ,test1 就不能打开了,如下图所示:
软连接虽然没有硬链接安全,但是限制少,所以使用范围还是很广泛的。