要弄清楚2者的區別,首先得明白linux系統中文件是如何存儲的.在linux中存儲一個文件由3部分組成:
文件名 inode block(數據塊)
關於inode:
block用來存儲數據.而inode呢,就是用來存儲這些數據的信息,這些信息包括文件大小,歸屬的用戶組,讀寫權限等.inode爲每個文件進行信息索引,所以就有了inode的數值.
在來談談到底什麼是硬連接什麼是軟連接:
先看下面一個列子:
創建連接文件之前
lvbook@lvbook-desktop:/home/chendan/onetime/3$ ls -il
total 0
149945 -rw-r--r-- 1 root root 0 2010-03-23 23:54 test1.c
149947 -rw-r--r-- 1 root root 0 2010-03-23 23:55 test2.c
創建一個硬連接
lvbook@lvbook-desktop:/home/chendan/onetime/3$ sudo ln test1.c hlink
149945 -rw-r--r-- 2 root root 0 2010-03-23 23:54 hlink
149945 -rw-r--r-- 2 root root 0 2010-03-23 23:54 test1.c
149947 -rw-r--r-- 1 root root 0 2010-03-23 23:55 test2.c
可以看到test1.c連接數+1,並且可以看出hlink與test1.c除了文件名不同外,其餘都是完全相同的.它們的索引節點相同,讀寫權限相同.由此我們可以這樣理解,所謂硬連接就是原文件的一個克隆體.
創建一個軟連接
lvbook@lvbook-desktop:/home/chendan/onetime/3$ sudo ln -s test2.c slink
lvbook@lvbook-desktop:/home/chendan/onetime/3$ ls -il
149945 -rw-r--r-- 2 root root 0 2010-03-23 23:54 hlink
149944 lrwxrwxrwx 1 root root 7 2010-03-23 23:57 slink -> test2.c
149945 -rw-r--r-- 2 root root 0 2010-03-23 23:54 test1.c
149947 -rw-r--r-- 1 root root 0 2010-03-23 23:55 test2.c
可以看到test2.c的連接數沒有變,它們的索引節點不同,讀寫權限不同.我們可以這樣理解,當我們創建一個連接文件時,系統爲我們的連接文件從新分配了一片小的內存用來存放我們的連接文件的索引,文件名,數據塊.而其中的數據塊保存的是連接源的文件名.
大家可以參考:
http://blog.chinaunix.net/u3/95713/showart_2056964.html
連接有軟連接(symbolic link)和硬連接(hard link)之分,