當前位置:首頁 » 操作系統 » linux文件inode

linux文件inode

發布時間: 2023-05-29 16:27:07

1. Inode及文件元數據

理解inode,要從文件儲存說起。

文件存儲在硬碟上,硬碟的最小存儲單位叫做「扇區」(Sector)。每個扇區儲存512位元組(相當於0.5KB)。

操作系統讀取硬碟的時候,不會一個個扇區的讀取,這樣效率太低,而是一次性連續讀取多個扇區,即一次性讀取一個「塊」(block)。這種由多個扇區組成的「塊」,是文件存取的最小單位。「塊」的大小,最常見的是4KB,即連續八個sector組成一個block。

文件數據都儲存在「塊」中,那麼很顯然,我們還必須找到一個地方儲存文件的「元信息」,比如文件的創建者、文件的創建日期、文件的大小等等。這種儲存文件元信息的區域就叫做inode,中文譯名為」索引節點「。

inode包含文件的元信息,具體來說有以下內容:
•Size 文件的位元組數
•鍵灶Uid 文件擁有者的User ID
•Gid 文件的Group ID
•Access 文件的讀、寫、執行許可權
•文件的時間戳,共有三個:
•Change 指inode上一次變動的時間
•Modify 指文件內容上一次變動的時間
•Access 指文件上一次打開的時間

•Links 鏈接數,即有多少文件名指向這個inode
•Inode 文件數據block的位置
•Blocks 塊數
•IO Blocks 塊大小
•Device 設備號碼

總之,除了文件名以外的所有文件信息,都存在inode之中。至於為什麼沒有文件名,下文會有詳細羨亮沒解釋。

inode也會消耗硬碟空間,所以硬碟格式化的時候,操作系統自動將硬碟分成兩個區域。一個是數據區,存放文件數據;另一個是inode區(inode table),存放inode所包含的信息。

每個inode節點的大小,一般是128位元組或256位元組。inode節點的總數,在格式化時就給定,一般是每1KB或每2KB就設置一個inode。假定在一塊1GB的硬碟中,每個inode節點的大小為128位元組,每1KB就設置一個inode,那麼inode table的大小就會達到128MB,占整塊硬碟的12.8%。

查看每個硬碟分區的inode總數和已經使用的數量,可以使用df命令。
df -i

由於每個文件都必須有一個inode,因此有可能發生inode已經用光,但是硬碟還未存滿的情況。這時,就無法在硬碟上創建新文件。案例>> http://zyan.cc/post/295/
使用df -i查看磁碟inode 使用情況。

查看每個inode節點的大小,可以用如下命令:
mpe2fs -h /dev/sda1| grep "Inode size"

每個inode都有一個號碼,操作系統用inode號碼來識別不同的文件。Unix/linux系統內部不使用文件名,而使用inode號碼來識別文件。對於系統來說,文件名只是inode號碼便於識別的別稱或者綽號。表面上,用戶通過文件名,打開文件。實際上,系統內部這個過程分成三步:首兄納先,系統找到這個文件名對應的inode號碼;其次,通過inode號碼,獲取inode信息;最後,根據inode信息,找到文件數據所在的block,讀出數據。

使用ls -i命令,可以看到文件名對應的inode號碼:

Unix/Linux系統中,目錄(directory)也是一種文件。打開目錄,實際上就是打開目錄文件。

目錄文件的結構非常簡單,就是一系列目錄項(dirent)的列表。每個目錄項,由兩部分組成:所包含文件的文件名,以及該文件名對應的inode號碼。

ls命令只列出目錄文件中的所有文件名,ls -i命令列出整個目錄文件,即文件名和inode號碼:

如果要查看文件的詳細信息,就必須根據inode號碼,訪問inode節點讀取信息。目錄文件的讀許可權(r)和寫許可權(w),都是針對目錄文件本身。由於目錄文件內只有文件名和inode號碼,所以如果只有讀許可權,只能獲取文件名,無法獲取其他信息,因為其他信息都儲存在inode節點中,而讀取inode節點內的信息需要目錄文件的執行許可權(x)。

