ln [選項] … [-T] 目標 鏈接名 (第一種格式)
ln [選項] … 目標 (第二種格式)
ln [選項] … 目標 … 目錄 (第三種格式)
ln [選項] … -t 目錄 目標 … (第四種格式)
在第一種格式中,創建指定名稱且指向指定目標的鏈接。
在第二種格式中,在當前目錄創建指向目標位置的同名鏈接。
在第三第四種格式中,在指定目錄中創建指定目標的同名鏈接。
默認創建硬鏈接。創建軟鏈接(符號鏈接)時必須使用使用-s或--symbolic選項。
注意:同一位置不能出現相同的文件名。創建鏈接時需要注意軟硬鏈接的特性。
硬鏈接與軟鏈接詳見:硬鏈接與軟鏈接
(1).選項
--backup[=CONTROL] 為每個已存在的目的地文件(鏈接同地址同名文件)創建備份文件 -b 類似--backup,但不接受任何參數 -d,-F,--directory 創建指向目錄的硬鏈接(只適用於超級用戶) -f,--force 強行刪除任何已存在的目標文件 -i,--interactive 刪除文件前進行確認 -L,--logical 將硬鏈接創建為符號鏈接引用 -n,--no-dereference 如果目的地是一個鏈接至某目錄的符號鏈接,會將該符號鏈接當作普通文件處理,先將該已存在的鏈接備份或刪除 -s,--symbolic 創建符號鏈接而非硬鏈接 -S,--suffix=后綴 自行指定備份文件的后綴 -t,--target-directory=目錄 在指定目錄中創建鏈接 -T,--no-target-directory 將鏈接名稱當作普通文件 -v,--erbose 鏈接前先列出每個文件的名稱
(2).實例
首先展示四種格式創建鏈接,以便更好的理解四種格式間的差異
[xf@xuexi ~]$ ls 公共 模板 視頻 圖片 文檔 下載 音樂 桌面 [xf@xuexi ~]$ touch 1 [xf@xuexi ~]$ mkdir newDir Dir1 Dir2 //第一種格式,創建指定名稱的目標鏈接 [xf@xuexi ~]$ ln 1 link1 [xf@xuexi ~]$ ls -l link1 -rw-rw-r--. 2 xf xf 0 3月 11 10:51 link1 //目標和鏈接都可以使用絕對或相對路徑 [xf@xuexi ~]$ ln /home/xf/1 ./newDir/link2 [xf@xuexi ~]$ ls -l newDir/link2 -rw-rw-r--. 3 xf xf 0 3月 11 10:51 newDir/link2 [xf@xuexi ~]$ cd newDir/ [xf@xuexi newDir]$ ls -l link2 -rw-rw-r--. 3 xf xf 0 3月 11 10:51 link2 //第二種格式,在當前目錄下創建目標的同名鏈接 [xf@xuexi newDir]$ ln /home/xf/1 [xf@xuexi newDir]$ ls -l 總用量 0 -rw-rw-r--. 4 xf xf 0 3月 11 10:51 1 -rw-rw-r--. 4 xf xf 0 3月 11 10:51 link2 //第三種格式與第四中格式,在指定目錄下創建同名鏈接 [xf@xuexi newDir]$ ln ../1 ../Dir1/ [xf@xuexi newDir]$ ln -t ../Dir2/ ../1 [xf@xuexi newDir]$ cd ../Dir1 [xf@xuexi Dir1]$ ls -l 總用量 0 -rw-rw-r--. 6 xf xf 0 3月 11 10:51 1 [xf@xuexi Dir1]$ cd ../Dir2 [xf@xuexi Dir2]$ ls -l 總用量 0 -rw-rw-r--. 6 xf xf 0 3月 11 10:51 1 //像控制台不太好看到是否是硬鏈接,那么可以查看所有文件的inode號 [xf@xuexi Dir2]$ stat /home/xf/1 | grep Inode 設備:803h/2051d Inode:52016343 硬鏈接:6 [xf@xuexi Dir2]$ stat /home/xf/link1 |grep Inode 設備:803h/2051d Inode:52016343 硬鏈接:6 [xf@xuexi Dir2]$ stat /home/xf/newDir/link2 |grep Inode 設備:803h/2051d Inode:52016343 硬鏈接:6 [xf@xuexi Dir2]$ stat /home/xf/newDir/1 |grep Inode 設備:803h/2051d Inode:52016343 硬鏈接:6 [xf@xuexi Dir2]$ stat /home/xf/Dir1/1 |grep Inode 設備:803h/2051d Inode:52016343 硬鏈接:6 [xf@xuexi Dir2]$ stat /home/xf/Dir2/1 |grep Inode 設備:803h/2051d Inode:52016343 硬鏈接:6
為文件創建硬鏈接和軟鏈接
[xf@xuexi ~]$ touch File //創建測試文件 [xf@xuexi ~]$ ln File link1 //創建硬鏈接 [xf@xuexi ~]$ ln -s File link2 //創建軟鏈接 [xf@xuexi ~]$ ls -l link* -rw-rw-r--. 2 xf xf 0 Mar 11 11:33 link1 lrwxrwxrwx. 1 xf xf 4 Mar 11 11:33 link2 -> File
根據硬鏈接與軟鏈接的特性,比較差異
//第一個特性,硬鏈接與源文件具有相同inode號和data block,修改文件屬性或文件數據會應影響所有硬鏈接(包括源文件); //軟鏈接雖然有自己的inode號和data block,但修改的其實還是源文件 [xf@xuexi ~]$ stat File |grep Inode //也可使用ls -i File查看 Device: 803h/2051d Inode: 52016343 Links: 2 [xf@xuexi ~]$ stat link1 |grep Inode Device: 803h/2051d Inode: 52016343 Links: 2 [xf@xuexi ~]$ stat link2 |grep Inode Device: 803h/2051d Inode: 52016746 Links: 1 [xf@xuexi ~]$ echo aaaa >> link1 //硬鏈接修改文件數據 [xf@xuexi ~]$ cat File aaaa [xf@xuexi ~]$ echo aaaa >> link2 //軟鏈接修改文件數據 [xf@xuexi ~]$ cat File aaaa aaaa [xf@xuexi ~]$ ll File link2 -rw-rw-r--. 2 xf xf 0 3月 11 14:27 File lrwxrwxrwx. 1 xf xf 4 3月 11 14:28 link2 -> File [xf@xuexi ~]$ chmod +x link2 //軟鏈接修改文件屬性 [xf@xuexi ~]$ ll File link2 -rwxrwxr-x. 2 xf xf 0 3月 11 14:27 File lrwxrwxrwx. 1 xf xf 4 3月 11 14:28 link2 -> File [xf@xuexi ~]$ stat File 文件:"File" 大小:0 塊:0 IO 塊:4096 普通空文件 設備:803h/2051d Inode:52016343 硬鏈接:2 權限:(0775/-rwxrwxr-x) Uid:( 1000/ xf) Gid:( 1000/ xf) 環境:unconfined_u:object_r:user_home_t:s0 最近訪問:2019-03-11 14:27:29.750638827 +0800 最近更改:2019-03-11 14:27:29.750638827 +0800 最近改動:2019-03-11 14:38:22.936661898 +0800 創建時間:- [xf@xuexi ~]$ stat link2 文件:"link2" -> "File" 大小:4 塊:0 IO 塊:4096 符號鏈接 設備:803h/2051d Inode:52016746 硬鏈接:1 權限:(0777/lrwxrwxrwx) Uid:( 1000/ xf) Gid:( 1000/ xf) 環境:unconfined_u:object_r:user_home_t:s0 最近訪問:2019-03-11 14:28:37.354054265 +0800 最近更改:2019-03-11 14:28:37.353054303 +0800 最近改動:2019-03-11 14:28:37.353054303 +0800 創建時間:- //第二個特性,硬鏈接不能對不存在的文件進行創建,但軟鏈接可以(包括目錄文件) [xf@xuexi ~]$ ls File link1 link2 公共 模板 視頻 圖片 文檔 下載 音樂 桌面 [xf@xuexi ~]$ ln File1 link3 ln: failed to access "File1": 沒有那個文件或目錄 [xf@xuexi ~]$ ln -s File1 link4 [xf@xuexi ~]$ ls -l link4 lrwxrwxrwx. 1 xf xf 5 3月 11 11:50 link4 -> File1 //這是一個死鏈接 //第三個特性,硬鏈接不可以跨文件系統(即分區)創建,軟鏈接可以 [xf@xuexi ~]$ su - 密碼: 上一次登錄:一 3月 11 13:16:55 CST 2019pts/0 上 [root@xuexi ~]# file -s /dev/sdb1 //查看分區文件系統類型 /dev/sdb1: SGI XFS filesystem data (blksz 4096, inosz 512, v2 dirs) [root@xuexi ~]# mount /dev/sdb1 /sdb1 //掛載分區 [root@xuexi ~]# ln /home/xf/File /sdb1/link5 //硬鏈接無法跨文件系統創建 ln: 無法創建硬鏈接"/sdb1/link5" => "/home/xf/File": 無效的跨設備連接 [root@xuexi ~]# ln -s /home/xf/File /sdb1/link6 //軟鏈接可以,但源文件必須是絕對路徑,否則為死鏈接 [root@xuexi ~]# ls -l /sdb1/link6 lrwxrwxrwx. 1 root root 13 3月 11 13:19 /sdb1/link6 -> /home/xf/File //第四個特性,硬鏈接不能對目錄創建鏈接,但軟鏈接可以 [root@xuexi ~]# exit 登出 [xf@xuexi ~]$ ls File link1 link2 link4 公共 模板 視頻 圖片 文檔 下載 音樂 桌面 [xf@xuexi ~]$ mkdir newDir [xf@xuexi ~]$ ln newDir link7 ln: "newDir": 不允許將硬鏈接指向目錄 [xf@xuexi ~]$ ln -s newDir link8 [xf@xuexi ~]$ ll link8 lrwxrwxrwx. 1 xf xf 6 3月 11 13:26 link8 -> newDir [xf@xuexi ~]$ cd link8 //link8可以執行cd命令 [xf@xuexi link8]$ //第五個特性,刪除源文件,硬鏈接沒有影響;軟鏈接變成死鏈接,但在相同位置重新創建同名文件,軟鏈接變成指向新文件的鏈接 [xf@xuexi link8]$ cd .. [xf@xuexi ~]$ cat File aaaa aaaa [xf@xuexi ~]$ rm File //刪除源文件 [xf@xuexi ~]$ cat link1 //硬鏈接沒有影響 aaaa aaaa [xf@xuexi ~]$ cat link2 //軟鏈接變為死鏈接 cat: link2: 沒有那個文件或目錄 [xf@xuexi ~]$ touch File //相同位置創建同名文件 [xf@xuexi ~]$ echo bbbb >> File [xf@xuexi ~]$ cat link1 //硬鏈接沒有影響 aaaa aaaa [xf@xuexi ~]$ cat link2 //軟鏈接指向新建立的同名文件 bbbb
如果文件名已存在,可以使用-f選項強制刪除已存在的文件
[xf@xuexi ~]$ touch File link1 [xf@xuexi ~]$ ln File link1 ln: 無法創建硬鏈接"link1": 文件已存在 [xf@xuexi ~]$ ln -f File link1
要是不知道文件是否有用,可以使用-b或--backup選項備份已存在的文件。還可使用-S選項指定后綴名。
[xf@xuexi ~]$ touch File link1 [xf@xuexi ~]$ echo aaaa >> link1 [xf@xuexi ~]$ ln -bf File link1 //對已存在的同名文件備份 [xf@xuexi ~]$ ls //備份文件默認~結尾 File link1 link1~ 公共 模板 視頻 圖片 文檔 下載 音樂 桌面 [xf@xuexi ~]$ cat link1~ aaaa [xf@xuexi ~]$ touch link2 [xf@xuexi ~]$ echo bbbb >> link2 [xf@xuexi ~]$ ln -bf -S .txt File link2 //指定備份文件的后綴名 [xf@xuexi ~]$ ls File link1~ link2.txt 模板 圖片 下載 桌面 link1 link2 公共 視頻 文檔 音樂 [xf@xuexi ~]$ cat link2.txt bbbb
另外說明一下backup的有效值:none和off這兩個值是不進行備份;numbered和t這兩個值是備份文件加上數值,例如文件link3,備份后是link3.~1~;existing和nil這兩個值是如有數字備份文件則使用數字,否則使用普通方式備份,例如使用有效值t已經備份過一次的link3,此時存在硬鏈接link3與備份文件link3.~1~,那么再使用有效值nil時會生成一個新的link3,原有的硬鏈接link3被備份為link3.~2~;simple和never永遠使用普通方式備份(結尾~)。