什麼link?
對於用慣了 dos 的朋友來說﹐這個的確不好理解。其實﹐如果您為 Window s檔案建立過捷徑(shortcut)的話﹐您會知道無論您直接點擊原檔案﹐還是點擊捷徑﹐其結果都是一樣的。Linux 下面的 link 呢﹖有點類似﹐但也很不一樣﹕如果您修改 windows 的捷徑的話(指的是對捷徑檔案的內容進行編輯)﹐您會失去了和原來檔案的連接﹐而且﹐原來的檔案絲毫也沒被改變﹔但在 Linux 裡面﹐無論您修改原檔案﹐還是修改 link﹐其內容都會同時更新的。別以為 link 很神奇﹐說穿了﹐只不過是一個檔案具有多個名字罷了。比如說﹐我的名字叫 Kenny﹐但我在網路上使用的名字則為 netman﹐但所指的其實都是同一個人而已﹐您可以將 netman 看成是 kenny 的一個 link。
tips﹕在 Linux 的檔案系統上面的 link 有兩種﹕hard link 和 soft link﹐後者也叫 symbolic link。其兩者都是 link﹐那分別在哪裡呢﹖
所有檔案要存放在磁碟上面﹐都必須先獲得一個 i-node (這個我們後面會談到)﹐然後 inode 會告訴系統檔案存放在磁碟的哪個位置上面。如果用 hard link 的話﹐檔案會使用同一個 inode﹐其指向的磁碟位置和原來的檔案位置一樣﹐而這個 inode 會更新其 link 指標( link count )﹐hard link 越多﹐指標越多。這樣的情況之下﹐所有 hard link 都是平等的。如果要從磁碟上移除這個檔案所佔據的空間﹐那必須要將它所關聯到的所有 hard link 都砍光(link count 為 0 )﹐才可以進行﹔換句話說﹕如果我為檔案 A 建立一個 hard link 為檔案 B﹐然後我將 A 砍掉﹐但磁碟空間還是存在的﹐因為仍有 B 與之關聯﹐假如 B 是最後一個 hard link 了﹐這時將 B 砍掉﹐那麼這個磁碟空間就會被釋放出來。我們可以將所有檔案都看成是 hard link ﹐不同的檔案 hard link 到不同的磁碟空間去﹔但也允許不同的檔案 hard link 到同一個磁碟空間上面。
那 soft link 又是什麼呢﹖和 hard link 不一樣的地方是﹕它會建另一個 inode ,但不指向相同的磁碟空間﹐而是單純的指向原來的 file name 而已﹐如果原來的 inode 移除了﹐那這個 link 就變為無主孤魂了﹐也就是所謂的 dead link 是也。就好比宋七力有一個本尊﹐同時也有好些分身﹐但如果一旦本尊毀掉﹐那分身也跟著滅亡﹐道理是一樣的。
不如再以例子來比喻吧﹕判定一個人的身份﹐其實不是以他的名字為依據﹐準確來說是以他的出生時間﹑地點﹑父母﹑性別為依據。由某父某母在某地某時所產的男或女這麼一個人﹐其名字或許有許多個。例如我父母當初給我一個本名﹐後來取了個洋名叫 Kenny (護照資料上的父母﹑出生資料都沒變)﹐再後來還在網路上自稱 netman (這可完全沒有父母和出生資料哦﹐只知道是從 kenny 那名字來的)。其情形就有點像這樣﹕我為本名建立 hard link 叫 kenny ﹐然後為 kenny 建立一個 soft link 叫 netman 。就算我今天宣佈我不再使用本名了﹐但別人還是可以用 Kenny 和 netman 稱呼我﹔但如果我宣佈保留本名但不再使用 kenny 這個名字呢﹖那別人還是可以用本名稱呼我﹐但那個 netman 就不知道何許人也了。
關於 hard link 和 soft link 的另外一個分別是﹕hard link 必須建立在 同一個 partiton 上面﹐而且不能用在目錄上面﹔soft link 則可以跨越 partition 界限﹐同時可以用在檔案和目錄上面。
為什麼我們要用 link 呢﹖理由很多﹕
* 首先﹐可以節省空間﹐如果您用 cp 來複製一個檔案﹐但是副本也是一個新的檔案﹐那會佔掉額外的磁碟空間。
* 其次﹐如果您對 cp 的副本進行修改﹐那只有副本得到更新而已﹐原來的檔案內容依然是舊的。如果您產生了許多個副本﹐那您要進行修改的時候﹐必須要對所有副本進行修改才能得到同步﹔但如果用 link 呢﹖修改任何一個 link 就能讓所有 link 獲得同步了。
* 再來﹐對系統安全也有幫助﹕在 Linux 檔案系統裡面﹐所有目錄和檔案都有著嚴密的權限設定。如果您建立了一個檔案在一個限制嚴密的目錄裡面﹐別人要想修改它是不可能的﹐甚至連讀取也不能夠。如果有某些檔案必須要讓別人或系統讀取的話﹐比方說要架設網頁伺服器好了﹐您可以在伺服器讀取的目錄中建立 link 就可以了。
* 除此之外﹐為一些程式設定檔建立 link 再放在某些特定的目錄之下﹐在管理上來說也是非常方便的。