軟/硬鏈接的“愛恨糾葛”

硬鏈接

概念

硬鏈接(hard link,也稱鏈接)是對同一個文件系統中的一個文件的連接,它關聯的是一個文件的inode(節點)。linux中每一個文件系統都有其一套獨立而完整的inode“機制”。同一個文件系統中,inode是文件存在的唯一標識。文件名正是通過映射一個文件的inode號來關聯一個文件。當然一個文件也可以同時擁有不同的幾個文件名,因此通俗的來說,我們可以把硬鏈接看作是某個文件的一個或多個文件名。

硬鏈接的作用

大家可能會想了。一個文件要那么多文件名有什么用,一個就夠了啊,為什么要另外再創建硬鏈接,豈不是多此一舉。

當然不是,當你訪問一個文件路徑很深或者文件名很繁瑣的文件時,可能會被那一長串根本記不住的文件名搞崩潰的。就好比有一個"歪果仁",他一個人的名字可能比我們一個家族的族譜都要長(你懂得)。當你每次需要跟他交流時要先把他家的族譜背一遍,我的天,你還有心情跟他交流嗎?而突然有一天他告訴你,你可以用歪果仁來稱呼他,你是不是會瞬間感覺世界和平了。沒錯,當我們需要經常面對一個令人想哭的文件名,而文件的位置又不方便變動時,就可以用鏈接的方式再給它起個名字,一勞永逸,豈不快哉。

硬連接的創建條件

         這么好用的工具是不是迫不及待想試試了。別急,工具雖好用,但是也不是隨便就可以濫用的,硬鏈接是會有一些限制條件的。

首先,硬鏈接不能跨設備和分區建立。剛剛我們提到過,硬鏈接是關聯文件的inode建立的,而每一個文件系統都有其完整的一套inode機制。也就是說不同的文件系統中可能會有相同的inode,但他們所代表的文件卻著實不同。如此一來,跨分區和設備創建的硬鏈接豈不瞬間凌亂了。

還有硬鏈接也不能針對目錄建立,也就是說不能給一個目錄創建硬鏈接,別問我為什么,我也不清楚,反正OS就是這么要求的。^_^*

軟/硬鏈接的“愛恨糾葛”

         最后,鏈接命名可以采用相對路徑,而且相對路徑是可以相對于當前工作目錄來說的。

軟/硬鏈接的“愛恨糾葛”

硬鏈接的創建

         man一下ln的用法:

軟/硬鏈接的“愛恨糾葛”

         硬鏈接的使用很簡單,要創建硬鏈接無需使用任何選項,其語法如下:

  ]# ln  TARGE  [FILENAME]

軟/硬鏈接的“愛恨糾葛”

通過比較發現,鏈接文件和原文件除了文件名剩下的一模一樣,而且原文件鏈接數會加一。當我們更改其中任何一個文件,訪問“另一個文件時發現內容發生了同樣的變化。當刪除其中一個文件時,即便是刪除原文件,也只是連接數減少,而文件數據依舊可以被讀取,并不受其影響。這也進一步說明,硬鏈接確實是同一個文件系統中某個文件的一個或幾個文件名。

硬連接的特點

         綜合以上幾點,總結出硬連接的一些特性:

1、  硬鏈接不能跨越設備和分區創建;

2、  不能對目錄創建硬鏈接;

3、  硬鏈接引用原文件的inode號,文件大小,時間等屬性與原文件相同;

4、  創建硬鏈接會增加額外的記錄項以引用文件,文件鏈接數會遞增;

5、  即便刪除原文件也不影響鏈接文件訪問;

6、  刪除文件時,鏈接數遞減,文件要存在,至少得有一個鏈接數,當鏈接數為零,該文件就被刪除了。

 軟鏈接

可以看出,文件系統中使用鏈接真的方便了很多,但是硬鏈接的局限性不免讓人覺得有些束手束腳,不能跨越分區,不能對目錄創建等,總會讓人覺得有些尷尬。對此,我們有下面一種補救措施,那就是軟鏈接,又稱符號鏈接。

概念

軟鏈接(solf links)又稱符號鏈接,這個文件包含了另一個文件的路徑名??梢允侨我馕募蚰夸?,可以鏈接不同文件系統的文件。

創建方法:

 ]# ln  –s  GARGET  DIRECTORY

軟/硬鏈接的“愛恨糾葛”

注意:創建軟鏈接時,原文件建議采用相對路徑來書寫,但是不能相對于當前工作目錄,應該相對于鏈接文件路徑書寫。

         與硬鏈接不同,可以對目錄創建軟鏈接,軟鏈接的inode號與原文件不同,而且原文件的鏈接數也沒有遞增。文件屬性也都完全不同。由于軟鏈接文件的內容是它引用的文件的名稱,所以軟鏈接的大小是原文件的文件名的字符數。

         軟鏈接文件只是其源文件的一個標記,當刪除了源文件后,鏈接文件不能獨立存在,雖然仍保留文件名,但卻不能查看軟鏈接文件的內容了。

軟/硬鏈接的“愛恨糾葛”

         在對符號鏈接進行讀或寫操作的時候,系統會自動把該操作轉換為對原文件的操作,但刪除鏈接文件時,系統僅僅刪除鏈接文件,而不刪除源文件本身。

刪除硬/軟鏈接使用:

 ]# rm  link_file  或者

 ]# unlink  link_file

軟鏈接的特性

綜上所述,同樣可以總結出一些關于軟鏈接的特性:

1、  軟鏈接可以跨越設備和分區;

2、  可以對不同文件系統中的目錄或物理文件創建軟鏈接;

3、  軟鏈接的指向是另一個文件的路徑,其文件大小為指向路徑字符的長度;

4、  軟鏈接文件有獨屬于自己的inode號,不增加或減少目標文件的鏈接數;

5、  刪除原文件,不會刪除軟鏈接,但原文件就消失了,訪問不到了,軟鏈接就成了無根之物;

6、  使用ls  -L可以顯示軟鏈接的名稱和它引用的文件。

原創文章,作者:Hulk,如若轉載,請注明出處:http://www.www58058.com/53124

(0)
HulkHulk
上一篇 2016-10-20 15:34
下一篇 2016-10-20 19:02

相關推薦

  • Homework Week-1 Linux基本

    1、描述計算機的組成及其功能。 計算機由硬件和軟件組成;硬件主要分為五部分:控制器,運算器、存儲器、輸入和輸出設備。軟件分為系統軟件和應用軟件。 控制器(Control):是整個計算機的中樞神經,其功能是對程序規定的控制信息進行解釋,根據其要求進行控制,調度程序、數據、地址,協調計算機各部分工作及內存與外設的訪問等。 運算器(Datapath):運算器的功能…

    Linux干貨 2016-08-15
  • 魔術方法

    Edit 魔術方法 使用Python的魔術方法的最大優勢在于他們提供了一種簡單的方法來讓對象可以表現的像內置類型一樣。那意味著你可以避免丑陋的,違反直覺的,不標準的的操作方法。 特殊屬性 屬性 含義 __name__ 類、函數、方法等名字 __module__ 類定義所在的模塊名? __class__ 對象或類所屬的類 __bases__ 類的基類的元組,順…

    Linux干貨 2017-11-21
  • scp和rsync的使用

    通過一些簡單需求了解scp和rsync的使用

    2017-09-18
  • N23_第六周

    1、復制/etc/rc.d/rc.sysinit文件至/tmp目錄,將/tmp/rc.sysinit文件中的以至少一個空白字符開頭的行的行首加#;:%s/^[[:blank:]]\+.*/\0#/g 2、復制/boot/grub/grub.conf至/tmp目錄中,刪除/tmp/grub.conf文件中的行首的空白字符;:%s/^[[:space:]]\+/…

    Linux干貨 2017-02-28
  • 推薦-tree命令的安裝和使用

    一、前言     tree命令是可以把指定文件夾的所以文件用樹狀羅列出來,呈現目錄形式的一個命令。在Centos 6.5中默認不能直接使用: 輸入type tree命令(type COMMAND:區別是內建命令還是外部命令)提示不存在: 二、安裝       …

    系統運維 2016-03-27
  • 常用的MySQL數據庫備份

    常用的MySQL數據庫備份方式 前言 為什么需要備份數據? 數據的備份類型 MySQL備份數據的方式 備份需要考慮的問題 設計合適的備份策略 實戰演練 使用cp進行備份 使用mysqldump+復制BINARY LOG備份 使用lvm2快照備份數據 使用Xtrabackup備份 總結 前言 我們試著想一想, 在生產環境中什么最重要?如果我們服務器的硬件壞了可…

    2016-10-01
欧美性久久久久