1. 程式人生 > >圖解符號連結和硬連結的區別和i節點的介紹

圖解符號連結和硬連結的區別和i節點的介紹

我們先來介紹一些linux檔案系統的知識。
我們知道 linux中一個檔案具有很多屬性,uid,gid,檔案大小,訪問許可權,檔案內容block位置等。這些內容是和檔案中的實際內容分開放的。
檔案的屬性是放在叫做 i節點的結構中 ,而檔案內容則放在資料塊中。
這個 inode(i節點) 和block(資料塊)是檔案系統一開始就規劃好的,並且不會改變(除非你格式化)。


那麼這個i 節點和block是怎麼來作用的呢。上面說了i節點除了包含檔案的一些屬性,還有存放檔案內容的block的位置。
也就是說檔案內容是通過i節點來索引的,就像下圖所示






小節一下:
i節點存放的是檔案(或目錄)的屬性,並不存放檔案或目錄的實際內容(目錄的內容就是一般檔案或子目錄,也就是說一般檔案的檔名和子目錄名也是存放在block中的)

block快用來存放具體的內容,他通過i節點中的記錄來索引。






那麼下面我們來說說訪問一個檔案時的具體流程。
對於一個目錄來說,他有一些 許可權,大小等屬性,他們是放在i節點中的。目錄中的目錄項名即是
該目錄中存放的內容(每個檔案或目錄都是在一個目錄中,那麼他們就是我們所說的 目錄項。)
,既然他們是目錄中存放的內容。從上面我們的介紹,我們應該能知道
 目錄項名(即目錄中的檔名或目錄名)是放在block中的。
 如果我們要訪問一個目錄中的目錄項的內容。那麼就可以通過該目錄的i節點找到存放該目錄名的block塊。
那麼找到存放該目錄名的block後,又怎麼獲得這個目錄項的真正內容呢?通過i節點啊!那i節點在哪我們怎麼知道呢?

其實block中同時也記錄了i節點編號,就是和目錄名放在一起。那麼也是說,我在block中找到了和我要找的目錄項
的名字相符的block,那麼也就找到了i節點編號。然後我們通過這個i節點編號就找到了這個目錄項自己的i節點。然後我們就能
通過這個i節點來訪問這個目錄項的屬性和實際內容。


有點暈。廢話說多了,我們來看個例子吧:


比如我現在要讀/honme/feg/a 這個檔案的內容,那麼系統是怎麼讀取他的內容的呢。


1.系統先通過 根目錄 / 的掛載點 找到他的inode編號(從下面輸出中我們看到是2)
[email protected]:~$ ll -di /
2 drwxr-xr-x 24 root root 4096 Apr  9 01:59 //

我這裡 inode 是2


2.找到編號為2的i節點,然後從該i節點中找到 存放 / 目錄中目錄項名的block,從這些block中找到內容有home的block,然後也就找到了home目錄項的inode編號(目錄項名,和inode是放在一起的)(262145)
[email protected]:/home$ ll -di /home
262145 drwxr-xr-x 3 root root 4096 Jun 20  2012 /home/


3 找到 編號為262145的i節點,然後從i節點中找到 存放 /home 目錄中目錄項名的block,從這些block中找到內容有feng的block,然後也就找到了feng目錄項的inode編號(312874)
[email protected]:/home$ ll -di /home/feng
312874 drwxr-xr-x 33 feng feng 4096 May 16 01:30 /home/feng/


4 找到編號為 312874這個i節點,然後從i節點中找到存放/home/feng 目錄中目錄項名的block,從這些block中找到內容有a的block,然後也就找到了a目錄項的inode編號(305152)
[email protected]:/home$ ll -di /home/feng/a
305152 -rw-rw-r-- 1 feng feng 0 May 13 05:56 /home/feng/a


5 找到 305152 這個編號的 i節點,然後從後i節點中找到存放 a 檔案內容的block.


6 然後將找到的block中的內容讀出來

我們用個圖來表示上面的過程:





瞭解了上面這些,硬連結和軟連線的細節方面我們就能容易理解了




假設兩個使用者A和B 分別有自己的工作目錄 /home/A 和/home/B
因為一些需要現在A需要訪問B擁有的x檔案。如果用絕對路徑或相對路徑訪問的話,那麼A每次訪問
B中X時都 需要 以/home/B/x 或是../B/x 當然你可能覺得這樣也可以。但是如果目錄層次非常深
那麼再用這種方式來訪問B中的檔案 ,你可能就接受不了了。
linux提供了兩種方式來解決這個問題。一種是符號連結。一種是硬連結。


