[轉帖]Linux 下軟連接和硬連接的區別

Linux 下軟連接和硬連接的區別

http://os.51cto.com/art/201911/605267.htm

軟鏈接 文件是小的  只是一個連接 刪除和其餘處理不影響 原始文件的計數  刪除源文件 連接文件立馬完蛋 可是能夠跨文件掛載點進行鏈接. 

硬連接 增長了innode 的引用計數. 刪除時 只要還有一個有連接 文件就還有. 可是不能跨掛載點進行硬連接

軟鏈接 就是 ln -s 硬連接 直接 ln

 

 

在 Linux 系統中,一切都是文件,然而爲了區分不一樣類型的事物,咱們有了:node

  • 普通文件
  • 目錄文件
  • 連接文件
  • 設備文件

在以前的文章《阿里面試題 | Nginx 所使用的 epoll 模型是什麼?》中咱們討論了文件描述符的概念:面試

文件描述符(file descriptor)是內核爲了高效管理已被打開的文件所建立的索引,其值是一個非負整數(一般是小整數),用於指代被打開的文件,全部執行 I/O 操做的系統調用都經過文件描述符。spa

面試 | Linux 下軟連接和硬連接的區別

對於 Linux 有一些使用的用戶來講,會有相似以下的寫法:操作系統

g++ lots_of_errors 2>&1 | head3d

其中 2>&1 中的2 就是表示的「標準錯誤」,1 就是「標準輸出」,中間的 & 表示後面跟的數字是文件描述符而不是一個文件(否則全部的「標準錯誤」就都重定向到了一個名爲 1 的文件中了)。指針

本文將針對另外一個面試重點進行展開闡述:code

說說看 Linux 下有哪幾種連接?軟連接和硬連接?它們之間的區別是什麼呢?htm

Linux 下的連接blog

做爲的一個 Linux 的使用者,Linux 系統下提供 ln 指令來進行文件連接,咱們必定見過相似以下指令:索引

面試 | Linux 下軟連接和硬連接的區別

此時若是 ls 查看當前目錄下的文件的話,會發現:

面試 | Linux 下軟連接和硬連接的區別

那麼這個 foo.txt 到底是個什麼呢?

這個就是一個文件連接,文件連接主要分爲硬連接和軟連接,經過查看 ln --help,能夠看到一些重要的內容:

面試 | Linux 下軟連接和硬連接的區別

ln 指令默認建立的是硬連接,若是加入了 -s 參數,則會生成一個軟連接。

硬連接

先來看看 ln 默認建立的硬連接,因爲 Linux 下的文件是經過索引節點(Inode)來識別文件,在 Linux 的文件系統中,保存在磁盤分區中的文件無論是什麼類型都給它分配一個編號,稱爲索引節點號(Inode Number)。

面試 | Linux 下軟連接和硬連接的區別

在 Linux 中,多個文件名指向同一索引節點是存在的,因此硬鏈接指經過索引節點來進行的鏈接,即每個硬連接都是一個指向對應區域的文件。

咱們這裏建立一個文件 foo.txt 而後創建一個它的硬連接看看:

面試 | Linux 下軟連接和硬連接的區別

前面的 6817859是文件的 inode,能夠簡單把它想成 C 語言中的指針,它指向了物理硬盤的一個區塊,事實上文件系統會維護一個引用計數,只要有文件指向這個區塊,它就不會從硬盤上消失,這裏咱們會發現,這兩個文件擁有相同的 inode,經過查看文件內容也會發現是同一個文件:

面試 | Linux 下軟連接和硬連接的區別

硬連接的做用是容許一個文件擁有多個有效路徑名,這樣用戶就能夠創建硬連接到重要文件,以防止「誤刪」的功能,因爲對應該目錄的索引節點有一個以上的鏈接,假設咱們刪除了原始的 foo.txt 文件:

面試 | Linux 下軟連接和硬連接的區別

此時文件的內容依然存在,因此只刪除一個鏈接並不影響索引節點自己和其它的鏈接,只有當最後一個連接被刪除後,文件的數據塊及目錄的鏈接纔會被釋放,也就是說,文件纔會被真正刪除。

軟連接

面試 | Linux 下軟連接和硬連接的區別

軟連接又叫符號連接,這個文件包含了另外一個文件的路徑名,例如在上圖中,foo.txt 就是 bar.txt 的軟鏈接,bar.txt 是實際的文件,foo.txt 包含的是對於 bar.txt 的 inode 的記錄。

軟鏈接能夠是任意文件或目錄,能夠連接不一樣文件系統的文件,在對符號文件進行讀或寫操做的時候,系統會自動把該操做轉換爲對源文件的操做,但刪除連接文件時,系統僅僅刪除連接文件,而不刪除源文件自己,這一點相似於 Windows 操做系統下的快捷方式。

軟連接和硬連接的區別

在有了上面的知識後咱們就能夠簡要地回答面試中的問題了:

軟連接和硬連接的區別是什麼?

咱們來總結一下:

面試 | Linux 下軟連接和硬連接的區別

在掌握了連接方面的知識以後,還有如下相關面試題也能夠一塊兒準備起來:

  • Linux 文件系統有哪些
  • Linux 有哪些文件類型
  • 用戶進程間通訊主要哪幾種方式
  • 中斷與系統調用的概念
相關文章
相關標籤/搜索