1. 程式人生 > >ln命令:軟連結與硬連結的區別與應用

ln命令:軟連結與硬連結的區別與應用

# ln命令:軟連結與硬連結的區別與應用 ## 摘要 Linux系統中,連結是一個十分常見且實用的檔案處理命令,它分為軟連結和硬連結兩種型別。軟連結類似於Windows中的快捷方式,硬連結又有著與原檔案保持同步更新的特性,兩種連結方式各有特點,也各有其應用。接下來我們一起來深入認識一下這兩種連結方式。 ## ln命令詳解 英文原意:link 命令所在路徑:```/bin/ln``` 執行許可權:所有使用者 語法: ```shell ln -s [原檔案] [目標檔案] -s 建立軟連結 預設是硬連結(不指定-s) ``` 功能描述:生成連結檔案 範例: ```shell > ln -s /etc/issue /tmp/issue.soft #建立檔案/etc/issue的軟連結/tmp/issue.soft > ln /etc/issue /tmp/issue.hard #建立檔案/etc/issue的硬連結/tmp/issue.hard ``` ## 1. 軟連結 ### A. 特徵:類似Windows快捷方式 (1) ```lrwxrwxrwx``` 其中```l``` 表示軟連結。任何新建的軟連結檔案許可權都為rwxrwxrwx,此許可權不決定原檔案許可權 (2) 檔案大小-只是符號連結,非常小,一般只有十幾個位元組,與原檔案大小無關 (3) ```/tmp/issue.soft->/etc/issue``` 箭頭指向原檔案 ### B. 應用場景: Q:什麼時候用軟連結檔案? A:需要快捷方式的時候就用軟連結檔案,只是為了便於管理和使用。 ## 2. 硬連結 ### A. 特徵: **(1) 相當於 拷貝(cp -p) + 同步更新 的功能** 實驗: 這裡預設已經執行了**範例**中的命令建立了軟/硬連結 ```shell [root@centos7-master /]# cat /etc/issue #檢視當前原檔案內容 \S Kernel \r on an \m [root@centos7-master /]# cat /tmp/issue.hard #檢視當前硬連結內容 \S Kernel \r on an \m [root@centos7-master /]# echo "this is a test" >> /etc/issue #向原檔案末尾追加新內容 [root@centos7-master /]# cat /etc/issue #檢視更新後原檔案內容 \S Kernel \r on an \m this is a test [root@centos7-master /]# cat /tmp/issue.hard #檢視原檔案更新後硬連結的內容 \S Kernel \r on an \m this is a test #可以看到,這裡硬連結與原檔案保持了同步更新 [root@centos7-master /]# rm /etc/issue #刪除原檔案 rm: remove regular file ‘/etc/issue’? y [root@centos7-master /]# cat /tmp/issue.soft #檢驗軟連結是否仍有效 cat: /tmp/issue.soft: No such file or directory [root@centos7-master /]# cat /tmp/issue.hard #原檔案就算刪除或丟失,硬連結依然可以訪問 \S Kernel \r on an \m this is a test ``` 上述實驗我們可以看到,原檔案有修改和更新,則硬連結也同步會進行更新;且原檔案就算刪除或丟失,硬連結依然可以訪問,即如同**拷貝(cp -p) + 同步更新**功能。 **(2) 可通過i節點識別。** 一個檔案一定有一個i節點,一個i節點不一定只對應一個檔案。某檔案的i節點和某檔案的硬連結的i節點一般相同。當我們把原檔案刪除,硬連結依然會對映到對應的i節點。 關於i節點的知識,請瀏覽這篇文章:—————— 實驗: 軟連結很好判斷,如果軟連結對應的原檔案被刪除後,我們通過ls檢視軟連結的檔案資訊,會發現軟連結被標紅,並不停閃爍。 ![原檔案被刪除後的軟連結被標紅並閃爍](https://img2020.cnblogs.com/blog/1001136/202005/1001136-20200504161606801-743973184.gif) 如何判斷硬連結呢?我們分別建立軟/硬連結後檢視i節點編號。 ```shell [root@centos7-master tmp]# cd /tmp [root@centos7-master tmp]# ln issue.bak issue.bak.hard [root@centos7-master tmp]# ln -s issue.bak issue.bak.soft [root@centos7-master tmp]# ls -i issue.bak issue.bak.hard issue.bak.soft 8395173 issue.bak 8395173 issue.bak.hard 9116906 issue.bak.soft ``` 可以看到,原檔案的i節點編號是```8395173```,硬連結也是對應```8395173```編號的i節點的一個對映,而軟連結的i節點編號則不同。 這樣我們也可以十分容易理解為什麼硬連結可以同步更新了,因為當我們對原檔案進行修改操作時,在核心層面來看,這個操作實際上是針對對應的i節點進行操作,因為該i節點同時對映到了兩個檔案,所以硬連結也自然能體現出同步更新。 **(3) 硬連結不能跨分割槽,但軟連結可以** ```shell [root@centos7-master tmp]# ln /tmp/issue.bak /boot/issue.bak.hard ln: failed to create hard link ‘/boot/issue.bak.hard’ => ‘/tmp/issue.bak’: Invalid cross-device link # 根分割槽/ 和 /boot分割槽不屬於同一個分割槽 [root@centos7-master tmp]# ln -s /tmp/issue.bak /boot/issue.bak.soft ``` 這相當於在Windows下將C盤的一個檔案***硬連結***到D盤,是不被系統允許的。 **(4) 硬連結不能針對目錄使用,但軟連結可以** ```shell [root@centos7-master tmp]# ln /tmp /root/tmp.hard ln: ‘/tmp’: hard link not allowed for directory [root@centos7-master tmp]# ln -s /tmp /root/tmp.soft ``` 這相當於在Windows下將D盤的一個目錄***軟連結***到桌面,系統是允許的。 ### B. 應用場景: 硬連結使用場景並不多,但可以將其作為一個實時備份來使用。 ## 參考文獻 [1] 兄弟連.兄弟連Linux入門視訊教程[DB/OL].http://c.biancheng.net/view/1713.html,2018-12-21/20