はじめに
ファイルの絶対パスが知りたい時どう取得していますか。pwd
とls
を組み合わせておいででしょうか。
何を隠そう自分が正にその一人でしたが、調べてみると良い方法がありましたのでまとめておきます。
readlinkコマンド
方法から先に載せます。
$ readlink -f fileA
/home/centos/fileA
どういう理屈かと言いますと、readlink
コマンドはシンボリックリンクのリンク先を表示するコマンドです。
$ ln -s fileA linkA
$ ls -l
-rw-rw-r--. 1 centos centos 10 Mar 14 07:50 fileA
lrwxrwxrwx. 1 centos centos 5 Mar 14 07:50 linkA -> fileA
$ ln -s linkA linkB
$ ls -l
-rw-rw-r--. 1 centos centos 10 Mar 14 07:50 fileA
lrwxrwxrwx. 1 centos centos 5 Mar 14 07:50 linkA -> fileA
lrwxrwxrwx. 1 centos centos 5 Mar 14 07:52 linkB -> linkA
$ readlink linkB
linkA
$ readlink -f linkB
/home/centos/fileA
一息で-f
オプションまで実行してしまいましたが、
- linkA→fileA
- linkB→linkA
上の様なリンク関係となっています。この状況でreadlink linkB
を実行するとlinkA
を返し、readlink -f linkB
を実行するとfileA
を返します。つまり-f
オプションは再帰的に対象シンボリックリンクのリンク先を探すオプションです。
まとめ
最初のコマンドでは対象にシンボリックリンクではなく通常のファイルを指定しています、だからリンク先の自分自身が表示されたという事になります。
と思います。