1.2.7. 連結
有兩種方法把一個檔案 “foo” 連結到一個不同的檔名 “bar”。
硬連結
對現有檔案重複名稱
“ln foo bar”
符號連結或 symlink
通過名字指向另一個檔案的特殊檔案
“ln -s foo bar”
請參閱下面的示例,rm 指令結果中連結數的變化和細微的差別。
$ umask 002
$ echo "Original Content" > foo
$ ls -li foo
1449840 -rw-rw-r-- 1 penguin penguin 17 Oct 16 21:42 foo
$ ln foo bar # hard link
$ ln -s foo baz # symlink
$ ls -li foo bar baz
1449840 -rw-rw-r-- 2 penguin penguin 17 Oct 16 21:42 bar
1450180 lrwxrwxrwx 1 penguin penguin 3 Oct 16 21:47 baz -> foo
1449840 -rw-rw-r-- 2 penguin penguin 17 Oct 16 21:42 foo
$ rm foo
$ echo "New Content" > foo
$ ls -li foo bar baz
1449840 -rw-rw-r-- 1 penguin penguin 17 Oct 16 21:42 bar
1450180 lrwxrwxrwx 1 penguin penguin 3 Oct 16 21:47 baz -> foo
1450183 -rw-rw-r-- 1 penguin penguin 12 Oct 16 21:48 foo
$ cat bar
Original Content
$ cat baz
New Content
硬連結可以在同一個檔案系統內建立,並共用同一個 inode 號,由ls(1)帶
“-i”選項顯示。
符號連結總是名義上具有“rwxrwxrwx”的檔案存取許可權,如上面例子所示,實際的有效存取許可權由它所指向的檔案確定。
注意
除非你有非常好的理由,否則不要建立一個複雜的符號連結或硬連結通常是個好主意。符號連結的邏輯組合可能導致檔案系統噩夢般的無限迴圈。
注意
通常使用符號連結比使用硬連結更合適,除非你有一個好理由使用硬連結。
“.”目錄連結到它所在的目錄,因此任何新建目錄的連結數從2開始。“..”目錄連結到父目錄,因此目錄的連結數隨著新的子目錄的建立而增加。
如果你剛從Windows遷移到Linux,你很快將清楚 Unix
的檔名連結相較於Windows最相近的“快捷方式”是多麼精心設計的。由於它是在檔案系統中實現的,應用無法看到連結檔案跟原始檔案之間的區別。在硬連結這種情況,這真的是毫無差別。