Linux/Unix中有两种链接,硬链接和软链接,均由ln命令来创建。
软链接
软链接使用ln命令的-s选项创建:
1 | ln -s source target #创建source文件的软链接target |
软链接类似于Windows中的快捷方式,内部保存的是源文件的路径,路径可以是相对路径,也可以是绝对路径:
1 2 3 4 5 6 | dutor@dutor-desktop:~$ ln -s gvim.tgz gvim dutor@dutor-desktop:~$ ln -s /home/dutor/gvim.tgz gvim2 dutor@dutor-desktop:~$ ll gvim* # alias ll='ls -l' lrwxrwxrwx 1 dutor dutor 8 2010-07-01 20:32 gvim -> gvim.tgz lrwxrwxrwx 1 dutor dutor 20 2010-07-01 20:33 gvim2 -> /home/dutor/gvim.tgz -rw-r--r-- 1 dutor dutor 8.5M 2010-06-29 23:06 gvim.tgz |
软链接应用十分广泛。
在文件系统中多处共享同一个较大文件时,使用软链接就可以避免创建多个副本。
维护动态库文件的版本时,使用软链接,在升级库文件后,只需修改软链接的源文件,而使用该库的程序则不需要修改。
硬链接
不带有任何选项的ln命令即可创建硬链接:
1 | ln source target #创建source文件的硬链接target |
硬链接创建后,链接文件与源文件没有主次之分,文件系统中它们都和同一个inode相关联,即具有相同的inode号:
1 2 3 4 | dutor@dutor-desktop:~$ ln gvim.tgz gvim dutor@dutor-desktop:~$ ll -i gvim* 1048032 -rw-r--r-- 2 dutor dutor 8.5M 2010-06-29 23:06 gvim # 第3个域代表该文件的链接数 1048032 -rw-r--r-- 2 dutor dutor 8.5M 2010-06-29 23:06 gvim.tgz |
因此,系统不允许用户为目录创建硬件链接,否则,目录树就不再是有向无环的了。只许州官放火,不许百姓点灯,系统却可以为目录“创建”硬链接(系统知道自己在做什么,却不知用户会做什么),那就是.和..分别指向当前目录和上级目录。因此每个目录的链接数至少是2.
另外,由于硬链接的实现依赖于特定的文件系统,因此不可以跨文件系统。而软链接是基于路径的,所以只要是挂载在系统目录树中的文件或目录,都可以创建软链接。