inodeの数へのリンクの数を計算しますか?

inodeの数へのリンクの数を計算しますか?

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を持つファイルの場合:ext4debugfs5638454dev/sda2

sudo debugfs -R 'stat <5638454>' /dev/sda2

Onでは、デバイスの代わりにbtrfsマウントポイントが提供されます。/mnt

stat -c %h $(sudo btrfs inspect-internal inode-resolve 5638454 /mnt)

関連情報