硬連接:
其本質就是:一個文件,多個名字。注意:目錄是沒有硬鏈接的。
用ln filename linkname創建硬鏈接,注意源文件和鏈接文件位置順序,硬鏈接不可以跨分區建。
在創建硬鏈接時會增加硬連接數,可以通過ls –l查看,如下圖所示的,可看到硬鏈接數。
硬鏈接創建好,源文件和鏈接文件實際上是兩個獨立的文件,對任何一方進行刪除都不會影響到另一方,但是修改其中一方,另外一方也會變:例如:
一:建立硬鏈接:(因為硬鏈接不能跨分區,所以我先拷貝了/etc/passwd到/app下,然后創建了硬鏈接文件pwd。)在圖中可以看到在剛拷貝過來passwd后,其硬鏈接數顯示為1,建立硬鏈接后顯示為2,所以創建硬鏈接實際上實在增加硬連接數,一個文件,不同名字而已。
二:然后對鏈接文件pwd進行修改:(這里用的是nano對pwd進行的修改,下方有一些輔助按鍵說明,寫完之后呢,按ctrl +X鍵進行保存退出,再按y鍵確定,最后回車結束。)
三:在源文件passwd里可以看到修改的數據:(因為內容較長,在這里我就截取了一部分,最主要是看文件的變化),修改鏈接文件源文件也會隨著改變,當然,反過來也一樣。這里就省略了。
四:把源文件刪除后,可以看到鏈接文件依然存在,而且還可以被訪問,硬鏈接數減少為1,所以,硬連接的文件都是獨立存在的,刪除任一方,另一方都不會改變,只是硬連接數的增加和減少。
對于硬鏈接數,舉個例子:在/app下創建一個目錄(目錄是不能創建硬鏈接,但不代表沒有硬鏈接數),/app/a/b,可以ls –l查看一下a的硬鏈接數為3,如下圖所示,有三個inode(索引號)一樣的三個文件,分別是,/app下的100663680 a;/app/a下的當前目錄100663680 . ;/app/a/b下的上一級目錄100663680 .. 。這三個文件。(inode號是按照inode表自動生成的,)
軟鏈接呢,也可以叫做快捷方式,因為鏈接文件只是存了源文件的一個路徑,
用ln –s filename linkname創建軟鏈接,軟鏈接可以跨分區建。
而且在創建軟鏈接后,改變鏈接文件不會改變源文件,但若是改變了源文件,那么鏈接文件也會發生變化,因為在執行鏈接文件的時候,其實是順著保存的源文件的路徑去找的源文件然后執行的源文件。例如:
一:新建軟鏈接,會看到和硬鏈接有所不同,硬鏈接都是文件,軟鏈接是一個快捷方式,鏈接文件有顏色,但是硬連接數沒有發生改變。
二:對軟鏈接文件pwd進行編輯修改內容,
三: 可以看到,和硬鏈接一樣,源文件也被改變:
四:刪除鏈接文件對源文件沒有影響,還是能查看內容,但是…..
五: 刪除源文件后,鏈接文件無內容,證明了軟鏈接存的只是路徑,
在創建軟鏈接時,出現l一些問題:以下是我在創建過程中出現的問題:
在/app下有兩個目錄dir1和dir2,在dir1下有一個目錄文件issue,dir2下有一個目錄sub,想在/app/dir2/sub下產生issue的鏈接:如下圖所示:
一:其中(-p)是你多級創建目錄,tree可以直觀的顯示出結構,但此時可以看到,創建的鏈接文件是紅色的,也就是錯誤的做法,因為sub是個空目錄,多在sub后加了個“/”,指到了它的下一級,
二:這種情況下才是正確的:相當于在sub下新建了一個test的目錄用于存放鏈接/app/dir1/issue.
三:還有這種,相當于在在sub下建了一個和/app/dir1/issue一樣的名字作為它的鏈接。
四:還有一種方法,因為要做dir2/sub下建立軟鏈接,所以就先進到sub下,用 “.” 表示當前路徑,讓源文件使用絕對路徑有一定的弊端:把issue從dir1下挪走,軟鏈接就會發生變化:
執行了mv后,issue的路徑發生了變化,從之前的/app/dir1/issue,調到了/app/dir2下,
因此軟鏈接失效了,
五:相對于app建的;把dir2/sub/issue挪到當前目錄也就是/app下,就可以用了。
綜上所述呢,在建立軟鏈接時,要看一下在哪一級創建的,所在目錄不同,創建時的路徑也不同,
原創文章,作者:M.Sun,如若轉載,請注明出處:http://www.www58058.com/81916