我們先來看一下一個忽略了一些細節的關於符號連線和硬連結的圖
矩形為目錄,圓形為檔案,三角形為記憶體塊


如上圖所示。A在自己的目錄下建立一個與B下x的同名檔案。
符號連結:如圖中黃色箭頭所示,讓B中的x實際上指向A中的x
硬連結:如圖中紅色箭頭所示,他是直接指向B中x的實際記憶體中的內容。而不通過A中的x


從上圖我們很容易看出 符號連結和硬連結的區別:
符號連結可以說的間接訪問。他通過A中的x才能訪問到記憶體中x的內容。那麼如果 我把B中的x目錄項刪掉,那麼A中的x也就不能在訪問到x的內容了。
因為他是同過B中的x來訪問的。
那麼硬連結就可以說是直接訪問。他直接指向A中x在記憶體中的內容。那麼現在就算A中的x目錄項被被刪掉了。我們任然可以通過B中的x來訪問他。


上面的圖只是一個忽略了一些細節的概念上的圖。如果細究,就要知道他們的inode 和block的組織方式


現在我們來看看硬連結的情況中,inode和block組織方式

我們假設/home/A的 inode 編號為5     /home/B的 inode 編號為6

而 記錄 B中x的資料block 分佈的 inode編號為7 
那麼硬連結的情況如下






那符號連結也就容易理解了。如圖


根據上面的兩幅圖,我們總結一下:

    如果建立 /home/A/x 到/home/B/x的硬連結,那麼A中的x目錄項的i節點是指向  指向B中x的實際內容的i節點的
    如果建立/home/A/x 到/home/B/x的符號連結,那麼A中的x目錄項的i節點是指向  指向B中/home/B/x的i節點的

相關推薦

圖解符號連結連結區別i節點介紹

