連載
» 2018年09月06日 05時00分 公開

Linux基本コマンドTips(238):【 readlink 】コマンド――シンボリックリンクのリンク先を表示する

本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、シンボリックリンクのリンク先を表示する「readlink」コマンドです。

[@IT]
「Linux基本コマンドTips」のインデックス

Linux基本コマンドTips一覧

 本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回はシンボリックリンクのリンク先を表示する「readlink」コマンドです。

readlinkコマンドとは?

 「readlink」は、シンボリックリンクのリンク先の名前を表示するコマンドです。

 シンボリックリンクとは、ファイルやディレクトリの別名となる小さなファイルです。シンボリックリンクを作成するには、lnコマンド(連載第16回)を用います。

 シンボリックリンクを対象にしたファイル操作は、削除(rm)などを除き、元のファイルへの操作に置き換えられます。



readlinkコマンドの書式

readlink [オプション] 対象

※[ ]は省略可能な引数を示しています





readlinkの主なオプション

短いオプション 長いオプション 意味
-f --canonicalize 正規化モード。シンボリックリンクを再帰的にたどる(本文を参照)。引数で指定した対象に最終の要素が存在しない場合はエラーとなり何も表示しない。末尾のスラッシュ記号(/)を無視する
-e --canonicalize-existing 正規化モード。「-f」とほぼ同じだが、対象の末尾がスラッシュ記号だった場合はディレクトリを指定したものと見なす
-m --canonicalize-missing 正規化モード。「-f」とほぼ同じだが、対象の途中に使用できなかったり、参照できないものがあったりした場合はディレクトリと見なす
-n --no-newline 最後に改行文字を出力しない
-q、-s --quiet,--silent ほとんどのエラーメッセージを出力しない(デフォルト)
-v --verbose エラーメッセージを出力する


シンボリックリンクのリンク先を表示する

 「readlink 対象」で、対象がシンボリックリンクだった場合、そのリンク先を表示します(画面1)。対象がシンボリックリンクではない場合はエラーになり、何も表示しません。

 なお、シンボリックリンクのリンク先が別のシンボリックリンクだった場合、実際のファイルまでたどることはしません。readlinkコマンドにオプションを与えると、たどるようになります。

コマンド実行例

readlink 対象

(対象のリンク先を表示する)


画面1 画面1 シンボリックのリンク先を表示したところ


シンボリックリンクを再帰的にたどって表示する(正規化モード)

 「-f」オプション(--canonicalize)を指定すると、正規化モード(canonicalizeモード)になります。

 正規化モードでは、リンク先をたどり、最終的なリンク先を絶対パスで表示します。

 例えば、「test3はtest2へのリンク、test2はtest1へのリンク」という場合、「readlink -f test3」を実行すると、ファイル名「test1」を絶対パスで表示します(画面2)。

コマンド実行例

readlink -f 対象

(対象のリンク先を再帰的にたどって表示する)


画面2 画面2 シンボリックリンクをたどってリンク先のファイルパスを表示したところ


正規化モードのオプションによる違い

 正規化モードには「-f」オプションの他に、「-e」オプション(--canonicalize-existing)と「-m」オプション(--canonicalize-missing)があります。基本的な動作は同じですが、リンク先や指定した対象の途中のパスが存在しない場合の結果に違いがあります。

 「-e」はリンクのつながりの中で、1つでもファイルやパスが存在しないとエラーになります。

 例えば、シンボリックリンクをたどる過程で存在しないファイルがあった場合、「-f」と「-m」はリンク先があると仮定して可能な所までたどり、結果のパスを表示します。これに対し、「-e」はエラーとなり、結果を表示しません。

 画面2では、test3.txtはtest2.txtの、test2.txtはtest1.txtのシンボリックリンクでした。ここでtest1.txtを削除した場合、画面3のような動作の違いが生じます。

画面3 画面3 シンボリックリンクのつながりが切れた場合の動作例 「-f」と「-m」は同じ結果になった

 次はファイルではなく、ディレクトリを対象にした場合です。「readlink -f A/B/C」のようにディレクトリを含めて指定した場合、「-f」は対象の最終要素である「C」が存在すると仮定して結果のパスを表示します。

 「-e」は先ほど同様、1つでも途中のパスが欠けているとエラーになります。「-m」は途中のパスが欠けていても、あると仮定して結果のパスを表示します。これは「-f」と同じ動作です。

 ディレクトリ「dir1」とdir1へのシンボリックリンク「dir2」があった場合、「dir2/file.txt」のリンク先は「dir1/file.txt」です。このとき、「file.txt」が実際には存在しなくても、「-f」と「-m」の場合は「dir2/file.txt」のリンク先として「dir1/file.txt」の絶対パスを表示します(画面4)。

画面4 画面4 ファイルを含まないディレクトリへのリンクをたどった場合のオプションによる動作の違い 「-f」と「-m」は同じ結果になった

 図4の例では「-f」と「-m」の違いがはっきりしませんが、例えば、実際のディレクトリdir1に対して「dir3→dir2→dir1」というリンク関係を作った後に、dir2だけを削除すると、「-m」だけが結果を表示します。今度は「dir3→dir2→dir1」のうち、dir1を削除すると、やはり「-m」だけが結果を表示します。つまり、「-m」と違って「-f」は、指定したパスの最後の要素(この場合はfile.txt)がなかったときだけ、あると見なして結果を表示します

 画面5では、存在しないサブディレクトリとファイルを指定して、オプションごとの動作の違いを示しました。

画面5 画面5 空のディレクトリを指定したときの動作


筆者紹介

西村 めぐみ(にしむら めぐみ)

PC-9801NからのDOSユーザー。PC-486DX時代にDOS版UNIX-like toolsを経てLinuxへ。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『Accessではじめるデータベース超入門[改訂2版]』『macOSコマンド入門』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。