您好,登錄后才能下訂單哦!
今天小編給大家分享一下linux inode表示的是什么的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
linux inode是用來標識操作系統的文件的一個特征描述;linux系統為每一個文件都分配了一個inode編號,這個編號中記錄了文件相關的一些元信息,通過這些元信息可以用來唯一標識一個文件。
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 inode表示的是什么”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。