Linuxでハードリンクを効率的に追跡する方法は?

Linuxでハードリンクを効率的に追跡する方法は?

ソフトリンクは元のファイルreadlinkなどを簡単に追跡できますが、元のファイルへのハードリンクを追跡するのに問題があります。

$ ll -i /usr/bin/bash /bin/bash  
1310813 -rwxr-xr-x 1 root root 1183448 Jun 18 21:14 /bin/bash*  
1310813 -rwxr-xr-x 1 root root 1183448 Jun 18 21:14 /usr/bin/bash*
                   ^

上記は期待どおりに機能します。 - クール - >両方のファイルは同じinode 1310813を指します
(しかし、表示されるリンクの数は^1で表されます。その理由はGillesの答えで理解できます)。

$ find / -samefile /bin/bash 2>/dev/null
/usr/bin/bash

上記が予想されるので問題ありません。

$ find / -samefile /usr/bin/bash 2>/dev/null
/usr/bin/bash  

上記はいいえクール。元のファイルを追跡する方法またはハードリンクごとこの/usr/bin/bash記事を参考にしてもよろしいですか?

奇妙さ - 以下も役に立ちません。

$ find / -inum 1310813 2>/dev/null
/usr/bin/bash

ベストアンサー1

まず、ハードリンクの場合、元のファイルはありません。すべてのハードリンクが同じように作成されます。

ls -lしかし、出力にリンク数が1で示されているように、ここには関連するハードリンクはありません。

$ ll -i /usr/bin/bash /bin/bash  
1310813 -rwxr-xr-x 1 root root 1183448 Jun 18 21:14 /bin/bash*  
1310813 -rwxr-xr-x 1 root root 1183448 Jun 18 21:14 /usr/bin/bash*

binを指すシンボリックリンクが原因で問題が発生しますusr/binbash利用可能なすべてのパスfind、次のオプションを使用してシンボリックリンクに従うように指示する必要があります-L

$ find -L / -xdev -samefile /usr/bin/bash 2>/dev/null
/usr/bin/rbash
/usr/bin/bash
/bin/rbash
/bin/bash

-xdev私はあなたのシステムが単一のファイルシステムにマウントされていることを知っているので、ここで使用します。これにより/dev、などの/proc問題が発生するのを防ぐことができます。/run/sys

おすすめ記事