硬链接类似与一个指向文件的指针(但是与文件描述符不同),比如我们通过下面命令:
edsionte@edsionte-laptop:~$ touch file1 edsionte@edsionte-laptop:~$ ln file1 file1hdlink edsionte@edsionte-laptop:~$ ls -l file1 file1hdlink -rw-r--r-- 2 edsionte edsionte 0 2010-09-20 22:56 file1 -rw-r--r-- 2 edsionte edsionte 0 2010-09-20 22:56 file1hdlink edsionte@edsionte-laptop:~$ rm file1 edsionte@edsionte-laptop:~$ ls -l file1hdlink -rw-r--r-- 1 edsionte edsionte 0 2010-09-20 22:56 file1hdlink
通过ln命令我们为file1文件创建了一个硬链接file1hdlink。通过ls -li 命令我们也可以发现,这两个文件的索引节点,属性以及大小均均是相同的,因此我们可以得出这样的结论:file1和file1hdlink同时指向一个文件(类似指针),它们只是同一个文件的两个不同名字而已。此时也就没有file1是源文件,而file1hdlink是硬链接这样的概念了,两者的地位相同。当我们删除其中一个文件时,就会发现连接数减少了一个。当某个文件的链接数为0时,这个文件便会被删除。
软链接也叫符号链接(symbol link),它相当于windows下快捷方式。与硬链接不同的是,软链接本身就是一类文件(链接文件),因此软链接本身的索引结点和其链接的文件的索引结点是不同的。比如通过下面的命令:
edsionte@edsionte-laptop:~$ ln -s file2 file2symlink edsionte@edsionte-laptop:~$ ls -li file2 file2symlink 51217 -rw-r--r-- 1 edsionte edsionte 7 2010-09-20 23:18 file2 51214 lrwxrwxrwx 1 edsionte edsionte 5 2010-09-20 23:17 file2symlink -> file2 edsionte@edsionte-laptop:~$ cat file2symlink hello! edsionte@edsionte-laptop:~$ rm file2 edsionte@edsionte-laptop:~$ cat file2symlink cat: file2symlink: 没有那个文件或目录
这里我们也可以发现file2的链接数为1。这里的两个文件并不是平等的关系,从文件属性也可以发现file2是普通文件,file2symlink是一个链接文件。每次系统访问软连接文件时,就会自动去访问它所链接的那个源文件。当源文件本身被删除后,这个链接文件也就失效了,尽管它还存在,但是已经不能访问到源文件了。