2006-11-21 10:34:13
linux
聯盟收集
首先要弄清楚,在
linux
系統中,
核心為每乙個新建立的檔案分配乙個
inode(
索引結點
),每個檔案都有乙個惟一的
inode
號。檔案屬性儲存在索引結點裡,在訪問檔案時,索引結點被複製到內存在,從而實現檔案的快速訪問。
鏈結是一種在共享檔案和訪問它的使用者的若干目錄項之間建立聯絡的一種方法。
linux
(hard link)
和軟鏈結
(soft link),
軟鏈結又稱為符號鏈結(
symbolic link
)。一、硬鏈結
硬鏈結說白了是乙個指標,指向檔案索引節點,系統並不為它重新分配
inode
。可以用
:ln命令來建立硬鏈結。語法:
ln [options] existingfile newfile
ln[options] existingfile-list directory
用法:
第一種:
為」existingfile」
建立硬鏈結
,檔名為
」newfile」
。第二種:在
」directory」
目錄中,
為」existingfile-list」
中包含的所有檔案建立乙個同名的硬鏈結。常用可選
[options] –f
無論」newfile」
存在與否
,都建立鏈結。
-n 如果
」newfile」
已存在,
就不建立鏈結。
下面舉一些例子:
$ ls –il
13058 -rwx - - - - - - 1 longcheng longcheng 48 8
月5 16:38 file1
13059 -rwx - - - - - - 1 longcheng longcheng 57 8
月5 16:40 file2
$ ln file2 file2hard
$ ls –il
13058 -rwx - - - - - - 1 longcheng longcheng 48 8
月5 16:38 file1
13059 -rwx - - - - - - 2 longcheng longcheng 57 8
月5 16:40 file2
13059 -rwx - - - - - - 2 longcheng longcheng 57 8
月5 16:40 file2hard
注意在建立鏈結前
,file1
顯示的鏈結數目為
1,建立鏈結後
(1)file1
和file1hard
的鏈結數目都變為
2;(2) file1
和file1hard
在inode
號是一樣的
(3) file1
和file1hard
顯示的檔案大小也是一樣。可見進行了
ln命令的操作結果:
file1
和file1hard
是同乙個檔案的兩個名字,它們具有同樣的索引節點號和檔案屬性,建立檔案
file1
的硬鏈結,就是為
file1
的檔案索引節點在當前目錄上建立乙個新指標。如下圖
,你可以刪除其中任何乙個,如
rm file2 ,
每次只會刪除乙個指標
, 鏈結數同時減一
,只有將所有指向檔案內容的指標
,也即鏈結數減為
0時,核心才會把檔案內容從磁碟上刪除。當前目錄邏輯結構:
(不好意思圖沒有顯示出來)。
還可以在不同目錄,但同一檔案系統中建立檔案的硬鏈結。設
file1
、file2
在目錄/home/longcheng/dir1
中,下面的命令,在
/home/longcheng
中建立file2
的硬鏈結。
ln file2 /home/longcheng/file2hard
下面的程式,是將
dir1
目錄中所有檔案,在目錄
dir2
中建立硬鏈結
$mkdir dir2
$ln /home/longcheng/dir1/* /home/longcheng/dir2
如果使用了
ln –f existingfile newfile,
如果newfile
已經存在,則無論原來
newfile
是什麼檔案,只用當前使用者對它有寫許可權,
newfile
就成為exisitngfile
的硬鏈結檔案。
儘管硬鏈結節省空間,也是
linux
系統整合檔案系統的傳統方式,但是存在一下不足之處:(
1)不可以在不同檔案系統的檔案間建立鏈結(
2)只有超級使用者才可以為目錄建立硬鏈結。雖然很多樹上說
root
使用者可以建立,但是筆者在學習過程中發現即使是
root
使用者也不能建立,我的系統是
redhat
,核心2.4
、2.6
都試過,在其他系統中不知道是不是可以。
二、軟鏈結(符號鏈結)
軟鏈結克服了硬鏈結的不足,沒有任何檔案系統的限制,任何使用者可以建立指向目錄的符號鏈結。因而現在更為廣泛使用,它具有更大的靈活性,甚至可以跨越不同機器、不同網路對檔案進行鏈結。
建立軟鏈結,只要在
ln後面加上選項
–s,下面舉個例子
$ ls -il
13058 -rwx - - - - - - 1 longcheng longcheng 48 8
月5 16:38 file1
13059 -rwx - - - - - - 2 longcheng longcheng 57 8
月5 16:40 file2
13059 -rwx - - - - - - 2 longcheng longcheng 57 8
月5 16:40 file2hard
$ln –s file1 file1soft
$ls -il
13058 -rwx - - - - - - 1 longcheng longcheng 48 8
月5 16:38 file1
13059 -rwx - - - - - - 2 longcheng longcheng 57 8
月5 16:40 file2
13059 -rwx - - - - - - 2 longcheng longcheng 57 8
月5 16:40 file2hard
13061 lrwxrwxrwx 1 longcheng longcheng 5 8
月5 16:58 file1soft->file1
從上面鏈結後的結果可以看出來軟鏈結與硬鏈結,區別不僅僅是在概念上,在實現上也是不同的。區別:硬鏈結原檔案&鏈結檔案公用乙個
inode
號,說明他們是同乙個檔案,而軟鏈結原檔案&鏈結檔案擁有不同的
inode
號,表明他們是兩個不同的檔案;在檔案屬性上軟鏈結明確寫出了是鏈結檔案,而硬鏈結沒有寫出來,因為在本質上硬鏈結檔案和原檔案是完全平等關係;鏈結數目是不一樣的,軟鏈結的鏈結數目不會增加;檔案大小是不一樣的,硬鏈結檔案顯示的大小是跟原檔案是一樣的,這用強調,因為是等同的嘛,而這裡軟鏈結顯示的大小與原檔案就不同了,
file1
大小是48b
,而file1soft是5b
,這裡面的
5實際上就是
「file1」
的大小。
總之,建立軟鏈結就是建立了乙個新檔案。當訪問鏈結檔案時,系統就會發現他是個鏈結檔案,它讀取鏈結檔案找到真正要訪問的檔案。
在不同系統之間建立軟鏈結、對目錄建立鏈結,這裡就不舉例了,讀者可以自己去嘗試,我也是在不斷實踐中學習的。
當然軟鏈結也有硬鏈結沒有的缺點,因為鏈結檔案包含有原檔案的路徑資訊,所以當原檔案從乙個目錄下移到其他目錄中,再訪問鏈結檔案,系統就找不到了~~,而硬鏈結就沒有這個缺陷,你想怎麼移就怎麼移(呵呵);還有它要系統分配額外的空間用於建立新的索引節點和儲存原檔案的路徑。
補充一下:可以通過
symlink
來檢視鏈結檔案,可以用
man symlink
來學習。
linux系統 軟鏈結 硬鏈結
區別 硬鏈結原檔案 鏈結檔案公用乙個inode號,說明他們是同乙個檔案,而軟鏈結原檔案 鏈結檔案擁有不同的inode號,表明他們是兩個不同的檔案 在檔案屬性上軟鏈結明確寫出了是鏈結檔案,而硬鏈結沒有寫 出來,因為在本質上硬鏈結檔案和原檔案是完全平等關係 鏈結數目是不一樣的,軟鏈結的鏈結數目不會增加 ...
linux硬鏈結與軟鏈結
1.linux鏈結概念 linux鏈結分兩種,一種被稱為硬鏈結 hard link 另一種被稱為符號鏈結 symbolic link 預設情況下,ln命令產生硬鏈結。硬連線 硬連線指通過索引節點來進行連線。在linux的檔案系統中,儲存在磁碟分割槽中的檔案不管是什麼型別都給它分配乙個編號,稱為索引節...
Linux 硬鏈結與軟鏈結
原貼 2007 08 05 10 19 49 linux硬鏈結與軟鏈結 2006 12 01 15 03 首先要弄清楚,在linux系統中,核心為每乙個新建立的檔案分配乙個inode 索引結點 每個檔案都有乙個惟一的inode號。檔案屬性儲存在索引結點裡,在訪問檔案時,索引結點被複製到內存在,從而實...