時間:2015-06-28 00:00:00 來源:IT貓撲網(wǎng) 作者:網(wǎng)管聯(lián)盟 我要評論(0)
UNIX和Linux都提供了鏈接命令ln。顧名思義,ln是將兩個文件名(此說法不大準(zhǔn)確)彼此鏈接起來,使得用戶無論使用哪一個文件名都可訪問到同一 文件。這是我們用ln命令所要達(dá)到的目的,但是從技術(shù)上講,只有軟鏈接是鏈接兩個文件名,硬鏈接不在此列之中。要透徹理解鏈接的含義,就必須要分清文件與 文件名的區(qū)別。而要區(qū)分文件與文件名,我們就得知道文件系統(tǒng)如何管理文件??此坪芷胀ǖ拿睿浼夹g(shù)背景卻一點(diǎn)兒也不簡單。
文件系統(tǒng)如何管理文件涉及范圍太大,不可能也不必要在此全部敘述,但我們只需知道以下技術(shù)要點(diǎn)即可。在Linux中,文件的外延很大,我們常識中的"文件 "(例如一篇文檔等)是文件, 目錄、設(shè)備等也都是文件。這些文件種類繁多,數(shù)量巨大,萬一重名怎么辦,文件系統(tǒng)是如何區(qū)分并管理它們的呢?限制重名?這當(dāng)然不行!我們來看看Linux 是如何做的。原來Linux的文件系統(tǒng)為每一個文件分配了一個我們稱為索引節(jié)點(diǎn)(Inode)的數(shù)據(jù)結(jié)構(gòu),在這個索引節(jié)點(diǎn)內(nèi)有一個全系統(tǒng)獨(dú)一無二的索引節(jié) 點(diǎn)號,文件系統(tǒng)正是靠這個索引節(jié)點(diǎn)號來識別一個文件。另外文件系統(tǒng)用來管理文件的所有信息都包含在索引節(jié)點(diǎn)之中。
好了,給每個文件分配一個唯一的number,文件系統(tǒng)就知道某個文件究竟是張三的文件還是李四的文件。但是文件的真正使用者——我們?nèi)祟愐惨迷?number去識別文件嗎?呵呵,若此為真,不知是人玩電腦還是電腦玩人羅。因此我們要用我們的方式去區(qū)分各個文件,給每一個文件起一好聽易記的名字,同 一地點(diǎn)(即同一目錄)不能有兩個名字一樣的文件。地點(diǎn)若不同,允許重名。至此,人類有人類識別文件的方法,電腦(文件系統(tǒng))有電腦的做法,喔喔,問題又來 了,二者是要"水火不容"呢,還是"溝通無限"呢?這還用問,當(dāng)然是后者啦。
OK,既然要"溝通","鏈接"自然而然就提出來了。繞了個大圈,終于得以言歸正傳,有了上述的背景知識,不管是硬鏈接還是軟鏈接對于我們來說已是板上魚 肉。所謂硬鏈接(hard link, 也稱鏈接[1])就是一個文件的一個或多個文件名。再說白點(diǎn),所謂鏈接無非是把我們?nèi)祟愂褂玫奈募碗娔X(文件系統(tǒng))使用的節(jié)點(diǎn)號鏈接起來。因此我們可 以用多個文件名與同一個文件進(jìn)行鏈接,這些文件名可以在同一目錄或不同目錄。一個文件有幾個文件名(用ln命令實(shí)現(xiàn)多個文件名),我們就說該文件的鏈接數(shù) 為幾。由定義可知,此鏈接數(shù)可以是1, 這表明該文件只有一個文件名。
需要特別指出的是,在info ln的幫助信息中所說的硬鏈接與我的理解是有差別的,先看info是如何講硬鏈接。"A "hard link" is another name for an existing file; the link and the original are indistinguishable."(一個"硬鏈接"是一個現(xiàn)有文件的別名;鏈接文件與被鏈接文件是無法區(qū)別的。)哇喔,好象亂套了,誰對誰錯?誰都 沒錯,二者角度不同。Info是就ln命令而論的"硬鏈接",注意了,info中的硬鏈接也是打了雙引號的,我估計此有特殊含義。"鏈接文件與被鏈接文件 是無法區(qū)別的",沒錯,因?yàn)樗鼈兌贾赶蛲粋€索引節(jié)點(diǎn)嘛?,F(xiàn)在我與info主要差別在于,我認(rèn)同而info不認(rèn)同以下觀點(diǎn):對于一個擁有文件名的文件,在 沒有用過ln命令的情況下,該文件仍存在硬鏈接,且鏈接數(shù)為1。理論需要實(shí)踐來證明,在Linux中用ls –l命令獲得該目錄下文件的詳細(xì)信息,格式如下:
-rwxr-xr-x 1 root root 1024 Apr 30 17:06 filename
上述格式中黑體加下劃線的"1"代表文件名filename的文件的鏈接數(shù)為1。做個實(shí)驗(yàn),在同一目錄(不同目錄也行)使用ln命令:
ln filename filename2
然后再使用ls –l命令,會得到下面的信息:
-rwxr-xr-x 2 root root 1024 Apr 30 17:06 filename
-rwxr-xr-x 2 root root 1024 Apr 30 17:06 filename2
很明顯,原來文件名為filename的文件現(xiàn)在擁有了兩個文件名,鏈接數(shù)變?yōu)?, 除此之外其它一切信息都沒變,所以說"鏈接文件與被鏈接文件是無法區(qū)別的"。下面的事實(shí)讓我懷疑有沒有必要用ln產(chǎn)生新的硬鏈接:無論使用任一文件名對文 件的任何改動,該文件的所有直接或間接[2]鏈接文件都會隨之而改變,最后所有信息都保持一致。
將文件名與索引節(jié)點(diǎn)分開,然后采用硬鏈接的技術(shù)使得管理文件變得更方便,效率更高。例如重命名,進(jìn)程并不需要打開該文件,只需改動某個目錄項的內(nèi)容即可。 還有刪除一個文件也是如此,將相應(yīng)的目錄項刪除,該文件的鏈接數(shù)減1,如果刪除目錄項后該文件的鏈接數(shù)為零,這時系統(tǒng)才把真正的文件從磁盤上刪除。
認(rèn)識了硬鏈接究竟是怎么一回事,理解硬鏈接的兩個限制就容易多了。
1、不允許給目錄創(chuàng)建硬鏈接;
2、只有在同一文件系統(tǒng)中的文件之間才能創(chuàng)建鏈接。
篇幅關(guān)系,不再贅述。
為了克服以上限制,引入符號鏈接(symbolic link,也稱軟鏈接)。符號鏈接實(shí)際上是一種特殊的文件類型,這種文件包含了另一個文件的任意一個路徑名。這個路徑名指向位于任意一個文件系統(tǒng)的任意文 件,甚至可以指向一個不存在的文件。系統(tǒng)會自動把對符號鏈接的大部分操作(如讀、寫等)變?yōu)閷υ次募牟僮鳎承┎僮?如刪除等)就會直接在符號鏈接上 完成。在ln中加選項-s便產(chǎn)生一個文件的符號鏈接。?? 總之:硬鏈接就是讓多個不在或者同在一個目錄下的文件,同時能夠修改同一個文件,其中一個修改后,所有有與其有硬鏈接的文件都一起修改了。?
軟鏈接就是與window中的快捷鍵一樣。
關(guān)鍵詞標(biāo)簽:硬鏈接,軟鏈接
相關(guān)閱讀
熱門文章 安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程 Tomcat9.0如何安裝_Tomcat9.0環(huán)境變量配置方法 多種操作系統(tǒng)NTP客戶端配置 Linux操作系統(tǒng)修改IP
人氣排行 Linux下獲取CPUID、硬盤序列號與MAC地址 dmidecode命令查看內(nèi)存型號 linux tc實(shí)現(xiàn)ip流量限制 安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程 linux下解壓rar文件 lcx.exe、nc.exe、sc.exe入侵中的使用方法 Ubuntu linux 關(guān)機(jī)、重啟、注銷 命令 查看linux服務(wù)器硬盤IO讀寫負(fù)載