那些我們一起搞不太懂Linux_軟硬連結概念語法的日子

在 Linux 及其他 Unix Like 作業系統中
假若我們要建立連結
可以用 ln    這個指令



先來解釋一下  連結   這個詞的含意!!!


打個比方其實很像Windows 的檔案捷徑(快捷)

也可以說是 檔案的 分身(內容本質相同,看起來也相同)



在Linux檔案連結中
常用語法 ln

ln 建立的連結分兩種:

(1)硬連結(hard link) 
(2)軟連結(symbolic link) / 符號連結

預設 ln 會使用 hard link。


(1)Hard Link
是資料的真正連結(實體檔案實際所在目錄)

主要特色:
1.不同分割區無法做硬連結
2.不能針對目錄作硬連結
3.目標檔 與 硬連結檔 的 inode number 相同
4.目標檔 與 硬連結檔 的 檔案屬性 相同
5.目標檔 或 軟連結檔 修改內容後,另一個檔案的內容也會跟著更改(同步更新)
6.任何一個檔案刪除後,另一個檔案仍保有元內容

一般在Linux系統下做檔案操作時
會有兩個細部過程

之後若再生一個檔案取名為  novel2.doc 並建一個硬連結
 就會有相同的Inode標號  找尋到一樣對應的Inode表
此時存放數量就會更新成兩個 Inode更新檔案個數


(2)Symbolic link
能突破Hard Link一些做不到的先天限制
比如跨檔案系統、或者是跨硬碟等,應用上比較靈活



主要特色:
1.不同分割區做軟連結
2.可以針對目錄作軟連結
3.目標檔 與 軟連結檔 的 inode number 不同
4.目標檔 與 軟連結檔 的 檔案屬性 不同
5.目標檔 或 軟連結檔 修改內容後,另一個檔案的內容也會跟著更改
6.目標檔 刪除後,軟連結檔 就為損毀的檔案




新增一個 novel2.doc 依照相同流程指向至Data區塊


十分特別的一點在於
連結(捷徑)檔案內容
存放的其實為連結指向的檔案名稱(也包括位於的目錄路徑)
連結大小也是藉由此字串共幾字元來判定共多少byte大小
(一個char一個byte)













用生活化的例子理解軟硬連結的概念

硬連結
可以具體一點來想成是統領百貨大樓 / 遠百 /SOGO等等 其他不同百貨公司
這些特定的公司百貨大樓的
正門、側門、後門 (都對應同一個百貨公司的公司行號)
(它們基本上都是可以讓顧客進入到同一棟大樓)
彼此會讓同一棟百貨大樓的顧客群湧入
可以只留一扇門就能給顧客進來
這三扇門都對應一樣的百貨公司行號(相同的一棟大樓)



軟連結
可以具體看成是到達這些門的不同捷徑
比方說遊戲傳送點任意門等等之類的

基本上只要對方大樓的管理員/守門員/警衛允許並告知
門有打開(有營業)
就能透過這些捷徑前往
如果門沒開,有這些捷徑也徒勞






ln 的語法

ln [OPTION]… TARGET […] [LINKNAME […]]

ln 常用參數

-s, –symbolic: 建立 symbolic link
-f, –force: 如果目標檔案已經存在,不會提出詢問,而會直接強制覆蓋檔案
-i, –interactive: 如果目標檔案已經存在,會先提出詢問,不會直接強制覆蓋檔案
-n, –no-clobber: 不會覆蓋任何檔案


以下我拿  樹梅派上的 Raspbian 系統環境做一個語法演示

針對  /etc/host.conf  做兩種連結 語法示例

首先是軟(符號)連結

ln -s 檔案及其所在地



硬連結

ln 檔案及其所在地








參考文獻link:
http://www.techbang.com/posts/12538-hard-links-soft-links-archives-does-not-fashu

http://www.test104.com/tw/board/topic_12473.html

https://www.phpini.com/linux/ln-create-link-command



留言

這個網誌中的熱門文章

何謂淨重(Net Weight)、皮重(Tare Weight)與毛重(Gross Weight)

Architecture(架構) 和 Framework(框架) 有何不同?_軟體設計前的事前規劃的藍圖概念

經得起原始碼資安弱點掃描的程式設計習慣培養(五)_Missing HSTS Header