Linuxで(シンボリックリンクが相対的であるか絶対的であるかに関係なく)、特定のファイルを指すすべてのシンボリックリンクを見つけるための最良の方法は何ですか?ファイルシステム全体を検索する必要があることを知っています。
ベストアンサー1
GNUにはテストfind
があります-samefile
。マニュアルページによると:
-samefile name File refers to the same inode as name. When -L is in effect, this can include symbolic links.
$ find -L / -samefile /path/to/file
/path/to/file
ハードリンクとファイル自体を含むすべてのリンクを見つけます。シンボリックリンクのみが必要な場合は、find
()の結果を別々にテストできますtest -L
。
その影響を理解し-L
、検索に問題がないことを確認する必要があります。
注:ドキュメントは同じinode番号を持つファイルを見つけることを示していますが、ファイルシステム全体で動作しているようです。
たとえば、/homeと/tmpは独立したファイルシステムです。
$ touch ~/testfile
$ ln -s ~/testfile /tmp/foo
$ ln -s /tmp/foo /tmp/bar
$ mkdir /tmp/x
$ ln -s ~/testfile /tmp/x/baz
$ find -L /tmp -samefile ~/testfile
/tmp/bar
/tmp/foo
/tmp/x/baz
これが ~/testfile へのシンボリックリンクである /tmp/foo へのシンボリックリンクである /tmp/bar をどのように返すかをご覧ください。ターゲットファイルへの直接シンボリックリンクを見つけたい場合は機能しません。