歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Unix知識 >> 關於Unix >> Unix系統中的硬鏈接和軟鏈接詳解

Unix系統中的硬鏈接和軟鏈接詳解

日期:2017/3/1 18:12:59   编辑:關於Unix

簡單的說連接就是可以指向文件系統中其他位置的一個快捷方式,它非常有用,可以避免鍵入很長的路徑名或cd深入到多個文件夾中,用過Windows系統桌面的程序圖標其實就是一個快捷方式,大家也可以這麼理解,不過兩者卻存在某些重大的差別,在unix中的連接形式分為兩種,分別為硬鏈接和軟鏈接。

unix硬鏈接

硬鏈接是一個目錄條目,它指具有同一個i-node(硬盤上的物理位置)的另一個文件。事實上只存在一個文件,指向硬盤上同一個物理數據的只有兩虞多個目錄條目。


復制代碼代碼如下:
ln /usr/local/etc/rc.d/nginx nginx

使用該命令在當前目錄下創建一個名為nginx的文件,該文件代表硬盤上的另一個地址/usr/local/etc/rc.d/nginx。現在利用目錄當前目錄中的nginx就可直接訪問同名文件了(當然已經創建了該連接,如果我們想編輯nginx這個文件時,我們只需要執行“vi nginx”,而不需要執行“vi /usr/local/etc/rc.d/nginx”這麼長的文件路徑了,當然如果想執行時也無需要輸入比較長的路徑了)。

執行ls -l nginx之後會發現硬件鏈接文件權限和原文件完全一樣,如果直接修改硬鏈接的文件權限,那麼相應的原文件權限也跟著會修改。

簡單的說,文件硬鏈接文件與原文件大小、修改時間、權限等都會相同。

當執行rm刪除掉硬鏈接文件,那麼鏈接數將會被減去1,以作出變動,不過文件仍然存在,因為還有另一個連接指向硬件上的同一個物理位置。只有其所有硬鏈接都被刪除,並且鏈接數被減至0時,文件才會被刪除。

腳本之家注:UNIX硬鏈接有兩大局限,不能用於連接目錄,也不能跨越文件系統的范圍。

UNIX軟鏈接

UNIX軟鏈接也稱符號連接或symlinks,相當於Windows系統中的快捷方式。和硬鏈接不同的是,軟鏈接是一個獨立的文件,在硬件上有屬於自己的i-node。軟鏈接只是一個文件,其中包含指向另一個文件的指針。用ln -s命令即可創建一個軟鏈接,之後可使用ls -l -b查看文件屬性。


復制代碼代碼如下:
ln -s /etc/rc.conf a
ls -l -b

  • 如果想編輯/etc/rc.conf時,就可直接使用軟連接編輯,而不需要輸入那麼長的路徑了,如直接執行“vi a” 等同於“vi /etc/rc.conf”。如果在編輯時提示“No such file or directory(找不到該文件或目錄)”此類的錯誤,但在執行ls命令之後,又可找到該文件,則表明你使用了已成為空鏈接的軟鏈接,也就是說目標文件或目錄不存在。,用ls -l命令可查看文件是否為軟鏈接。如果是軟連接,可查看連接軟件指向的文件或目錄是否存在。

    腳本之家注:無法是目標文件移動走了還是刪除了,軟刪除都將失效。

    UNIX硬鏈接與軟鏈接區別

    1、訪問權限並不代表對真實文件的訪問權限,也不能更改軟連接的屬性(訪問權限擁有都和工作組等)。這些操作只能在真實文件中進行。

    2、連接數實際上只有一個,因為軟件鏈接是一個指向其他文件的真實文件,它不只是一個指向硬盤上某個位置的目錄(硬連接則是)。

    3、文件大小不確認,軟連接列出的大小是其中包含的連接文件大小,而不是它指向那個真實文件的大小。

    4、文件修改時間也不確切。軟連接告訴我們的是連接最近一次被修改的時間,並沒有指出連接所指文件的最近一次修改時間。

    5、文件名指出,->之後是該文件所指的真實文件的路徑名稱。

    6、文件的刪除,和硬連接不同的是,如果刪除了軟連接所指的原始文件,那麼該文件的數據塊也會被刪除,而連接也會變為空連接。不過,如果用rm命令來刪除連接,原始文件則會安然無恙。

    7、i-node的占用,和軟連接相比,硬連接的好處是它們不占用i-node。這似乎微不足,但當硬盤上可用的i-node數量有限時就不一樣了。如果硬盤上有無數小文件,這些小文件可能會用光硬盤上所有的i-node,即使硬盤上還有許多剩余空間,用光i-node之後再也不能創建新文件了,除非刪除某些文件,釋放部分i-node。

    關於連接使用的選擇,對於連接的使用最常用的用法是,硬連接用於原始文件和目標文件位於當前同一個文件系統。好處是能提供真實文件的有關信息,在原始文件被刪除或移動時,也不會成為空連接。但是,如果需要連接目錄或位於另一個文件系統的文件時,就必須采用軟連接。

  • Copyright © Linux教程網 All Rights Reserved