readlinkコマンドはシンボリックリンクファイルのリンク先パスを表示したり、ファイル名の絶対パスを表示することができます。
ファイルの絶対パスを取得したいときに役立つコマンドになります。
目次
readlinkコマンドとは
readlinkコマンドには、2つのモードがあります。
Readlink modeとCanonicalize modeです。
Readlink mode
シンボリックリンクファイルが引数に渡されると、そのシンボリックリンクファイルのリンク先のパスを表示します。
それ以外が引数に渡されると何も出力せず、終了ステータスは0以外を返します。
また、Readlink modeはreadlinkコマンドのデフォルトになります。
Canonicalize mode
Canonicalizeとは、正規化を意味する単語になります。
正規化とはデータを扱いやすくするためにデータの無駄をなくすことや整形をすることを意味します。
この場合の正規化は、カレントディレクトリの.や一つ上のディレクトリの..の部分を含まないようにしたり、/のような区切りを何度も繰り返したりせず、シンボリックリンクファイルを含まないようなファイルパスを出力します。
つまり、Canonicalize modeでは、ファイルの絶対パスを出力します。
また、ファイルパスの正規化に使うコマンドには、realpathコマンドが好まれます。
readlinkコマンドの構文
readlinkコマンドの構文
1 |
readlink [option]... file... |
readlinkコマンドの利用例
シンボリックリンクの値を表示
(オプションなし)
readlinkコマンドのデフォルトは、Readlink modeになります。
このReadlink modeは、引数に渡されたシンボリックリンクファイルのリンク先のパスを表示します。
それ以外のファイルが渡された場合は、何も出力しません。
コマンド例
1 |
readlink -f sym_file.txt |
実行結果
1 |
/home/ubuntu/test_readlink/dir1/dir1_file.txt |
stat -c'%N %F'で確認した場合
1 |
'sym_file.txt' -> '/home/ubuntu/test_readlink/dir1/dir1_file.txt' シンボリックリンク |
ファイルの絶対パスを表示
(-fオプション)
-fオプションは、readlinkコマンドをCanonical modeにします。
ファイルを引数として渡すとそのファイルの絶対パスを出力します。
ファイルパスの最後の部分以外で、そのファイルが見つからない場合や利用できない場合は、何も表示しません。
例えば、file1の絶対パスを取得しようとするとfile1の絶対パスはfile1が存在するかしないかに関わらず取得することができます。しかし、dir1/file1の絶対パスを取得しようとするときにdir1が存在しない場合は何も出力しません。
シンボリックリンクファイルを引数に渡すとシンボリックリンク先の絶対パスを取得することができます。
コマンド例
1 |
readlink -f file.txt |
実行結果
1 |
/home/ubuntu/test_readlink/file.txt |
ファイルが存在する場合にファイルの絶対パスを表示
(-eオプション)
-eオプションは、Canonical modeにするという意味で基本的に-fオプションと同じですが、-fオプションと違いファイルが存在する場合のみにそのファイルの絶対パスを表示します。
コマンド例
1 |
readlink -e no_exist_file.txt |
実行結果
ファイルが存在しないので出力なし
ファイルが存在しない場合でもファイルの絶対パスを表示
(-mオプション)
-mオプションは、Canonical modeにするという意味で基本的に-fオプションと同じですが、-fオプションと違い、ファイルが存在しない場合や利用できない場合は、ディレクトリとして扱い絶対パスを表示します。
コマンド例
1 |
readlink -m no_exist_dir/aaa/bbb/ccc.txt |
実行結果
1 |
/home/ubuntu/test_readlink/no_exist_dir/aaa/bbb/ccc.txt |
エラーメッセージを表示
(-vオプション)
-vオプションは、readlinkコマンドでのエラーメッセージを表示するようにできます。
コマンド例
1 |
readlink -v -f no_exist_dir/aaa/bbb/ccc.txt |
実行結果(標準エラー出力)
1 |
readlink: no_exist_dir/aaa/bbb/ccc.txt: No such file or directory |
参考
外部リンクGnu Coreutils
外部リンクGnu Coreutils日本語版