【 readlink 】 シンボリックリンクのリンク先を出力する 【 Linuxコマンドまとめ 】

Linuxコマンドまとめ

「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)
Linuxコマンドまとめ
\シェアお願いします/
LFI

コメント

タイトルとURLをコピーしました