inode番号のリンク数を計算する方法は? inode番号が592255であることがわかっている場合は、リンク数を確認するにはどうすればよいですか?
ディレクトリに複数のリンクがあることを知っていますが、修正方法がわかりません。
答え1
名前を使用してリンク数を見つける
stat
以下を使用して、特定のファイル/ディレクトリへのリンク数を取得できます。
$ stat lib/
File: ‘lib/’
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: fd02h/64770d Inode: 11666186 Links: 3
Access: (0755/drwxr-xr-x) Uid: ( 1000/ saml) Gid: ( 1000/ saml)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2014-03-21 18:16:10.521963381 -0400
Modify: 2014-01-13 17:16:49.438408973 -0500
Change: 2014-01-14 17:57:46.636255446 -0500
Birth: -
マニュアルページを見てくださいstat
。
%h number of hard links
%i inode number
したがってstat
、or出力関数を使用して直接値を取得できます。--printf
--format
$ stat --printf="%h\n" lib/
3
$ stat --format="%h" lib/
3
$ stat -c "%h" lib/
3
inodeを使用してリンク数を見つける
一方、inode番号だけを知っている場合は、次のように逆に作業できます。
$ ls -id lib
11666186 lib
$ find -inum 11666186 -exec stat -c "%h" {} +
3
引用する
答え2
コマンドに inode 番号を指定し、ファイルからfind
コマンドを実行するように指示します。stat
find . -inum #### -exec stat -c "%h" {} \;
答え3
例えば
ls -l passwd
-rw-r--r-- 1 root root 1402 2008-03-30 17:49 passwd
ファイルを参照するとき、この数字(1)は、実際にはファイル内のリンクの数、またはディレクトリーを参照するときに含まれるディレクトリー項目(.および..項目を含む)の数です。
他の例
ls -i /etc/passwd
8654127 /etc/passwd
/etc/passwd の inode 番号です。これで、対応する inode 番号 8654127 に実際にリンクされているリンクの数を見つけることができます。
find /etc/ -inum 8654127
/etc/passwd
私の例では/etc/passwdなので、状況に応じて次のことができます。
find / -inum 592255
答え4
inodeからリンク数を取得するいいえext2
//利用可能なext3
ファイルシステムからファイルシステム全体を検索します。ここでの欠点は、デバイスを知り、root権限を持つ必要があることです。もちろん、速度がはるかに速くなるという利点があります。 inodeを持つファイルの場合:ext4
debugfs
5638454
dev/sda2
sudo debugfs -R 'stat <5638454>' /dev/sda2
Onでは、デバイスの代わりにbtrfs
マウントポイントが提供されます。/mnt
stat -c %h $(sudo btrfs inspect-internal inode-resolve 5638454 /mnt)