次のコマンドを実行すると:
find / -inum 12582925
同じ番号が割り当てられている異なるマウントされたファイルシステム(別のパーティション)にある2つのファイルを一覧表示することは可能ですか?単一のファイルシステムまたはマウントされたすべてのファイルシステムで、inode番号は一意ですか?
答え1
ノード番号は単一のファイルシステムでのみ一意です。すぐに遭遇する例は ext2/3/4 ファイルシステムのルート inode(2) です。
$ ls -id / /home
2 / 2 /home
実行すると(GNU仮定find
)
find / -printf "%i %p\n" | sort -n | less
複数のファイルシステムを持つシステムでは、非常に多くの重複したinode番号が表示されます(ただし、出力にはハードリンクも含まれているため、少し注意が必要です)。
inode番号でファイルを検索するときに開始パスのみがある場合は、オプションを使用して起動パスを含むファイルシステムに検索を制限できfind
ます-xdev
。
find / -xdev -inum 12582925
inode番号が12582925のファイルのみがルートファイルシステムにあります。 (-xdev
複数の開始パスでも機能しますが、この特別な場合には使いやすさが低下します。)
st_dev
(特定のシステムでは)ファイルを一意に識別するのは、inode番号とデバイス番号(GNUの構造内)の組み合わせです。 2つのディレクトリエントリが同じinodeとdev番号を持つ場合は、同じファイルを参照します(同じファイルシステム内の2つの異なるマウントを介してバインドマウントできます)。st_ino
stat
%D %i
find
-printf
一部の実装には、同じデバイス番号とinode番号を持つファイルを見つける述語がfind
あります。-samefile
ほとんどの[
/実装には、両方のファイルパスが同じファイルを参照しているかどうかを確認する演算子もtest
あります(シンボリックリンクの確認にもかかわらず)。-ef
答え2
はい、同じ inode 番号が異なるファイルシステムに表示されることがあります。正確な値を指定するには、inode番号(st_ino)だけでなく、inodeが配置されているデバイス(st_dev、それ自体はデバイスの一般クラスであるdev_majorと特定のクラスであるdev_minorで構成されています)も必要です。ケース)。
カップル(st_dev、st_ino)〜する特定のファイルを識別します(少なくともinodeを持つファイルシステムをマウント解除していない場合)。
上記のようにインデックスノード(7):
inodeが配置されたデバイス
各inode(および関連ファイル)は、デバイスでホストされているファイルシステムにあります。デバイスは、プライマリID(デバイスの一般クラスを識別する)とセカンダリID(一般クラス内の特定のインスタンスを識別する)の組み合わせによって識別されます。
アイノード番号
ファイルシステム内のすべてのファイルには一意のinode番号があります。インデックスノード番号は次のとおりです。ファイルシステム内でのみ一意(つまり、異なるファイルシステムが同じinode番号を使用できる、これがハードリンクがファイルシステムの境界を越えることができない理由です。