linux inode是用來標(biāo)識(shí)操作系統(tǒng)的文件的一個(gè)特征描述;linux系統(tǒng)為每一個(gè)文件都分配了一個(gè)inode編號(hào),這個(gè)編號(hào)中記錄了文件相關(guān)的一些元信息,通過這些元信息可以用來唯一標(biāo)識(shí)一個(gè)文件。
本教程操作環(huán)境:linux5.9.8系統(tǒng)、Dell G3電腦。
linux inode是什么?
要了解 Linux 操作系統(tǒng)上的 inode 前,我們先來說說 Linux操作系統(tǒng)上的文件。對(duì)于 Linux 操作系統(tǒng)而言,[一切皆文件]。而文件是無法獨(dú)立于存儲(chǔ)介質(zhì)(這里指的是物理磁盤或內(nèi)存、閃存等)存在的,一切操作系統(tǒng)上的文件都無時(shí)無刻不在和存儲(chǔ)介質(zhì)打交道。
例如,讀取文件時(shí)需要將文件從磁盤中加載到內(nèi)存中,當(dāng)文件操作結(jié)束后,文件又會(huì)被存儲(chǔ)到磁盤中。那么,既然文件要被存儲(chǔ)到磁盤中,而磁盤是有容量限制的,那么也就是說磁盤上能存放的物理文件的數(shù)量是有限的。
如果你已經(jīng)理解了這一個(gè)觀點(diǎn),那么恭喜你,你大體上已經(jīng)知道了 inode 是干什么的。
沒錯(cuò),inode 是用來標(biāo)識(shí)操作系統(tǒng)的文件的一個(gè)特征描述,而且操作系統(tǒng)上的 inode 并非無窮無盡,通常在你安裝操作系統(tǒng)后,系統(tǒng)上的 inode 數(shù)量就已經(jīng)確定了下來(不過,你可以動(dòng)態(tài)修改 inode 的數(shù)量)。
你可以通過 sysctl -a 查詢系統(tǒng)上的 inode 數(shù)量。
[root@server?~]#?sysctl?-a?|?grep?inode fs.inode-nr?=?70212?21785
如上,fs.inode-nr 中的 70212 標(biāo)識(shí)當(dāng)前操作系統(tǒng)已分配的 inode 數(shù)量;21785 表示單前操作系統(tǒng)剩余空閑的 inode 數(shù)量
剛剛說過, inode 是用來標(biāo)識(shí)文件的一個(gè)特征,這是為什么呢?
Linux 系統(tǒng)為每一個(gè)文件都分配了一個(gè) inode 編號(hào),這個(gè)編號(hào)中記錄了文件相關(guān)的一些元信息,通過這些元信息可以用來唯一標(biāo)識(shí)一個(gè)文件。
你可以通過 ls -i 查看任意一個(gè)文件的 inode 編號(hào)
[root@server?~]#?ls?-i?logrotate.man 8986710?logrotate.man
而要查看文件的元信息,你需要使用 stat {filename}
[root@server?~]#?stat?logrotate.man ??文件:"logrotate.man" ??大小:18033??????塊:40?????????IO?塊:4096???普通文件 設(shè)備:fd00h/64768d?Inode:8986710?????硬鏈接:1 權(quán)限:(0644/-rw-r--r--)??Uid:(????0/????root)???Gid:(????0/????root) 環(huán)境:unconfined_u:object_r:admin_home_t:s0 最近訪問:2021-11-25?03:20:39.497330998?-0500 最近更改:2021-11-24?04:38:17.781399647?-0500 最近改動(dòng):2021-11-24?04:38:17.797398907?-0500 創(chuàng)建時(shí)間:-
如上,即為一個(gè)文件的 inode 信息。這其中包含:
-
大小:18033: 文件的字節(jié)數(shù)。這個(gè)文件占據(jù)的磁盤空間為 18033 Bytes
-
塊:40:使用的 block(數(shù)據(jù)塊)。這個(gè)文件使用了 40 個(gè)物理塊
-
權(quán)限:(0644/-rw-r–r–) Uid:( 0/ root) Gid:( 0/ root):文件的權(quán)限及屬組信息。該文件為普通文件,權(quán)限為 0644,用戶和屬組都為 root
-
最近訪問:2021-11-25 03:20:39.497330998 -0500:即 atime(最后一次訪問該文件的時(shí)間)
-
最近更改:2021-11-24 04:38:17.781399647 -0500:即 mtime(最后一次修改文件的時(shí)間)
-
最近改動(dòng):2021-11-24 04:38:17.797398907 -0500:即 ctime(最后一次改變文件(權(quán)限、屬組)的時(shí)間)
事實(shí)上,剛剛通過 stat logrotate.man 中還包括一個(gè)字段 硬鏈接:1。
為什么硬鏈接會(huì)出現(xiàn)在 inode 信息中?
一般情況下,操作系統(tǒng)中一個(gè)文件對(duì)應(yīng)一個(gè) inode ,但是這種規(guī)則卻不適用于 硬鏈接 文件。蓋因Linux操作系統(tǒng)上,允許多個(gè)文件指向同一個(gè) inode 編號(hào)。
硬鏈接場(chǎng)景下,可以使用不同的文件名訪問同一個(gè)文件的內(nèi)容,對(duì)文件內(nèi)容、屬性等的修改會(huì)傳遞到其他文件。但刪除一個(gè)鏈接文件,并不影響其他文件的訪問。
例如,建立 logrotate.man 的硬鏈接文件
[root@server?~]#?ln?logrotate.man?logrotate.man.1 [root@server?~]#?ls?-i?logrotate.man* 8986710?logrotate.man??8986710?logrotate.man.1 #?可以看到,建立了硬鏈接的文件共用了同一個(gè)?inode?編號(hào) [root@server?~]#?stat?logrotate.man ??文件:"logrotate.man" ??大小:18033??????塊:40?????????IO?塊:4096???普通文件 設(shè)備:fd00h/64768d?Inode:8986710?????硬鏈接:2 權(quán)限:(0644/-rw-r--r--)??Uid:(????0/????root)???Gid:(????0/????root) 環(huán)境:unconfined_u:object_r:admin_home_t:s0 最近訪問:2021-11-25?03:20:39.497330998?-0500 最近更改:2021-11-24?04:38:17.781399647?-0500 最近改動(dòng):2021-12-05?01:22:05.716611059?-0500 創(chuàng)建時(shí)間:-
建立硬鏈接后,通過 stat 可以看到 硬鏈接的數(shù)量變?yōu)?2 了。
這個(gè)時(shí)候我們刪除原始的鏈接文件,查看鏈接后的文件內(nèi)容
[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???普通文件 設(shè)備:fd00h/64768d?Inode:8986710?????硬鏈接:1 權(quán)限:(0644/-rw-r--r--)??Uid:(????0/????root)???Gid:(????0/????root) 環(huán)境:unconfined_u:object_r:admin_home_t:s0 最近訪問:2021-12-05?01:25:50.701384256?-0500 最近更改:2021-11-24?04:38:17.781399647?-0500 最近改動(dòng):2021-12-05?01:25:41.544800473?-0500 創(chuàng)建時(shí)間:-
刪除硬鏈接的原始文件后,可以成功讀取鏈接后的文件內(nèi)容,此時(shí),硬鏈接數(shù)量又變?yōu)榱?1。
出現(xiàn)這種情況的原因在于,硬鏈接實(shí)際上是對(duì)文件增加了一個(gè)索引,這個(gè)索引指向文件的 inode 編號(hào)。當(dāng)硬鏈接的數(shù)量大于 1 時(shí),說明該文件除去自身外,還有多個(gè)硬鏈接。當(dāng)硬鏈接的數(shù)量等于 0 時(shí),此時(shí)操作系統(tǒng)已經(jīng)沒有任何文件指向該 inode,也即是操作系統(tǒng)會(huì)回收 inode。
事實(shí)上,每刪除一個(gè)文件,是對(duì)該文件硬鏈接數(shù)的「減一」操作。當(dāng)文件的硬鏈接數(shù)歸 0 時(shí),這個(gè)文件會(huì)被操作系統(tǒng)徹底清除掉。
最后,通常情況下,操作系統(tǒng)分配的 inode 數(shù)量是完全夠用的,但出于一些程序或人為的意外可能會(huì)導(dǎo)致操作系統(tǒng)的 inode 溢出,你可以通過 df -ih 查看系統(tǒng)分區(qū)下 inode 的使用情況以便及時(shí)作出應(yīng)對(duì)措施。
[root@server?~]#?df?-ih 文件系統(tǒng)????????????????Inode?已用(I)?可用(I)?已用(I)%?掛載點(diǎn) 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
推薦學(xué)習(xí):《linux視頻教程》