Linuxコマンド readlink(シンボリックリンク先を表示する)

シンボリックリンクのリンク先ファイル名を表示するコマンドについて解説。

RHEL Fedora CentOS Vine Deblan Ubuntu Plamo

参考サイト:Man page of INSTALL

使用方法

シンボリックリンクの指し示す先を標準出力に出力します。

書式

$ readlink [オプション] ファイル名
-f,
–canonicalize
シンボリックリンク先を再帰的に調べる
-e,
–canonicalize-existing
シンボリックリンク先が存在するかを調べる
-m,
–canonicalize-missing
シンボリックリンク先が存在しないかを調べる
-n,
–no-newline
出力後に改行しない
-z,
–zero
改行ではなくNULL文字を付加する
-q,
–quiet,
-s,
–silent
エラーメッセージを表示しない
オプション一覧

サンプル

$ readlink sample

実行結果

[centos@ work]$ tree
.
├── sample -> sample1/sample.txt
└── sample1
    └── sample.txt

1 directory, 2 files
[centos@ work]$ readlink sample
sample1/sample.txt

シンボリックリンクのリンク先を最後まで辿る。

-fオプションを使用することにより、シンボリックリンクのリンク先を再帰的に辿ることができる。

サンプル

$ readlink -f sample

実行結果

[centos@ work]$ tree
.
├── sample -> sample1/sample.txt
└── sample1
    └── sample.txt

1 directory, 2 files
[centos@ work]$ ln -s sample sample2 ←シンボリックリンクに対して、シンボリックリンクを作成する。
[centos@ work]$ tree
.
├── sample -> sample1/sample.txt
├── sample1
│   └── sample.txt
└── sample2 -> sample                ←treeコマンドでは、実態まで辿ることができない。

1 directory, 3 files
[centos@ work]$ readlink -f sample2  ←readlink -f で実態まで再帰的に辿ることができる。
/home/centos/work/sample1/sample.txt
[centos@ work]$ 

リンク先の存在を確認する

-eオプションを使用することにより、シンボリックリンクのリンク先にファイルが存在するか確認できる。

サンプル

$ readlink -e sample

実行結果

[centos@ work]$ tree
.
├── sample -> sample1/sample.txt
├── sample1
└── sample2 -> sample

1 directory, 2 files

[centos@ work]$ readlink -e sample ; echo $?
/home/centos/work/sample1/sample.txt     ←ファイルが存在しているため、ファイルパスを返す。
0                                        ←ファイルが存在するため0を返す。
[centos@ work]$ rm sample1/sample.txt  #実態のファイルを削除する。
[centos@ work]$ readlink -e sample ; echo $?
1                                        ←ファイルが存在しないため1を返す。
[centos@ work]$