首页 > 系统 > Linux > 正文

详解Linux ln 命令

2019-10-26 18:59:45
字体:
来源:转载
供稿:网友

Linux 中的文件分为 Hard Link 和 Symbolic Link 两种。Hard Link 文件又被称为硬链接文件、实体链接文件,Symbolic Link 文件则常被称为符号链接、软链接文件。

ln 命令用来在文件之间建立链接。在介绍 ln 命令前,让我们先来搞清楚究竟什么是硬链接,什么又是软链接。

Hard Link(硬链接)

我们知道,在 Linux 系统中,每个文件对应一个 inode,文件的内容在存储在 inode 指向的 data block 中。要读取该文件的内容,需要通过文件所在的目录中记录的文件名找到文件的 inode 号,然后通过 inode 找到存储文件内容的 data block(参考《Linux 文件与目录》)。

也就是说,文件名存储在目录中,inode 号执行文件存储的内容,文件名和 inode 之间有一个对应关系。那么多个文件名可不可以同时指向同一个 inode 呢?答案是可以的,这就是硬链接!从本质上来说,硬链接只是在目录下新添加了一个文件名,这个文件名与一个已有文件的 inode 相关联。让我们也通过 /etc/crontab 文件来进行观察:

$ ll -i /etc/crontab131213 -rw-r--r-- 1 root root 722 Nov 16 2017 /etc/crontab

使用 ln 命令在当前目录下创建一个 /etc/crontab 文件的硬链接,然后观察其文件属性:

$ sudo ln /etc/crontab .$ ll -i /etc/crontab crontab131213 -rw-r--r-- 2 root root 722 Nov 16 2017 crontab131213 -rw-r--r-- 2 root root 722 Nov 16 2017 /etc/crontab

这两个文件名关联的 inode 号完全相同,都是 131213,所以它们指向的是同一个文件。同时请注意文件属性中的第三个字段,由 1 变成了 2。这个字段被称为 "链接数",它说明有多少个文件名链接到同一个文件的 inode。

另外需要注意的一点是上面所有输出中的第二个字段中的第一位,它们都是 "-",它说明这个文件的类型为普通文件,链接类型为硬链接。

我们可以通过下图来理解硬链接在文件系统中的实现方式:

硬链接的特点

几乎不额外占用空间 只要还有一个文件名引用着文件,文件就不会被真正删除

由于硬链接只是在目录中添加了一条包含文件名和 对应 inode 的记录,所以它几乎不会消耗额外的磁盘容量。
另外在删除硬链接所关联的文件时,其实只是删除了一条目录中的记录,真正的文件并不受影响。只有在删除最后一个硬链接时才会真正删除文件的内容数据。

硬链接的局限性

不能跨文件系统创建硬链接 不能链接目录

由于这两个限制,实际使用中硬链接并没有软链接使用的广泛,下面我们看看究竟什么是软链接。

Symbolic Link(软链接)

软链接的实现方式与硬链接有本质上的不同。创建软链接时会创建一个新的文件(分配一个 inode 和对应的 data block),新文件的 data block 中存储了目标文件的路径。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表