一般情況下,文件名和inode號碼是」一一對應」關系,每個inode號碼對應一個文件名。但是,Unix/Linux系統允許,多個文件名指向同一個inode號碼。這意味著,可以用不同的文件名訪問同樣的內容;對文件內容進行修改,會影響到所有文件名;但是,刪除一個文件名,不影響另一個文件名的訪問。這種情況就被稱為」硬鏈接」(hard link)。

運行上面這條命令以後,源文件與目標文件的inode號碼相同,都指向同一個inode。inode信息中有一項叫做」鏈接數」,記錄指向該inode的文件名總數,這時就會增加1。

反過來,刪除一個文件名,就會使得inode節點中的」鏈接數」減1。當這個值減到0,表明沒有文件名指向這個inode,系統就會回收這個inode號碼,以及其所對應block區域。

這里順便說一下目錄文件的」鏈接數」。創建目錄時,默認會生成兩個目錄項:」.」和」..」。前者的inode號碼就是當前目錄的inode號碼,等同於當前目錄的」硬鏈接」;後者的inode號碼就是當前目錄的父目錄的inode號碼,等同於父目錄的」硬鏈接」。所以,任何一個目錄的」硬鏈接」總數,總是等於2加上它的子目錄總數(含隱藏目錄)。

除了硬鏈接以外,還有一種特殊情況。

文件A和文件B的inode號碼雖然不一樣,但是文件A的內容是文件B的路徑。讀取文件A時,系統會自動將訪問者導向文件B。因此,無論打開哪一個文件,最終讀取的都是文件B。這時,文件A就稱為文件B的」軟鏈接」(soft link)或者」符號鏈接(symbolic link)。

這意味著,文件A依賴於文件B而存在,如果刪除了文件B,打開文件A就會報錯:」No such file or directory」。這是軟鏈接與硬鏈接最大的不同:文件A指向文件B的文件名,而不是文件B的inode號碼,文件B的inode」鏈接數」不會因此發生變化。

由於inode號碼與文件名分離,這種機制導致了一些Unix/Linux系統特有的現象。
1.當文件名包含特殊字元導致無法正常刪除時,可直接刪除inode節點。
2.移動文件或重命名文件,只是改變文件名,不影響inode號碼。
3.打開一個文件以後,系統就以inode號碼來識別這個文件,不再考慮文件名。因此,通常來說,系統無法從inode號碼得知文件名。

第3點使得軟體更新變得簡單,可以在不關閉軟體的情況下進行更新,不需要重啟。因為系統通過inode號碼識別運行中的文件,不通過文件名。更新的時候,新版文件以同樣的文件名,生成一個新的inode,不會影響到運行中的文件。等到下一次運行這個軟體的時候,文件名就自動指向新版文件,舊版文件的inode則被回收。

部分引自: http://www.ruanyifeng.com/blog/2011/12/inode.html

2. linux系統文件鏈接是什麼意思

