Linux 系統中,ln
指令是一個強大且常用的工具,用於建立連結檔(links)。連結檔可以讓你在不複製原始檔案的情況下,創建檔案的參考或快捷方式,這對於節省磁碟空間和簡化文件管理非常有用。本篇文章將帶你深入了解 ln
指令,包括基本語法和實際範例。
什麼是連結檔?
連結檔(links)是一種特殊的檔案,它們指向另一個檔案或目錄。在 Linux 中,有兩種主要類型的連結檔:硬連結和符號連結(也稱為軟連結或符號連接)。硬連結直接指向磁碟上的相同數據塊,而符號連結則包含指向目標檔案或目錄的路徑。
使用 ln 指令的基本語法
以下是 ln
指令的基本語法:
ln [選項] [目標] [連結檔]
選項
:可以是一些附加的選項,用來調整連結檔的行為。目標
:指定原始檔案或目錄的路徑。連結檔
:指定連結檔的名稱和路徑。
常用參數說明
-
-s
參數(軟連結;符號連結):這個參數用於創建軟連結(符號連結),而不是硬連結。符號連結是一個指向原始檔案或目錄的路徑的特殊檔案。 -i
參數(互動模式):啟用互動模式,當要覆蓋現有的目標檔案時,會提示使用者確認操作。-b
參數(備份):當使用-s
參數創建符號連結時,可以使用此參數備份原始檔案。備份的檔案會以~
結尾。-f
參數(強制):強制創建連結,即使目標檔案已經存在。這會覆蓋現有的目標檔案。
創建硬連結
硬連結是將一個以上的檔案名稱指向相同的 inode(檔案或目錄的唯一識別號)。這意味著硬連結之間的檔案內容和屬性都是相同的。下面是一個創建硬連結的範例:
ln file1.txt link_to_file1.txt
這將創建一個名為 link_to_file1.txt
的硬連結,它指向與 file1.txt
相同的內容。
創建軟連結 (符號連結) -s
這個參數用於創建符號連結,而不是硬連結。符號連結是一個指向原始檔案或目錄的路徑的特殊檔案。
ln -s file2.txt link_to_file2.txt
創建一個符號連結到檔案 file2.txt
強制覆蓋舊檔 -f
在預設的狀況下,如果指定的目標連結檔案已經存在的話,ln
在建立連結檔案時就會出現錯誤:
#ln -s test3.txt link_to_file3.txt
ln: failed to create symbolic link 'link_to_file3.txt': 檔案已存在
若要強制覆蓋舊檔,可以加上 -f
參數:
# 強制覆蓋舊檔
ln -f -s test.txt link_to_file3.txt
自動備份舊檔 -b
當使用 -s
參數創建符號連結時,可以使用此參數備份原始檔案。備份的檔案會以 ~
結尾,例如,file1.txt
的備份會命名為 file1.txt~
。
ln -b -s test.txt link_to_file4.txt
硬連結和軟連結(符號連結)的主要區別?
- 指向方式:
- 硬連結:硬連結是多個檔案名稱指向相同的inode(索引節點)。這意味著硬連結的不同名稱實際上都是相同的檔案,它們共享相同的內容和屬性。當你刪除其中一個硬連結,其他連結仍然存在,直到所有硬連結都被刪除才釋放空間。
- 軟連結(符號連結):符號連結是一個指向原始檔案或目錄路徑的特殊檔案。它們僅包含指向目標的路徑信息,不共享inode。如果原始檔案或目錄被刪除或移動,符號連結將失效,稱為”斷連結”。
- 跨檔案系統:
- 硬連結:硬連結只能在同一個檔案系統中創建,因為它們共享相同的inode,而inode是特定於檔案系統的。無法跨越不同的檔案系統創建硬連結。
- 符號連結:符號連結可以跨越不同的檔案系統創建,因為它們僅包含路徑信息,而不關心inode。
- 應用場景:
- 硬連結:硬連結通常用於在不同位置引用相同的檔案,以節省磁碟空間,或者用於保護重要檔案免受誤刪除的風險。當一個檔案有多個硬連結時,只有當所有硬連結都被刪除後,該檔案的磁碟空間才會被釋放。
- 符號連結:符號連結常用於創建快捷方式或引用不同目錄中的檔案。它們是靈活的,允許你輕鬆地創建連接到其他位置的檔案或目錄。
總結來說,硬連結和符號連結都是在文件系統中建立檔案連結的方法,但它們的工作方式和使用場景有所不同。硬連結共享相同的inode,而符號連結只是指向目標的路徑。這使得它們適用於不同的用途和需求。
- 中文參考資料:
- 英文參考資料:
延伸閱讀:什麼是 Linux lsof ? 5分鐘學會管理行程和檔案的用法教學與範例
延伸閱讀:什麼是 Linux I/O 標準輸入輸出和管線 ? 超詳細範例說明與教學