前言
硬链接的原理:使链接的两个文件共享同样的文件内容,也就是同样的 inode。
硬链接有一个缺陷:只能创建指向文件的硬链接,不能创建指向目录的硬链接。但软链接可以指向文件或目录。
软链接的原理:就跟我们在window
ln 命令
创建链接(软连接和硬链接)
linux中文件存储的方式,是文件名和文件内容单独分开存储在硬盘上的。
每个文件的文件内容被分配到一个标示号码,就是 inode。因此每个文件名都绑定到它的文件内容(用 inode 标识)
创建硬链接
cd
mkdir test
cd test
并且用 touch 命令创建一个新的空白文件:
touch file1
我们接着来创建一个文件 file2,使之成为 file1 的硬链接。
要创建硬链接,直接用 ln 命令,不加任何参数:
ln file1 file2
以上命令创建了 file1 的一个硬链接 file2。
但是我们可以用 ls -i 命令查看一下(-i 参数可以显示文件的 inode)。我们可以看到 file1 和 file2 的 inode 是一样的,都是 655571。当然你的电脑上应该和我不一样,是其它数字吧。
如果我们用 rm file2 来删除 file2,那么对 file1 没什么影响。如果我们用 rm file1 来删除 file1,对 file2 也没什么影响。所以,对于硬链接来说,删除任意一方的文件,共同指向的文件内容并不会从硬盘上被删除。
只有既删除 file1 又删除 file2,它们共同指向的文件内容才会消失,也就是那个 inode 才会被删去。
原理图
创建软链接
创建硬链接时 ln 命令不带任何参数,但是要创建软链接需要加上 -s 参数
ln -s file1 file2
用 ls -l 命令查看一下,会发现形式和之前的硬链接不一样噢。file2 的信息是这样的: file2->file1,表示 file2 指向 file1。
file2 的文件信息里,第一列表示权限的第一个字母变成了 l,表示 link(链接)。之前硬链接的时候是没有l的,硬链接外表看起来就和普通文件类似。file2 的颜色是浅蓝色,也说明是链接文件。
我们用 ls -l 命令查看文件信息的时候,第二列的那个 1,表示拥有相同 inode 号的文件数。不难理解,因为 file2 指向 file1,它们并没有指向同一块文件内容,所以它们的 inode 号不相同。
用 ls -i 看一下就知道了:
file1 的 inode 号仍然是 655571。而 file2 的 inode 号是 655574,不一样。
打开 file2 查看,发现和 file1 是一样的。这不难理解,因为 file2 这个软链接只是 file1 的一个快捷方式,它指向的是 file1,所以显示的是 file1 的内容。但其实它自身的 inode 和 file1 并不一样,也就是文件内容不一样。
1 如果我们删除了 file2,没什么大不了,file1 不会受到影响。但是如果删除了 file1,那么 file2 会变成“死链接”,因为指向的文件不见了。
2 软链接可以指向目录,硬链接不行。
原理图:
参考链接
该文为本人学习的笔记,方便以后自己复习。参考以及图片来自
慕课网专栏:https://www.imooc.com/read/39
取其精华整合而成。