你可以將鏈接簡(jiǎn)單地理解為 Windows 中常見(jiàn)的快捷方式(或是 OS X 中的替身),Linux 中常用它來(lái)解決一些庫(kù)版本的問(wèn)題,通常也會(huì)將一些目錄層次較深的文件鏈接到一個(gè)更易訪問(wèn)的目錄中。在這些用途上,我們通常會(huì)使用到軟鏈接(也稱符號(hào)鏈接)。
$ touch myfile && echo "This is a plain text file." > myfile $ cat myfile This is a plain text file. 現(xiàn)在我們創(chuàng)建了一個(gè)普通地不能再普通的文件了。然后我們對(duì)它創(chuàng)建一個(gè)硬鏈接,并查看一下當(dāng)前目錄:
$ ln myfile hard $ ls -li 25869085 -rw-r--r-- 2 unixzii staff 27 7 8 17:39 hard 25869085 -rw-r--r-- 2 unixzii staff 27 7 8 17:39 myfile 在 ls 結(jié)果的最左邊一列,是文件的 inode 值,你可以簡(jiǎn)單把它想成 C 語(yǔ)言中的指針。它指向了物理硬盤的一個(gè)區(qū)塊,事實(shí)上文件系統(tǒng)會(huì)維護(hù)一個(gè)引用計(jì)數(shù),只要有文件指向這個(gè)區(qū)塊,它就不會(huì)從硬盤上消失。
$ rm myfile $ cat hard This is a plain text file. New line $ cat soft cat: soft: No such file or directory 之前的硬鏈接沒(méi)有絲毫地影響,因?yàn)樗?inode 所指向的區(qū)塊由于有一個(gè)硬鏈接在指向它,所以這個(gè)區(qū)塊仍然有效,并且可以訪問(wèn)到。 然而軟鏈接的 inode 所指向的內(nèi)容實(shí)際上是保存了一個(gè)絕對(duì)路徑,當(dāng)用戶訪問(wèn)這個(gè)文件時(shí),系統(tǒng)會(huì)自動(dòng)將其替換成其所指的文件路徑,然而這個(gè)文件已經(jīng)被刪除了,所以自然就會(huì)顯示無(wú)法找到該文件了。
為驗(yàn)證這一猜想,我們?cè)傧蜻@個(gè)軟鏈接寫(xiě)點(diǎn)東西:
$ echo "Something" >> soft $ ls hard myfile soft 可以看到,剛才刪除的 myfile 文件竟然又出現(xiàn)了!這就說(shuō)明,當(dāng)我們寫(xiě)入訪問(wèn)軟鏈接時(shí),系統(tǒng)自動(dòng)將其路徑替換為其所代表的絕對(duì)路徑,并直接訪問(wèn)那個(gè)路徑了。