ファイルの削除前に、そのファイルを参照しているシンボリックリンクを確認する

特定のファイルを削除する前に、そのファイルを参照しているシンボリックリンクの有無を確認する場合、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