はじめに

こんにちは!今回はreadlinkコマンドについて解説します。

readlinkはシンボリックリンクがどのファイルを指しているか確認するコマンドです。リンクの実態を追いかけるときに便利ですね。

「このショートカット、実際にはどこのファイル?」みたいなときに使うコマンドです。

readlinkコマンドとは

readlinkは、シンボリックリンクが指し示す実体ファイルのパスを表示する外部コマンドです。

Linuxではシンボリックリンク(ショートカットのようなもの)がよく使われます。readlinkでそのリンクの実体を確認できます。絶対パスに変換する-fオプションも便利ですね。

基本構文

1
readlink [オプション] ファイルまたはディレクトリ

リンクの実体パスを表示します。

主なオプション

オプション 説明
-f すべてのシンボリックリンクを解決して絶対パスを表示
-e -fと同様(リンク先が存在する必要あり)
-m リンク先が存在しなくても絶対パスを表示
-n 改行を出力しない
-v 詳細表示

使用例

1
readlink /usr/bin/python

実行結果:

1
python3

/usr/bin/pythonというリンクがpython3を指していることが分かります。

例2: 絶対パスで表示

1
readlink -f /usr/bin/python

実行結果:

1
/usr/bin/python3.9

-fオプションで、すべてのリンクを解決して絶対パスを表示。実際のバイナリファイルのパスが分かります。

例3: リンク先の確認

1
readlink /etc/localtime

実行結果:

1
../usr/share/zoneinfo/Asia/Tokyo

タイムゾーン設定へのリンク。どのタイムゾーンに設定されているか分かります。

例4: 存在しないリンク先も表示

1
readlink -m /tmp/mylink

実行結果:

1
/tmp/mylink

リンク先が存在しない場合でも、絶対パスを構築して表示します。

例5: ホームディレクトリのリンク確認

1
readlink -f ~/myproject

実行結果:

1
/home/user/projects/myapp

ホームディレクトリ内のリンクを絶対パスで解決。

例6: 詳細表示

1
readlink -v /usr/bin/ls

実行結果:

1
2
/usr/bin/ls -> /bin/ls
/bin/ls -> /usr/bin/ls.coreutils

リンクの解決過程を詳細に表示。複数段階のリンクの場合に便利。

例7: 改行なしで出力

1
readlink -n /usr/bin/python | wc -c

実行結果:

1
7

-nオプションで改行を含めずに出力。スクリプトでの処理に便利。

例8: ディレクトリのリンク確認

1
readlink -f /var/lock

実行結果:

1
/run/lock

ディレクトリへのリンクも確認可能。システムディレクトリの構造把握に便利。

Tips・注意点

ls -lでもリンク先は表示される

1
2
ls -l /usr/bin/python
readlink /usr/bin/python

ls -lでもリンク先は表示されますが、readlinkはパスだけを抽出できるのでスクリプト処理に向いています。

複数段階のリンク解決

1
2
readlink /usr/bin/python      # 相対パス表示
readlink -f /usr/bin/python   # すべてを解決

複数段階のシンボリックリンクは-fオプションですべて解決する必要があります。

スクリプトでの活用

1
2
REAL_PATH=$(readlink -f "$0")
SCRIPT_DIR=$(dirname "$REAL_PATH")

スクリプト自身の絶対パスを取得。実行パスに依存しない処理ができます。

実践的な使い方

現在のディレクトリの実体パス確認

1
2
cd /var/lock
readlink -f .

シンボリックリンクであるディレクトリから、実際のパスを確認。

スクリプトディレクトリの特定

1
2
3
4
#!/bin/bash
SCRIPT_PATH=$(readlink -f "$0")
SCRIPT_DIR=$(dirname "$SCRIPT_PATH")
source "$SCRIPT_DIR/lib.sh"

スクリプトからライブラリを相対パスで読み込む際に便利です。

リンク切れの検出

1
2
3
if ! readlink -e "$link" > /dev/null 2>&1; then
  echo "Broken link: $link"
fi

リンク先が存在しない場合を検出。-eオプションはリンク先の存在確認が必須です。

Pythonの実体確認

1
readlink -f $(which python)

どのバージョンのPythonが実行されるか確認。複数バージョン管理時に有用です。

まとめ

readlinkコマンドのポイント:

  • シンボリックリンクの実体パスを確認する外部コマンド
  • -f: すべてのリンクを解決して絶対パスを表示
  • -e: -fと同様(リンク先存在確認付き)
  • -m: リンク先が存在しなくても絶対パスを表示
  • -n: 改行を出力しない
  • スクリプト処理に特に便利
  • よく使う組み合わせ: readlink -f, readlink -m

シンボリックリンクが多用される現代のLinuxシステムでは、readlinkで実体を把握することが重要です。スクリプトを書くときに必ず覚えておきたいコマンドですね!