Linux 文件系統最重要的特點之一是它的文件鏈接。鏈接是對文件的引用,這樣您可以讓文件在文件系統中多處被看到。不過,在 Linux 中,鏈接可以如同原始文件一樣來對待。鏈接可以與普通的文件一樣被執行、編輯和訪問。對系統中的其他應用程序而言,鏈嫌大接就是它所對應的原始文件。當您通過鏈接對文件進行編輯時,您編輯的實際上是原始文件。鏈接不是副本。有兩種類型的鏈接:硬鏈接和符號鏈接。
硬鏈接 只能引用同一文件系統中的文件。它引用的是文件在文件系統中的物理索引(也稱為 inode)。當您移動或刪除原始文件時,硬鏈接不會被破壞,因為它所引用的是文件的物理數據而不是文件在文件結構中的位置。硬鏈接的文件不需要用戶有訪問原始文件的許可權,也不會顯示原始文件的位置,這樣有助於文件的安全。如果您刪除的文件有相應的硬鏈接,那麼這個文件依然會保留,直到所有對它的引用都被刪除。
符號鏈接 是一個指針,指向文件在文件系統中的位置。符號鏈接可以跨文件系統,甚至可以指向遠程文件系統中的文件。符號鏈接只是指明了原始文件的位置,用戶需要對原始文件的位置有訪問許可權才可以使用鏈接。如果原始文件被刪除,所有指向它的符號鏈接也就都被破壞了。它們會指向文件系統中並不存在的一個位置。兩種鏈接都可以通過命令者叢 ln 來創建首者櫻。ln 默認創建的是硬鏈接。使用 -s 開關可以創建符號鏈接。
符號鏈接與硬鏈接有什麼區別?
簡單的說:硬連接記錄的是目標的 inode,符號連接記錄的是目標的 path。
軟連接就像是快捷方式,而硬連接就像是備份!符號連接可以做跨分區的 link;而 硬連接由於 inode 的緣故,只能在本分區中做 link.所以,符號連接的使用頻率要高的多。

3. linux -i [路徑]可以獲取一個數字,這個數字是什麼用的, 叫什麼

這個數字 英文是inode 中文的話是文件系統索引節
它是linux文件系統的重要部分 類似書本的目錄索引
linux -i 出來的數字 就是inode編號
每個文件和文件夾都有各自的inode號 這些就構成了inode表 (linux 一切皆文件)
inode表 存儲了 文件大小 文件在硬碟里的物理位置 文件的許可權 等信息
dentry表是目錄表 存儲目錄文件對應的文件inode標號 還包括父目錄 子目錄 子文件等

比如 打開文件時 得查dentry找到對應的 inode編號 ,再通過inode表 取到物理位置 最後 去物理存儲把文件內容讀取出來

我這省略了 super block ,data block 等 有興趣自己取了解一下

4. Linux中的inode到底是什麼

要了解 Linux 操作系統上的 inode 前,我們先來說說 Linux操作系統上的文件。對於 Linux 操作系統而言,橋備[一切皆文件]。而文件是無法獨立於存儲介質(這里指的是物理磁碟或內存、快閃記憶體等)存在的,一切操作系統上的文件都無時無刻不在和存儲介質打交道。

例如,讀取文件時需要將文件從磁碟中載入到內存中,當文件操作結束後,文件又會被存儲到磁碟中。那麼,既然文件要被存儲到磁碟中,而磁碟是有容量限制的,那麼也就是說磁碟上能存放的物理文件的數量是有限的。

如果你已經理解了這一個觀點,那麼恭喜你,你大體上已經知道了 inode 是干什麼的。

沒錯, inode 是用來標識操作系統的文件的一個特徵描述,而且操作系統上的 inode 並非無窮無盡,通常在你安裝操作系統後,系統上的 inode 數量就已經確定了下來(不過,你可以動態修改 inode 的數量)。

你可以通過 sysctl -a 查詢系統上的 inode 數量。

如上, fs.inode-nr 中的 70212 標識當前操作系統已分配的 inode 數量;21785 表示單前操作系統剩餘空閑的 inode 數量

剛握耐剛說過, inode 是用來標識文件的一個特徵,這是為什麼呢?

Linux 系統為每一個文件都分配了一個 inode 編號,這個編號中記錄了文件相關的一些元信息,通過這些元信息可以用來唯一標識一個文件。

你可以通過 ls -i 查看任意一個文件的 inode 編號

而要查看文件的元信息,你需要使用 stat {filename}

如上,即為一個文件的 inode 信息。這其中包含:

事實上,剛剛通過 stat logrotate.man 中還包括一個欄位 硬鏈接:1 。

