链接文件分为两种,硬链接(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
说明目录是可以软链接的。
转载于:https://blog.51cto.com/sanyisheng/1775625