「Linuxコマンドまとめ」カテゴリでは、Linuxのコマンドについて、基本的な実行例とオプションを分かりやすくまとめます。
readlinkはシンボリックリンクの指し示すファイルやディレクトリへのパスを出力するコマンドです。この記事では、readlinkコマンドの基本的な使い方と、主なオプションによる利用法を解説します。
シンボリックリンクについては、以下のlnコマンドの記事で詳しく解説しています。シンボリックリンクの役割や作り方について聞いたことがない方、理解を深めたい方は、先に以下の記事を読むことをお勧めします。
readlinkコマンドの基本的な使い方
「readlink」コマンドの基本的な使い方は非常にシンプルです。コマンドラインに次のように入力します。
readlink [オプション] シンボリックリンクファイル
例えば、シンボリックリンクファイルであるlink.txtが指し示すファイル名を知りたいときは次のようにします。
readlink link.txt
これにより、link.txtが指すファイル名が出力されます。以下は、同じディレクトリにあるtarget.txtがリンク先である場合の出力例です。
$ ls -l
合計 4
lrwxrwxrwx 1 user user 10 6月 25 04:22 link.txt -> target.txt
-rw-rw-r-- 1 user user 2102 6月 25 04:22 target.txt
$ readlink link.txt
target.txt
readlinkコマンドの主なオプション
- -f
- シンボリックリンクのリンク先がシンボリックリンクだった場合、その先をたどり続けて出力します。最終的なリンク先のファイルが存在せず「リンク切れ」になっていても、リンク先を出力します。
- -e
- -fと同様に、シンボリックリンクのリンク先がシンボリックリンクだった場合、その先をたどり続けて出力します。ただし「リンク切れ」の場合は出力しません。
readlinkでリンクをたどり最終的なリンク先を出力する
readlinkに指定したシンボリックリンクが指しているのがシンボリックリンクだった場合、デフォルトではさらにリンクをたどることはありません。たとえば、以下の例のようにlink2.txt → link.txt → target.txtとリンクされていた場合、「readlink link2.txt」と実行すると「link.txt」が出力されます。
$ ln -s link.txt link2.txt
$ ls -l
合計 4
lrwxrwxrwx 1 user user 10 7月 16 06:46 link.txt -> target.txt
lrwxrwxrwx 1 user user 8 7月 16 06:46 link2.txt -> link.txt
-rw-rw-r-- 1 user user 2102 6月 25 04:22 target.txt
$ readlink link2.txt
link.txt
リンク先をたどりつづけ、最終的なリンク先を出力するには、「-f」オプションや「-e」オプションを使います。これらのオプションを使えば、リンク先がさらにシンボリックリンクで、そのまた先もシンボリック…と続いている場合でも、途中でリンクが切れていなければ、実際にどのファイルが「実ファイル」なのかが分かります。これらのオプションの違いは、「-f」は最終的なリンク先のファイルが存在しなくてもリンク先のパスを出力するのに対し、「-e」は最終リンク先が存在しなければパスを出力せず、終了ステータスが異常終了となります。特にシェルスクリプトに組み込んで利用する場合は、こうした挙動の違いを意識しておくのが良いでしょう。
# 「-f」「-e」どちらを使っても、最終的なリンク先である「tartget.txt」をフルパスで出力する。
$ readlink -f link2.txt
/home/user/tmp/target.txt
$ readlink -e link2.txt
/home/user/tmp/target.txt
# target.txtを削除した場合
$ rm target.txt
# 「-f」だとtarget.txtが存在しなくても構わず出力される。
$ readlink -f link2.txt
/home/user/tmp/target.txt
# 「-e」だと何も出力されない。
$ readlink -e link2.txt
# 終了ステータスが1(一般的なエラー)となる。
$ echo $?
1
readlinkのヘルプ
使用法: readlink [OPTION]... FILE... シンボリックリンクの値または正規化されたファイル名を表示します。 -f, --canonicalize 与えられた名前の要素中に存在するシンボリックリンクを 再帰的に全て辿る。最後の要素以外は存在しなければいけ ない -e, --canonicalize-existing 与えられた名前の要素中に存在するシンボリックリンクを 再帰的に全て辿る。最後の要素も含めて全て存在しなけれ ばいけない -m, --canonicalize-missing canonicalize by following every symlink in every component of the given name recursively, without requirements on components existence -n, --no-newline do not output the trailing delimiter -q, --quiet -s, --silent suppress most error messages (on by default) -v, --verbose report error messages -z, --zero end each output line with NUL, not newline --help この使い方を表示して終了する --version バージョン情報を表示して終了する GNU coreutils online help: <https://www.gnu.org/software/coreutils/> Report any translation bugs to <https://translationproject.org/team/> Full documentation <https://www.gnu.org/software/coreutils/readlink> or available locally via: info '(coreutils) readlink invocation'
readlinkのマニュアル
READLINK(1) ユーザーコマンド READLINK(1) 名前 readlink - 解決したシンボリックリンク、つまり正規化された名前を表示する 書式 readlink [OPTION]... FILE... 説明 シンボリックリンクの値または正規化されたファイル名を表示します。 -f, --canonicalize 与えられた名前の要素中に存在するシンボリックリンクを 再帰的に全て辿 る。最後の要素以外は存在しなければいけ ない -e, --canonicalize-existing 与えられた名前の要素中に存在するシンボリックリンクを 再帰的に全て辿 る。最後の要素も含めて全て存在しなけれ ばいけない -m, --canonicalize-missing 与えられた名前の要素中に存在するシンボリックリンクを 再帰的に全て辿 る。要素が存在しなくてもよい -n, --no-newline 末尾に区切り文字を出力しない -q, --quiet, -s, --silent ほとんどのエラーメッセージ出力を抑止する -v, --verbose エラーメッセージを報告する -z, --zero 行の区切りとして改行文字ではなく NUL を使用する --help この使い方を表示して終了する --version バージョン情報を表示して終了する GNU coreutils のオンラインヘルプ: <http://www.gnu.org/software/coreutils/> readlink の翻訳に関するバグは <http://translationproject.org/team/ja.html> に連絡してください。 完全な文書は <http://www.gnu.org/software/coreutils/readlink> にあります。 ローカルでは info '(coreutils) readlink invocation' で参照できます。 作者 作者 Dmitry V. Levin。 著作権 Copyright © 2016 Free Software Foundation, Inc. ライセンス GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. 関連項目 readlink(2), realpath(1), realpath(3) readlink の完全なマニュアルは Texinfo マニュアルとして整備されている。も し、 info および readlink のプログラムが正しくインストールされているなら ば、コマンド info readlink を使用すると完全なマニュアルを読むことができるはずだ。 GNU coreutils 2016年2月 READLINK(1)
コメント