首頁  >  文章  >  運維  >  linux inode是什麼

linux inode是什麼

藏色散人
藏色散人原創
2023-04-20 10:18:212656瀏覽

linux inode是用來識別作業系統的檔案的一個特徵描述;linux系統為每一個檔案都指派了一個inode編號,這個編號中記錄了檔案相關的一些元訊息,透過這些元訊息可以用來唯一標識一個文件。

linux inode是什麼

本教學操作環境:linux5.9.8系統、Dell G3電腦。

linux inode是什麼?

要了解 Linux 作業系統上的 inode 前,我們先來談談 Linux作業系統上的檔案。對 Linux 作業系統而言,[一切皆檔案]。而檔案是無法獨立於儲存媒體(這裡指的是實體磁碟或記憶體、快閃記憶體等)存在的,一切作業系統上的檔案都無時無刻不在和儲存媒體打交道。

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

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

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

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

[root@server ~]# sysctl -a | grep inode
fs.inode-nr = 70212 21785

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

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

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

你可以透過ls -i 查看任何一個檔案的inode 編號

[root@server ~]# ls -i logrotate.man
8986710 logrotate.man

而要檢視檔案的元訊息,你需要使用stat {filename}

[root@server ~]# stat logrotate.man
  文件:"logrotate.man"
  大小:18033      块:40         IO 块:4096   普通文件
设备:fd00h/64768d Inode:8986710     硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2021-11-25 03:20:39.497330998 -0500
最近更改:2021-11-24 04:38:17.781399647 -0500
最近改动:2021-11-24 04:38:17.797398907 -0500
创建时间:-

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

  • 大小:18033: 檔案的位元組數。這個檔案佔據的磁碟空間為 18033 Bytes

  • 區塊:40:使用的 block(資料區塊)。這個檔案使用了40 個實體區塊

  • 權限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root):文件的權限及屬組資訊。該文件為普通文件,權限為0644,用戶和屬組都為root

  • #最近訪問:2021-11-25 03:20:39.497330998 -0500:即atime(最後一次存取該檔案的時間)

  • 最近更改:2021-11-24 04:38:17.781399647 -0500:即mtime(最後一次修改檔案的時間)

  • #最近改動:2021-11-24 04:38:17.797398907 -0500:即ctime(最後一次改變檔案(權限、屬群組)的時間)

#事實上,剛剛透過stat logrotate.man 中還包括一個字段硬連結:1。

為什麼硬連結會出現在 inode 訊息中?

一般情況下,作業系統中一個檔案對應一個 inode ,但是這種規則卻不適用於 硬連結 檔案。蓋因Linux作業系統上,允許多個檔案指向同一個 inode 編號。

硬連結場景下,可以使用不同的檔案名稱存取同一個檔案的內容,對檔案內容、屬性等的修改會傳遞到其他檔案。但刪除一個連結文件,並不影響其他文件的存取。

例如,建立 logrotate.man 的硬連結檔案

[root@server ~]# ln logrotate.man logrotate.man.1
[root@server ~]# ls -i logrotate.man*
8986710 logrotate.man  8986710 logrotate.man.1
# 可以看到,建立了硬链接的文件共用了同一个 inode 编号
[root@server ~]# stat logrotate.man
  文件:"logrotate.man"
  大小:18033      块:40         IO 块:4096   普通文件
设备:fd00h/64768d Inode:8986710     硬链接:2
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2021-11-25 03:20:39.497330998 -0500
最近更改:2021-11-24 04:38:17.781399647 -0500
最近改动:2021-12-05 01:22:05.716611059 -0500
创建时间:-

建立硬連結後,透過 stat 可以看到 硬連結的數量變成 2 了。

這時候我們刪除原始的連結文件,查看連結後的文件內容

[root@server ~]# rm -rf logrotate.man
[root@server ~]# tail -n 1 logrotate.man.1
Linux                                 Wed Nov 5 2002                                                                                                                 LOGROTATE(8)
[root@server ~]# stat logrotate.man.1
  文件:"logrotate.man.1"
  大小:18033      块:40         IO 块:4096   普通文件
设备:fd00h/64768d Inode:8986710     硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2021-12-05 01:25:50.701384256 -0500
最近更改:2021-11-24 04:38:17.781399647 -0500
最近改动:2021-12-05 01:25:41.544800473 -0500
创建时间:-

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

出現這種情況的原因在於,硬連結實際上是對檔案增加了一個索引,這個索引指向檔案的 inode 編號。當硬連結的數量大於 1 時,表示該檔案除去自身外,還有多個硬連結。當硬連結的數量等於 0 時,此時作業系統已經沒有任何檔案指向該 inode,也就是作業系統會回收 inode。

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

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

[root@server ~]# df -ih
文件系统                Inode 已用(I) 可用(I) 已用(I)% 挂载点
devtmpfs                 121K     390    121K       1% /dev
tmpfs                    124K       1    124K       1% /dev/shm
tmpfs                    124K     522    124K       1% /run
tmpfs                    124K      16    124K       1% /sys/fs/cgroup
/dev/mapper/centos-root  4.0M    129K    3.9M       4% /
/dev/vda1                512K     332    512K       1% /boot
tmpfs                    124K       1    124K       1% /run/user/0

推薦學習:《linux影片教學

#

以上是linux inode是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn