Linux i ノードは、オペレーティング システムでファイルを識別するために使用される特性記述です。Linux システムは各ファイルに i ノード番号を割り当て、この番号はファイルに関連するメタ情報を記録します。ファイルを一意に識別するために使用できます。
#このチュートリアルの動作環境: linux5.9.8 システム、Dell G3 コンピューター。
Linux i ノードとは何ですか?
Linux オペレーティング システムの i ノードを理解する前に、まず Linux オペレーティング システム上のファイルについて話しましょう。 Linux オペレーティング システムの場合、[すべてがファイルです]。ファイルはストレージ メディア (ここでは物理ディスク、メモリ、フラッシュ メモリなどを指します) から独立して存在することはできません。すべてのオペレーティング システム上のファイルは常にストレージ メディアを扱います。
たとえば、ファイルを読み取る場合、ファイルをディスクからメモリにロードする必要があり、ファイル操作が完了すると、ファイルはディスクに保存されます。ファイルはディスクに保存され、ディスクには容量制限があるため、ディスクに保存できる物理ファイルの数は制限されます。
この観点を理解できたなら、おめでとうございます。i ノードが何をするかは大体わかっているはずです。
はい、inode はオペレーティング システムを識別するために使用されるファイルの特徴的な記述であり、オペレーティング システム上の i ノードは無限ではありません。通常、システム上の i ノードの数は、オペレーティング システムがダウンしています (ただし、inode の数は動的に変更できます)。
sysctl -a を使用して、システム上の i ノードの数をクエリできます。
[root@server ~]# sysctl -a | grep inode fs.inode-nr = 70212 21785
上記のように、fs.inode-nr の 70212 は現在のオペレーティング システムによって割り当てられた i ノードの数を示し、21785 は以前のオペレーティング システムの残りの空き i ノードの数を表します
As I i ノードはファイルを識別するために使用される機能だと言いましたが、これはなぜでしょうか?
Linux システムは、各ファイルに i ノード番号を割り当てます。この番号には、ファイルに関連するメタ情報が記録されます。このメタ情報は、ファイルを一意に識別するために使用できます。
ls -i を使用してファイルの i ノード番号を表示できます。
[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 バイトです。
ブロック: 40: 使用済みブロック (データ ブロック)。このファイルは 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 には、次のフィールド ハード リンクも含まれています。
ハード リンクが i ノード情報に表示されるのはなぜですか?
一般に、1 つのファイルはオペレーティング システムの 1 つの i ノードに対応しますが、この規則はハード リンク ファイルには適用されません。 Linux オペレーティング システムでは、複数のファイルが同じ i ノード番号を指すことが許可されているためです。
ハード リンク シナリオでは、異なるファイル名を使用して同じファイルのコンテンツにアクセスでき、ファイルのコンテンツや属性などへの変更は他のファイルに転送されます。ただし、リンクされたファイルを削除しても、他のファイルへのアクセスには影響しません。
たとえば、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になります。
この状況が発生する理由は、ハード リンクが実際にファイルにインデックスを追加し、このインデックスがファイルの i ノード番号を指しているためです。ハード リンクの数が 1 より大きい場合、ファイルにはそれ自体に加えて複数のハード リンクがあることを意味します。ハード リンクの数が 0 に等しい場合、オペレーティング システムには i ノードを指すファイルがなくなり、オペレーティング システムは i ノードをリサイクルします。
実際には、ファイルが削除されるたびに、そのファイルへのハード リンクの数が 1 つずつ減ります。ファイル内のハード リンクの数が 0 に達すると、ファイルはオペレーティング システムによって完全にクリアされます。
最後に、通常の状況では、オペレーティング システムによって割り当てられた i ノードの数は完全に十分ですが、プログラムによっては、または人為的な事故により、オペレーティング システムの i ノード オーバーフローが発生する可能性があります。df -ih を通じてシステムを確認できます。パーティション内の i ノードの数を使用して、タイムリーな応答対策を講じることができます。
[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 iノードとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。