ln命令用來為文件創件連接,連接類型分為硬連接和符號連接兩種,默認的連接類型是硬連接。如果要創建符號連接必須使用"-s"選項。
注意:符號鏈接文件不是一個獨立的文件,它的許多屬性依賴於源文件,所以給符號鏈接文件設置存取權限是沒有意義的。
語法
ln(選項)(參數)
選項
-b或--backup:刪除,覆蓋目標文件之前的備份;
-d或-F或——directory:建立目錄的硬連接;
-f或——force:強行建立文件或目錄的連接,不論文件或目錄是否存在;
-i或——interactive:覆蓋既有文件之前先詢問用戶;
-n或--no-dereference:把符號連接的目的目錄視為一般文件;
-s或——symbolic:對源文件建立符號連接,而非硬連接;
-S<字尾備份字符串>或--suffix=<字尾備份字符串>:用"-b"參數備份目標文件后,備份文件的字尾會被加上一個備份字符串,預設的備份字符串是符號“~”,用戶可通過“-S”參數來改變它;
-v或——verbose:顯示指令執行過程;
-V<備份方式>或--version-control=<備份方式>:用“-b”參數備份目標文件后,備份文件的字尾會被加上一個備份字符串,這個字符串不僅可用“-S”參數變更,當使用“-V”參數<備份方式>指定不同備份方式時,也會產生不同字尾的備份字符串;
--help:在線幫助;
--version:顯示版本信息。
參數
- 源文件:指定連接的源文件。如果使用
-s
選項創建符號連接,則“源文件”可以是文件或者目錄。創建硬連接時,則“源文件”參數只能是文件; - 目標文件:指定源文件的目標連接文件。
實例
將目錄/usr/mengqc/mub1
下的文件m2.c鏈接到目錄/usr/liu
下的文件a2.c
cd /usr/mengqc
ln /mub1/m2.c /usr/liu/a2.c
在執行ln命令之前,目錄/usr/liu
中不存在a2.c文件。執行ln之后,在/usr/liu
目錄中才有a2.c這一項,表明m2.c和a2.c鏈接起來(注意,二者在物理上是同一文件),利用ls -l
命令可以看到鏈接數的變化。
在目錄/usr/liu
下建立一個符號鏈接文件abc,使它指向目錄/usr/mengqc/mub1
ln -s /usr/mengqc/mub1 /usr/liu/abc
執行該命令后,/usr/mengqc/mub1
代表的路徑將存放在名為/usr/liu/abc
的文件中。
擴展知識
Linux具有為一個文件起多個名字的功能,稱為鏈接。被鏈接的文件可以存放在相同的目錄下,但是必須有不同的文件名,而不用在硬盤上為同樣的數據重復備份。另外,被鏈接的文件也可以有相同的文件名,但是存放在不同的目錄下,這樣只要對一個目錄下的該文件進行修改,就可以完成對所有目錄下同名鏈接文件的修改。對於某個文件的各鏈接文件,我們可以給它們指定不同的存取權限,以控制對信息的共享和增強安全性。
文件鏈接有兩種形式,即硬鏈接和符號鏈接。
硬鏈接
建立硬鏈接時,在另外的目錄或本目錄中增加目標文件的一個目錄項,這樣,一個文件就登記在多個目錄中。如圖所示的m2.c文件就在目錄mub1和liu中都建立了目錄項。
創建硬鏈接后,己經存在的文件的I節點號(Inode)會被多個目錄文件項使用。一個文件的硬鏈接數可以在目錄的長列表格式的第二列中看到,無額外鏈接的文件的鏈接數為l。
在默認情況下,ln命令創建硬鏈接。ln命令會增加鏈接數,rm命令會減少鏈接數。一個文件除非鏈接數為0,否則不會從文件系統中被物理地刪除。
對硬鏈接有如下限制:
- 不能對目錄文件做硬鏈接。
- 不能在不同的文件系統之間做硬鏈接。就是說,鏈接文件和被鏈接文件必須位於同一個文件系統中。
符號鏈接
符號鏈接也稱為軟鏈接,是將一個路徑名鏈接到一個文件。這些文件是一種特別類型的文件。事實上,它只是一個文本文件(如圖中的abc文件),其中包含它提供鏈接的另一個文件的路徑名,如圖中虛線箭頭所示。另一個文件是實際包含所有數據的文件。所有讀、寫文件內容的命令被用於符號鏈接時,將沿着鏈接方向前進來訪問實際的文件。
與硬鏈接不同的是,符號鏈接確實是一個新文件,當然它具有不同的I節點號;而硬鏈接並沒有建立新文件。
符號鏈接沒有硬鏈接的限制,可以對目錄文件做符號鏈接,也可以在不同文件系統之間做符號鏈接。
用ln -s
命令建立符號鏈接時,源文件最好用絕對路徑名。這樣可以在任何工作目錄下進行符號鏈接。而當源文件用相對路徑時,如果當前的工作路徑與要創建的符號鏈接文件所在路徑不同,就不能進行鏈接。
符號鏈接保持了鏈接與源文件或目錄之間的區別:
- 刪除源文件或目錄,只刪除了數據,不會刪除鏈接。一旦以同樣文件名創建了源文件,鏈接將繼續指向該文件的新數據。
- 在目錄長列表中,符號鏈接作為一種特殊的文件類型顯示出來,其第一個字母是l。
- 符號鏈接的大小是其鏈接文件的路徑名中的字節數。
- 當用
ln -s
命令列出文件時,可以看到符號鏈接名后有一個箭頭指向源文件或目錄,例如lrwxrwxrwx … 14 jun 20 10:20 /etc/motd->/original_file
其中,表示“文件大小”的數字“14”恰好說明源文件名original_file
由14個字符構成。