為什麼硬鏈接會出現在 inode 信息中?

一般情況下,操作系統中一個文件對應一個 inode ,但是這種規則卻不適用於 硬鏈接 文件。蓋因Linux操作系統上,允許多個文件指向同一個 inode 編號。(參考自: 理解inode - 阮一峰的網路日誌 (ruanyifeng.com) )

硬鏈接場景下,可以使用不同的文件名訪問同一個文件的內容,對文件內容、屬性等的修改會傳遞到其他文件。但刪除一個鏈接文件,並不影響其他文件的訪問。

例如,建立 logrotate.man 的硬鏈接文件

建立硬鏈接後,通過 stat 可以看到 硬鏈接的數量變為 2 了。

這個時候我們刪除原始的鏈接文件,查看鏈接後的文件內容

刪除硬鏈接的原始文件後,可以成功讀取鏈接後的文件內容,此時,硬鏈接數量又變為了 1。

出現這種情況的原因在於,硬鏈接實際上是對文件增加了一個索引,這個索引指向文件的 inode 編號。當硬鏈接的數量大於 1 時,說明該文件除去自身外,還有多個硬鏈接。當硬鏈接的數量等於 0 時,此時操作系統已經沒有任何文件指向該 inode ,也即是操作系統會回收 inode 。

事實上,每刪除一個文件,是對該文件硬鏈接數的「減一」操作。當文件的硬鏈接數歸 0 時,這個文件會被操作系統徹底清除掉。

最後,通常情況下,操作系統分配的 inode 數量是完全夠用的段消春,但出於一些程序或人為的意外可能會導致操作系統的 inode 溢出,你可以通過 df -ih 查看系統分區下 inode 的使用情況以便及時作出應對措施。

5. linux系統中怎麼查目錄的inode號

1、首先登陸到Linux主機。

2、使用命令CD切換工作目錄,示例:cdwwwdoc。

3、兄梁按下回車鍵,即可成功執行命令,切換工作目錄。

4、兆絕使用命令ll可以列出當前目錄下的所有文件。

5、查看其中羨猜運某個文件的詳細信息(包括inode),可以使用stat命令,示例:statfolder1即可。

6. Linux--常見問題:修改磁碟 inode 數量

node這個詞大多資料都是譯為索引節點,在ext3文件系統,調整磁碟的inode number。這里只是調整inode number這個參數,如果想調整inode size或是blocksize等可以具體查看mkfs.ext3命令。

磁碟 inode 一般用於大量小文件的存儲中消耗較快

#>umount /data0

#>mkfs.ext3 /dev/sda6 -N 」inode節點數春睜「

#>vi /etc/fstab

/dev/sda6               /data0                  ext3    defaults        1 2

#>mount -a

#>mpe2fs -h /dev/sda6 | grep node

[注意]調整inode數會格式化磁碟,執行前應確定磁碟上沒有重要數據或是先備份數據

mkfs.ext3的與inode相關的參數介紹

       -i bytes-per-inode

              Specify the bytes/inode ratio.   mke2fs  creates  an  inode  for

              every  bytes-per-inode  bytes  of space on the disk.  The larger

              the bytes-per-inode ratio, the fewer  inodes  will  be  created.

              This  value generally shouldn?? be smaller than the blocksize of

              the filesystem, since then too many inodes  will  be  made.   Be

              warned  拿漏that is not possible to expand the number of inodes on a

              filesystem after it is created, so be careful deciding the  cor-

       消森爛       rect value for this parameter.

       -N number-of-inodes

              overrides the default calculation of the number of  inodes  that

              should  be  reserved  for  the filesystem (which is based on the

              number of blocks and the bytes-per-inode  ratio).   This  allows

              the user to specify the number of desired inodes directly.

7. Linux文件管理中VFS使用的inode是什麼

