シンボリックリンクのリンク先を確認できるコマンド。
例
$ readlink -f シンボリックリンクのパス
-f
を付けると階層の途中にあるすべてのシンボリックリンクを解決して、絶対パスにしてくれる。
-f
を付けないと、階層の途中にあるシンボリックリンクはそのままで、また、指定したパスがシンボリックリンクでない場合は、なにも表示せずに、終了コード1を返す。
準備
$ mkdir -p aaa/bbb$ ln -s aaa AAA## aaa へのリンクを AAA という名前で作成$ ln -s bbb aaa/BBB## bbb へのリンクを aaa/BBB という名前で作成## リンク先たる「bbb」は aaa/BBB からの相対パス$ ln -s dummy aaa/DUMMY## 存在しないリンク先
状況
$ find .../AAA # <- aaa へのシンボリックリンク./aaa./aaa/DUMMY # <- リンク先が存在しないシンボリックリンク./aaa/bbb./aaa/BBB # <- bbb へのシンボリックリンク
基本的な使い方の例
$ readlink AAAaaa$ readlink AAA/BBBbbb$ readlink aaa/bbb## bbbはシンボリックリンクではないので、終了コード1で異常終了$ readlink AAA/bbb## AAAはシンボリックリンクだけどもbbbはシンボリックリンクではないので、終了コード1で異常終了$ readlink aaa/DUMMYdummy## リンク先が存在しなくてもリンク先を表示
-f
を使う例
$ readlink -f AAA/home/foo/readlinktest/aaa## 絶対パスで表示$ readlink -f AAA/BBB/home/foo/readlinktest/aaa/bbb## AAAもBBBもリンク先に変換$ readlink -f AAA/bbb/home/foo/readlinktest/aaa/bbb## 階層の途中であるAAAだけでもリンク先に変換$ readlink -f aaa/bbb/home/foo/readlinktest/aaa/bbb## シンボリックリンクがなにもない場合はそのまま$ readlink -f AAA/DUMMY/home/foo/readlinktest/aaa/dummy$ readlink -e aaa/DUMMY## -f の代わりに -e を付けるとリンク先が存在しない場合に、終了コード1で異常終了## 存在する場合は -f と同じ
シンボリックリンクへのシンボリックリンクがある場合
$ ln -s AAA AAB## AAA へのリンクを AAB という名前で作成## 以下のように連鎖的なリンクになる## AAA -> aaa## AAB -> AAA$ readlink AABAAA# -f がないと直接のリンク先を表示$ readlink -f AAB/home/foo/readlinktest/aaa# -f を付けるとシンボリックリンクを2回たどって絶対パスで表示
Coreutilsというパッケージに入っているので、CentOSにもUbuntuにも始めから入っている。
-e
-f
--help
-f
-n
echo
の-n
と同じ-v
--version
--
というパラメータを渡すとそれ以降のパラメータをオプションではなくファイル名とみなしてくれるので、-
で始まるファイル名を扱いたい場合に使うとよい。