链接文件分为两种,硬链接(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:x:0:0:root:/root:/bin/bash

[root@localhost 456]# head -n1 passwd

root:x: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

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