首页 > 代码库 > 软链接和硬链接

软链接和硬链接

软链接文件和硬链接文件

链接文件分为两种,硬链接(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是不会有任何影响的。

看样子,似乎硬链接比较安全,因为即使某一个文件被删除了,只要有任何一个文件存在,那么该文件对应的inode就还在,那么文件就不会消失不见!不过,不幸的是,由于硬链接的限制太多了,包括无法做目录的link,所以在用途上面是比较受限的!反而是软链接的使用方向较广!

那么如何建立软链接和硬链接呢?这就要用到 ln 命令。

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

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

[root@qiangzi ~]# mkdir 123[root@qiangzi ~]# cd 123      (cd命令:切换工作目录)[root@qiangzi 123]# cp /etc/passwd ./         (cp命令:拷贝)[root@qiangzi 123]# ll        (ll命令:ll会列出该文件下的所有文件信息,包括隐藏的文件,而ls -l只列出显式文件,说明这两个命令还是不等同的!)总用量 12-rw-r--r-- 1 root root 1258 12月 25 01:58 passwd
[root@qiangzi 123]# du -sk      (du命令:du(disk usage)命令可以计算文件或目录所占的磁盘空间。没有指定任何选项时,它会测量当前工作目录与其所有子目录,分别显示各个目录所占的快数,最后才显示工作目录所占总快数)20	.
[root@qiangzi 123]# ln passwd passwd-hard[root@qiangzi 123]# ll总用量 16-rw-r--r-- 2 root root 1258 12月 25 01:58 passwd
-rw-r--r-- 2 root root 1258 12月 25 01:58 passwd-hard
[root@qiangzi 123]# du -sk20

上例中的 ll 命令等同于“ls -l”,请使用which命令查看一下。做了硬链接后,虽然两个文件大小都为1258 ,但是目录的大小并没有变化。

[root@qiangzi 123]# ll总用量 16-rw-r--r-- 2 root root 1258 12月 25 01:58 passwd
-rw-r--r-- 2 root root 1258 12月 25 01:58 passwd-hard
[root@qiangzi 123]# rm -f passwd     (删除目录和文件)这个命令是最常用的[root@qiangzi 123]# du -sk20	.
删除源文件passwd,空间依旧不变。
[root@qiangzi 123]# cd ..[root@qiangzi ~]# in 123 456ln:"123":不允许将硬链接指向目录
硬链接不能用于目录。
[root@qiangzi ~]# mkdir 456[root@qiangzi ~]# cd 456[root@qiangzi 456]# cp /etc/passwd ./[root@qiangzi 456]# ln -s passwd passwd-soft[root@qiangzi 456]# ll总用量 4-rw-r--r-- 1 root root 1258 12月 25 02:30 passwd
lrwxrwxrwx 1 root root    6 12月 25 02:30 passwd-soft -> passwd
[root@qiangzi 456]# head -n 1 passwd-softroot:x:0:0:root:/root:/bin/bash
[root@qiangzi 456]# head -n 1 passwdroot:x:0:0:root:/root:/bin/bash
[root@qiangzi 456]# rm -f passwd[root@qiangzi 456]# head -n 1 passwd-softhead: 无法打开"passwd-soft" 读取数据: 没有那个文件或目录
[root@qiangzi 456]# ll总用量 0lrwxrwxrwx 1 root root 6 12月 25 02:30 passwd-soft -> passwd

(passwd一直在闪烁)
如果删除掉源文件,则软链接文件不能读取了,而且使用命令ll查看发现颜色也变了。
[root@qiangzi 456]# cd ..[root@qiangzi ~]# ln -s 456 789[root@qiangzi ~]# ls -ld 456 789drwxr-xr-x 2 root root 4096 12月 25 02:36 456lrwxrwxrwx 1 root root    3 12月 25 02:45 789 -> 456

这说明目录时可以软链接的。


本文出自 “12350027” 博客,谢绝转载!

软链接和硬链接