Linux中inode值是什麼?

weixin_34377065發表於2011-07-29
inode 譯成中文就是索引節點。每個儲存裝置或儲存裝置的分割槽(儲存裝置是硬碟、軟盤、U盤 ... ... )被格式化為檔案系統後,應該有兩部份,一部份是inode,另一部份是Block,Block是用來儲存資料用的。而inode呢,就是用來儲存這些數 據的資訊,這些資訊包括檔案大小、屬主、歸屬的使用者組、讀寫許可權等。inode為每個檔案進行資訊索引,所以就有了inode的數值。作業系統根據指令, 能通過inode值最快的找到相對應的檔案。

做個比喻,比如一本書,儲存裝置或分割槽就相當於這本書,Block相當於書中的每一頁,inode 就相當於這本書前面的目錄,一本書有很多的內容,如果想查詢某部份的內容,我們可以先查目錄,通過目錄能最快的找到我們想要看的內容。雖然不太恰當,但還是比較形象。

當我們用ls 檢視某個目錄或檔案時,如果加上-i 引數,就可以看到inode節點了;比如我們前面所說的例子;

[root@localhost ~]# ls -li lsfile.sh

2408949 -rwxr-xr-x 1 root root 7 04-21 12:47 lsfile.sh

lsfile.sh 的inode值是 2408949 ; 檢視一個檔案或目錄的inode,要通過ls 命令的的 -i引數。

2.10 inode 相同的檔案是硬連結檔案;

在Linux 檔案系統中,inode值相同的檔案是硬連結檔案,也就是說,不同的檔名,inode可能是相同的,一個inode值可以對應多個檔案。理解連結檔案並不難,看看例子就會了。在Linux中,連結檔案是通過ln工具來建立的。

2.11 建立硬連結,硬連結和原始檔關係;

用ln 建立檔案硬連結的語法:

# ln 原始檔 目標檔案

下面我們舉一個例子,在這個例子中,我們要為sun.txt 建立其硬連結sun002.txt。然後看一下sun.txt和sun002.txt的屬性的變化;

[root@localhost ~]# ls -li sun.txt 注:檢視sun.txt的屬性;

2408263 -rw-r--r-- 1 root root 29 04-22 21:02 sun.txt 注:這是sun.txt的屬性;

[root@localhost ~]# ln sun.txt sun002.txt 注:我們通過ln 來建立sun.txt的硬連結檔案sun002.txt

[root@localhost ~]# ls -li sun* 注:我們列一下sun.txt 和sun002.txt

2408263 -rw-r--r-- 2 root root 29 04-22 21:02 sun002.txt

2408263 -rw-r--r-- 2 root root 29 04-22 21:02 sun.txt

我們可以看到sun.txt在沒有建立硬連結檔案sun002.txt的時候,其連結個數是1(也就是-rw-r--r--後的那個數值),建立了硬連結 sun002.txt建立後,這個值變成了2。也就是說,我們每次為sun.txt建立一個新的硬連結檔案後,其硬連結個數都會增加1。

inode值相同的檔案,他們的關係是互為硬連結的關係。當我們修改其中一個檔案的內容時,互為硬連結的檔案的內容也會跟著變化。如果我們刪除互為硬連結 關係的某個檔案時,其它的檔案並不受影響。比如我們把sun.txt刪除後,我們還是一樣能看到sun002.txt的內容,並且sun02.txt仍是 存在的。

可以這麼理解,互為硬連結關係的檔案,他們好象是克隆體,他們的屬性幾乎是完全一樣;

下面的例子,我們把sun.txt刪除,然後我們看一下sun002.txt 是不是能看到其內容。

[root@localhost ~]# rm -rf sun.txt

[root@localhost ~]# more sun002.txt

注意:硬連結不能為目錄建立,只有檔案才能建立硬連結。

2.12 軟連結的建立,及軟接與原始檔的關係;

建立軟連結(也被稱為符號連結)的語法;

# ln -s 源文檔案或目錄 目標檔案或目錄

軟連結也叫符號連結,他和硬連結有所不同,軟連結檔案只是其原始檔的一個標記。當我們刪除了原始檔後,連結檔案不能獨立存在,雖然仍保留檔名,但我們卻不能檢視軟連結檔案的內容了。

[root@localhost ~]# ls -li linuxsir001.txt

2408274 -rw-r--r-- 1 root root 29 04-22 21:53 linuxsir001.txt

[root@localhost ~]# ln -s linuxsir001.txt linuxsir002.txt

[root@localhost ~]# ls -li linuxsir001.txt linuxsir002.txt

2408274 -rw-r--r-- 1 root root 29 04-22 21:53 linuxsir001.txt

2408795 lrwxrwxrwx 1 root root 15 04-22 21:54 linuxsir002.txt -> linuxsir001.txt

解釋

上面的例子,首先我們檢視 linuxsir001.txt 的屬性,比如inode 、所屬檔案種類、建立或修改時間等... ...我們來對比一下:

首先 對比一下節點:兩個檔案的節點不同;

其次 兩個檔案的歸屬的種類不同 linuxsir001.txt是-,也就是普通檔案,而linuxsir002.txt 是l,它是一個連結檔案;

第三 兩個檔案的讀寫許可權不同 linuxsir001.txt 是rw-r--r-- ,而linuxsir002.txt的讀寫許可權是 rwxrwxrwx

第三 兩者的硬連結個數相同;都是1

第四 兩檔案的屬主和所歸屬的使用者組相同;

第五 修改(或訪問、建立)時間不同;

我們還注意到了linuxsir002.txt 後面有一個標記 ->,這表示linuxsir002.txt 是linuxsir001.txt的軟連結檔案。

值得我們注意的是:當我們修改連結檔案的內容時,就意味著我們在修改原始檔的內容。當然原始檔的屬性也會發生改變,連結檔案的屬性並不會發生變化。當我們 把原始檔刪除後,連結檔案只存在一個檔名,因為失去了原始檔,所以軟連結檔案也就不存在了。這一點和硬連結是不同的;

[root@localhost ~]# rm -rf linuxsir001.txt 注:刪除linuxsir001.txt

[root@localhost ~]# ls -li linuxsir002.txt 注:檢視linuxsir002 的屬性;

2408795 lrwxrwxrwx 1 root root 15 04-22 21:54 linuxsir002.txt -> linuxsir001.txt

[root@localhost ~]# more linuxsir002.txt 注:檢視linuxsir002.txt的內容;

linuxsir002.txt: 沒有那個檔案或目錄 注:得到提示,linuxsir002.txt不存在。

上面的例子告訴我們,如果一個連結檔案失去了源,就意味著他已經不存在了;

我們可以看到軟連結檔案,其實只是原始檔的一個標記,當原始檔失去時,他也就是存在了。軟連結檔案只是佔用了inode來儲存軟連結檔案屬性等資訊,但檔案儲存是指向原始檔的。

軟體連結,可以為檔案或目錄都適用。無論是軟連結還是硬連結,都可以用rm來刪除。rm工具是通用的。

相關文章