我們先來介紹一些linux檔案系統的知識。我們知道 linux中一個檔案具有很多屬性,uid,gid,檔案大小,訪問許可權,檔案內容block位置等。這些內容是和檔案中的實際內容分開放的。檔案的屬性是放在叫做 i節點的結構中 ,而檔案內容則放在資料塊中。這個 inode(i

linux中軟連結連結區別與小結

首先我們需要了解linux下硬連結以及軟連線的基本概念. 硬連結:新建的檔案是已經存在的檔案的一個別名,當原檔案刪除時,新建的檔案仍然可以使用. 軟連結:也稱為符號連結,新建的檔案以“路徑”的形式來表示另一個檔案,和Windows的快捷方式十分相似,新建的軟連結可以指向不存在的檔案. 下

Linux檔案系統簡介連結連結區別

Linux有著極其豐富的檔案系統,大體可分為如下幾類: 網路檔案系統:如nfs、cifs等; 磁碟檔案系統:如ext3、ext4等; 特殊檔案系統:如prco、sysfs、ramfs、tmpfs等; 一、Linux系統中一切皆檔案(除程序以外) Linux系統的頂層目錄結構如下 1 /

用實踐讓你明白“軟連結連結”的區別

一、原理 在Linux的檔案系統中,儲存在磁碟分割槽中的檔案不管是什麼型別都給它分配一個編號,稱為索引節點號inode 。 軟連線,其實就是新建立一個檔案,這個檔案就是專門用來指向別的檔案的(那就和windows 下的快捷方式的那個檔案有很接近的意味)。軟連結產生的是一個新的檔案,但

linux下的軟連結連結具體操作區別

簡單的看個圖,看下它們軟連結和硬連結和block以及inode的區別 根據下面的步驟來進行實踐 一、檔案連結與複製 (hard link) 1、使用vi a建立一個檔案a 2、使用l

Linux中軟連線(Symbolic Link)連結(Hard Link)的區別(轉)

Linux連結分兩種,一種被稱為硬連結(Hard Link),另一種被稱為符號連結(Symbolic Link)。預設情況下,ln命令產生硬連結。--硬連線硬連線指通過索引節點來進行連線。在Linux的檔案系統中,儲存在磁碟分割槽中的檔案不管是什麼型別都給它分配一個編號,稱為索引節點號(Inode Inde

符號連結檔案連結檔案

□□實驗6-11.針對符號連線檔案和硬連線檔案。 測試以下函式,分析其執行過程並給出結論。 link(),unlink(),symlink(),readlink(),stat(),lstat() 1.Stat();lstat(); 分析:b檔案為a檔案的軟連線檔案,從

Linux中軟連線連結區別

什麼是連結? 連結簡單說實際上是一種檔案共享的方式,是 POSIX 中的概念,主流檔案系統都支援連結檔案。 它是用來幹什麼的? 你可以將連結簡單地理解為 Windows 中常見的快捷方式(或是 OS X 中的替身),Linux 中常用它來解決一些庫版本的問題,通常也

Linux檔案軟連結連結的聯絡區別

在Linux的檔案系統中,儲存在磁碟分割槽中的檔案不管是什麼型別都給它分配一個編號,稱為索引節點號inode 。軟連線,其實就是新建立一個檔案,這個檔案就是專門用來指向別的檔案的(那就和windows 下的快捷方式的那個檔案有很接近的意味)。軟連結產生的是一個新的檔案,但這個

詳解Linux系統中軟連線連結區別與聯絡

Linux 系統中有軟連線和硬連結兩種特殊的“檔案”。 其中軟連線實際上可以看作是Windows中的快捷方式,而硬連結則可以看作類似於一個檔案的 “指標”(也不完全相同) 。 建立方法都很簡單: 1. 軟連線(符號連結) ln -s   source  target  2

linux 軟連線連結區別

4點不同 : (1)軟連線可以 跨檔案系統 ,硬連線不可以 。實踐的方法就是用共享檔案把windows下的 aa.txt文字文件連線到linux下/root目錄 下 bb,cc . ln -s aa.txt /root/bb 連線成功 。ln aa.txt /root/bb

Linux下連結檔案的區別——軟連結連結

部落格搬家了,最近同時更新,沒準什麼時候就完全搬走了-_- http://blog.just666.cn 這個是新部落格地址,希望大家多多關照 0X00 什麼是連結檔案 Linux中的連結檔案就相當於是Windows中的快捷方式,通過連結檔案可

HDFS符號連結連結

前言 初看這個標題,可能很多人會心生疑問:符號連結和硬連結是什麼意思?這些概念不是在Linux作業系統下才有的嘛,HDFS目前也有?當然大家可能還會有其他疑問,沒關係,在後面的內容講述中答案會一一揭曉。歸納起來一句話:不管是符號連結還是硬連結,它們本質上都

軟連線連結的區別是什麼?

軟連線和硬連結的區別: 兩個檔案若互為對方的硬連結,則這兩個檔案指向同一個 inode,如果刪除了其中一個,對另外一個沒有影響。 每增加一個硬連結,inode 節點上的連結數增加一,每刪除一個硬連結,inode 節點上的連結數減一,直到為 0,inode 節點和對應的資

LInux軟連結連結的建立、刪除

軟連結:     1.以路徑的形式存在     2.軟連結可以跨檔案系統,硬連結不可以     3.軟連結可以對一個不存在的檔名進行連結     4.軟連結可以對

陣列連結串列集合的區別應用場景以及堆棧的區別

陣列和集合的區別: 1.陣列的長度固定的,超過長度時,只能建立一個新的陣列,並把舊的陣列的值傳進去方可; 而集合的長度是動態不固定的。 2.陣列的儲存型別是單一的,同一陣列只能儲存同一資料型別的資料。 而集合可以儲存多鍾資料型別的資料。 3.陣列只能通過下標來訪

Linux軟連結連結簡單指引

在Linux中的連結方式有兩種,軟連結和硬連結。 軟連結的方式 link -s /home/hadoop/aaa.txt /home/aaa.txt 這種連結方式,相當於建立一個快捷方式,我可以使

Linux檔案系統----軟連結連結

更多Linux檔案系統知識:Linux檔案系統-----基礎IO Linux檔案系統的認知 1、Linux系統下一切皆檔案 現代作業系統為解決資訊能獨立於程序之外被長期儲存引入了檔案,檔案作為程序建立資訊的邏輯單元可被多個程序併發使用。在 UNIX 系統中,作業

linux軟連結連結

                簡而言之:軟連結相當於windows中的快捷方式硬連結相當於一個災備系統,資料存放在兩處,與複製不同的是兩處之間存在同步機制,一處資料的改變會實時同步到另一處,另外一處資料如果被刪除了,不會影響到另一處的資料.下面是詳細的介紹: 存在兩種不同型別的連結,軟連結和硬連結。修改其中

Linux學習筆記 軟連結連結

Linux 中,“everything is file”。接下來給大家介紹 linux 如何通過連結,達到節省磁碟空間、共享檔案等目的。連結檔案有兩種方式,軟連結(soft link)和硬連結(hard link)。 考慮這幾個場景。 1) 假如你在 Linux 系統中有一堆媒體檔案,你想將他們分