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