在 Linux 系統中,VFS(Virtual File System)是一個抽象層,它使得檔缺 Linux 內核能夠與多種文件系拿碧統進行交互行敏辯。VFS 使用 inode(Index Node)來管理文件系統中的文件和目錄。
inode 是一個數據結構,它存儲著文件或目錄的元數據信息,如文件大小、創建時間、許可權等。每個文件或目錄在文件系統中都對應一個 inode,而 inode 又與一個編號相關聯,這個編號就是 inode 的編號。
當文件或目錄被創建時,VFS 會為它分配一個 inode 編號,並且創建一個 inode 數據結構來存儲元數據信息。當文件或目錄被訪問時,VFS 會根據 inode 編號來查找對應的 inode 數據結構,從而獲取文件或目錄的信息。
因此,inode 是 VFS 在 Linux 系統中管理文件和目錄的一種重要方式。它能夠幫助 VFS 快速查找文件或目錄的信息,從而提高文件系統的性能。

8. inode是什麼意思在Linux中有什麼作用

在學習Linux運維的過程中,有很多知識是我們必須要了解和認識的,但也是最容易被人忽視的,比如inode。inode譯成中文就是索引節點,它是Linux/Unix文件系統的基礎,那麼Linux中什麼是inode?有什麼作用?具體請看下文:

在Linux中,inode是一個重要的概念,是理解Unix/Linux文件系統和磁碟儲肆胡存的基礎。

理解inode,要從文件儲存說起。

文件儲存在硬碟上,硬碟的最小存儲單位叫做扇區,每個扇區儲存512位元組,相當於0.5KB。

操作系統讀取磁碟的時候,不會一個一個扇區地讀取,這樣效率太低,而是一次性連續讀取多個扇區,即一次讀取一個塊。這種由多個扇區組成的塊,是文件存取的最小單位。塊的大小,最常見的是4KB,即連續八個sector組成一個block。

文件數據都存儲在塊中,很顯然,我們還必須找到一個地方儲存文件的元信息,比如文件的創建者、文件的創建日期、文件的大小等。這種儲存文件元信息的區域就叫做inode,中文譯名為索引節點。

每一個文件都有對應的inode,裡麵包含了與該文件有扒州關的一些信息。

接下來,我為大家簡述一下Linux文件系統通過i節點把文件的邏輯結構和物理結構轉換的工作過程:

Linux通過inode節點表將文件的邏輯結構和物理結構進行轉換。

inode節點是一個64位元組長的表,表中包含了文件的相關信息,其中有文件的大小、文件所有者、文件的存取許可方式以及文件的類型等重要信息。在inode節點表中最重要的內容裂此攔是磁碟地址表。在磁碟地址表中有13個塊號,文件將以塊號在磁碟地址表中出現的順序依次讀取相應的塊。

Linux文件系統通過把inode節點和文件名進行連接,當需要讀取該文件時,文件系統在當前目錄表中查找該文件名對應的項,由此得到該文件相對應的inode節點號,通過該inode節點的磁碟地址表把分散存放的文件物理塊連接成文件的邏輯結構。

熱點內容
struts2訪問方法 發布:2024-04-26 19:11:36 瀏覽:258
外文翻譯android 發布:2024-04-26 19:03:30 瀏覽:89
土金木配置怎麼樣 發布:2024-04-26 18:52:50 瀏覽:610
這台電腦如何訪問另一台電腦伺服器 發布:2024-04-26 18:51:08 瀏覽:628
怎麼快速了解電腦的配置 發布:2024-04-26 18:42:11 瀏覽:997
rsa加密演算法例子 發布:2024-04-26 18:40:29 瀏覽:243
thinkphp緩存關閉 發布:2024-04-26 18:19:32 瀏覽:96
linux信號捕捉 發布:2024-04-26 18:19:27 瀏覽:934
編譯有哪兩種模式 發布:2024-04-26 17:53:30 瀏覽:871
伺服器電腦上能用嗎 發布:2024-04-26 17:44:42 瀏覽:560