软链接和硬链接

2016-06-02

软链接和硬链接

链接文件分为两种,硬链接(hard link)和软链接(symbolic link)。两种链接的本质区别关键点在于 inode。

硬链接:当系统要读取一个文件时,就会先去读 inode table,一个文件对应一个 inode,然后再去根据 inode 中的信息到块区域去将数据取出来。而硬链接是直接使用了和源文件相同的 inode,硬链接文件直接链接到文件放置的块区域。也就是说,进行硬链接的时候实际上该文件内容没有任何变化,只是指定了相同的 inode。硬链接有两个限制:(1)不能跨文件系统,因为不同的文件系统有不同的 inode table;(2)不能链接目录。

软链接:跟硬链接不同,这个是建立一个独立的文件,而这个文件的作用是当读取这个链接文件时,它会把读取的行为转发到该文件所 link 的文件上。比如说,有文件 a,我们做了一个软链接文件 b(只是一个链接文件,非常小),b 指向了文件 a。当读取 b 时,那么 b 就会把读取的动作转发到 a 上,这样就读取到了文件 a。所以,当我们删除文件 a 时,文件 b 并不会被删除,但是再读取 b 时,会提示无法打开文件。然而,删除 b 对 a 不会有任何影响。

命令 ln

语法 ln [-s] [来源文件] [目的文件]

ln 常用的选项就是 -s ,如果不加就是建立硬链接,加上就是建立软链接。

[root@localhost ~]# mkdir 123
[root@localhost ~]# cd 123
[root@localhost 123]# cp /etc/passwd ./
[root@localhost 123]# ll
总用量 4
-rw-r--r-- 1 root root 902 5月  13 23:55 passwd
[root@localhost 123]# du -sk
8       .
[root@localhost 123]# ln passwd passwd-hard
[root@localhost 123]# ll
总用量 8
-rw-r--r-- 2 root root 902 5月  13 23:55 passwd
-rw-r--r-- 2 root root 902 5月  13 23:55 passwd-hard
[root@localhost 123]# du -sk
8       .

上例中的 ll 命令等同于 ls -l。做了硬链接后,虽然两个文件大小都为 902,但是目录大小并没有变化。

[root@localhost 123]# ll
总用量 8
-rw-r--r-- 2 root root 902 5月  13 23:55 passwd
-rw-r--r-- 2 root root 902 5月  13 23:55 passwd-hard
[root@localhost 123]# rm -f passwd
[root@localhost 123]# ll
总用量 4
-rw-r--r-- 1 root root 902 5月  13 23:55 passwd-hard
[root@localhost 123]# du -sk
8       .

删除源文件 passwd,空间依旧不变。

[root@localhost 123]# cd ..
[root@localhost ~]# ln 123 456
ln: "123": 不允许将硬链接指向目录

硬链接不能用于目录。

[root@localhost ~]# mkdir 456
[root@localhost ~]# cd 456
[root@localhost 456]# cp /etc/passwd ./
[root@localhost 456]# ln -s passwd passwd-soft
[root@localhost 456]# ll
总用量 4
-rw-r--r-- 1 root root 902 5月  14 00:06 passwd
lrwxrwxrwx 1 root root   6 5月  14 00:06 passwd-soft -> passwd
[root@localhost 456]# head -n1 passwd-soft
root❌0:0:root:/root:/bin/bash
[root@localhost 456]# head -n1 passwd
root❌0:0:root:/root:/bin/bash
[root@localhost 456]# rm -f passwd
[root@localhost 456]# head -n1 passwd-soft
head: 无法打开"passwd-soft" 读取数据: 没有那个文件或目录
[root@localhost 456]# ll
总用量 0
lrwxrwxrwx 1 root root 6 5月  14 00:06 passwd-soft -> passwd

如果删除掉源文件,则软链接文件不能读取了,而且使用命令 ll 查看发现颜色也变了。

[root@localhost 456]# cd ..
[root@localhost ~]# ln -s 456 789
[root@localhost ~]# ls -ld 456 789
drwxr-xr-x 2 root root 4096 5月  14 00:08 456
lrwxrwxrwx 1 root root    3 5月  14 00:09 789 -> 456

说明目录是可以软链接的。


标题:软链接和硬链接
作者:散宜生
地址:https://17kblog.com/articles/2016/06/02/1464830496592.html