特定のファイルを削除する前に、そのファイルを参照しているシンボリックリンクの有無を確認する場合、findコマンドを利用すると良いだろう。
ls -la $(find -L /シンボリックリンクがあるフォルダのPATH -samefile /オリジナルファイルのPATH)
たとえば、「/work」「/home」配下にある、「/work/test.txt」のシンボリックリンクを確認する場合、以下のようにコマンドを実行する。
ls -la $(find -L /{work,home} -samefile /work/test.txt)
[root@test-centos7 ~]# ls -la $(find -L /{work,home} -samefile /work/test.txt)
lrwxrwxrwx. 1 root root 14 6月 6 09:36 /home/test_ln.txt -> /work/test.txt
lrwxrwxrwx. 1 root root 8 6月 5 19:29 /work/ln_test.txt -> test.txt
lrwxrwxrwx. 1 root root 17 6月 5 19:30 /work/ln_test.txt2 -> /work/ln_test.txt
-rw-r--r--. 1 root root 108 6月 4 22:31 /work/test.txt
見てもらえればわかるが、シンボリックリンクに更にシンボリックリンクを作成した場合でも抽出出来ている。 削除して問題無いファイルかどうかを確認するのに有効だろう。
もしextglobが有効になっている環境であれば、以下のようにコマンドを実行することで特定のディレクトリ以外にあるシンボリックリンクを探す事も出来る。
ls -la $(find -L /!(proc|sys|dev) -samefile /work/test.txt)
[root@test-centos7 work]# shopt | grep extglob
extglob on
[root@test-centos7 work]# ls -la $(find -L /!(proc|sys|dev) -samefile /work/test.txt)
find: ‘/run/systemd/generator/local-fs.target.wants/systemd-fsck-root.service’: シンボリックリンクの階層が多すぎ ます
find: ‘/var/run/systemd/generator/local-fs.target.wants/systemd-fsck-root.service’: シンボリックリンクの階層が多 すぎます
lrwxrwxrwx. 1 root root 14 6月 6 09:36 /home/test_ln.txt -> /work/test.txt
lrwxrwxrwx. 1 root root 8 6月 5 19:29 /work/ln_test.txt -> test.txt
lrwxrwxrwx. 1 root root 17 6月 5 19:30 /work/ln_test.txt2 -> /work/ln_test.txt
-rw-r--r--. 1 root root 108 6月 4 22:31 /work/test.txt