Linux命令之ln


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永遠使用普通方式備份(結尾~)。

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM