Linux下的連結檔案

來源:互聯網
上載者:User

Ln命令用來在檔案之間建立連結,預設為建立永久連結(目錄不能建立永久連結),使用選項-s建立符號連結。講ln以前,我們先來瞭解一下linux裡的連結。

  一、Linux裡的連結又被稱為連結檔案,它分為永久連結和符號連結兩種。兩者的區別在於:永久連結指向檔案本身,符號連結指向檔案名稱。這個區別是很重要,它導致了兩種連結檔案性質以及操作上的差異,反映在各個方面,我會在文章的最後歸納一下。

  二、如何理解兩種連結檔案的兩種不同指向?如果瞭解 linux裡檔案的儲存機制,這個很好理解。我在以前講inode的文章裡提到過,Linux裡檔案的檔案名稱、檔案屬性、檔案內容是分別儲存的,所以永久連結和符號連結才可以有不同的指向。
  這裡要講一下。我以前講過,linux裡尋找檔案的順序是:根據檔案名稱,找到inode編號,根據編號找到inode塊,然後根據inode塊中的屬性資訊找到資料區塊(即檔案內容)。所以永久連結指向檔案本身,實際上是指向檔案的inode編號。之所以沒有明確講出它是指向inode編號,是因為繞的太遠,涉及的概念更多,這就更加講不清楚了,所以才用了一個沒有概念意義的的檔案本身代替。

  三、有人說,linux連結檔案與windows捷徑相似。某種程度上講是這樣的,嚴格上講又有不同。首先,從指向功能上看,符號連結、永久連結、windows捷徑都具有指向功能;但它們的區別也很明顯:windows捷徑指向檔案的位置,而無論是符號連結還是永久連結都與windows捷徑不同;其次,從檔案性質上看,符號連結與windows捷徑都是一種檔案,但永久連結根本不是一種檔案,只是一種指向。
為什麼說符號連結是一種檔案,而永久連結卻不是?這是因為建立連結時,系統會為符號連結重新分配一個inode編號,但不會為永久連結重新分配inode號,永久連結和它的源檔案分享權限設定一個inode。我講過,linux裡每建立一個檔案,系統都會為其分配一個inode,每個檔案都有一個惟一的inode編號。我們可以從這個方面來確定它們是不是一種檔案。使用命令ls –li命令即可查看它們的inode編號,我在下面會講到,永久連結檔案m_h和它的源檔案mial共用一個inode。 
  號稱檔案的永久連結不是一種檔案,不標稱自己為檔案的Window捷徑反而是一種普通檔案。有意思吧?

  四、我們使用ls –li命令查看檔案時,系統是分欄位給出檔案資訊的。根據ls命令的info協助檔案所述,第一個欄位是inode編號,第二欄位是檔案類型和許可權的資訊,第三欄位是檔案的永久連結數資訊。這個永久連結數是怎麼一回事?
  我們來看個圖片

  我們建立了mail檔案的符號連結m_s和永久連結m_h。,第一個欄位是inode號,我們可以看到互為永久連結的的mail和m_h的inode相同;第二欄位的首位字元為d的是目錄檔案,為-的是普通檔案,為l的就是mail的連結檔案m_s;第三個欄位是永久連結數,可以看到圖片裡的五個檔案的永久連結數分別是5、2、2、1、1、4。 
  永久連結數是ls的info協助文檔裡”number of hard links”的直譯,大多數文章裡都是這麼譯的,我也隨大流。根據規定,沒有永久連結的普通檔案的永久連結數為1,每增加一個永久連結,永久連結數加1;不包含子目錄的目錄檔案的永久連結數為2,每增加一個子目錄,永久連結數加1。
  那麼,這個永久連結數到底是什麼呢?為什麼又有一個這麼奇怪的規定?我有一點自己的理解,不一定正確,這裡講出來,敬請大家雅正。
  ln命令的info協助文檔裡說:A ’hard link’ is another name for an existing file。我認為永久連結數就是檔案的檔案名稱數,更確切的說,我認為永久連結數實際上是對檔案本身的指向數。
  沒有永久連結的普通檔案,它只有一個對檔案本身的指向,所以它的永久連結數為1;而每增加一個永久連結,就增加了一個對檔案本身的指向,所以永久連結數要加1。而符號連結指向了檔案名稱,並沒有指向檔案本身,所以無論為檔案建立了多少個符號連結,永久連結數也不會增加。
  那麼,為什麼不包含子目錄的目錄檔案的永久連結數為2呢?這是因為不包含子目錄的目錄檔案裡只兩個目錄項,它們分別是:“.”和“..”,代表目錄自身和其父目錄。每增加一個子目錄,目錄檔案裡都要增加一個目錄項。那在子目錄下再建立一個子目錄,即建立一個目前的目錄的孫子目錄,目前的目錄的目錄項會增加嗎?不會。
  現在我們來看圖片中五個檔案的永久連結數的含義:它們分別代表Desktop目錄下有3個子目錄, mail檔案有一個永久連結,m_h檔案有一個永久連結,m_s檔案沒有永久連結,xx目錄下有2個子目錄。

  五、這兩種連結有哪些具體的差異呢?
  首先,概念上永久連結指向檔案本身,符號連結指向檔案名稱。其次,性質上永久連結不是一種檔案,符號連結是。然後,與源檔案的關係上,永久連結與源檔案關係緊密,修改任何一個檔案都能同步引起另外一個檔案的變化;符號連結則更像一個獨立檔案,可以對符號連結和它所指向的源檔案分別加以修改。再者,顯示上永久連結沒有明示自己為永久連結;符號連結會明確指出它是一個符號連結。最後,永久連結能節省大量磁碟空間,但它不能為目錄建立永久連結,也不能跨檔案系統建立永久連結;符號連結與永久連結相比則靈活的多。
  你可能會疑惑:顯示m_h的大小明明比m_s大?怎麼能說永久連結比符號連結節省磁碟空間呢?這是因為m_h顯示的是mail的大小,它本身基本上不佔用磁碟空間。我們用du命令來查看一下。

  目錄xy下有mail檔案(12K)和它的永久連結檔案。用du統計目錄佔用磁碟空間大小,發現它佔16K,而mail檔案為12K,其餘4K為目錄項。好像m_h根本就沒有被統計進來,其實並不是沒有被統計,而是它大小為0;使用選項-l,開啟重複統計功能就可以看出來,目錄xy佔用的磁碟空間變為了28K。 
  Over~講了這麼多,希望我把它們給講明白了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.