Linuxのコマンド操作に慣れてくると、「相対パス」と「絶対パス」の違いが作業効率に大きく影響する場面が出てきます。スクリプトを書くときやログの出力先を指定するとき、またはファイルの場所を明確に把握したいときなど、「絶対パス」を取得できるととても便利です。
そんな時に活躍するのが「realpath」というコマンドです。realpathを使えば、指定したファイルやディレクトリの絶対パスを一発で取得できます。この記事では、realpathコマンドの基本的な使い方から応用テクニック、注意点までを初心者にもわかりやすく解説します。
realpathとは何か?
realpathは、指定したパスの「絶対パス(フルパス)」を表示してくれるコマンドです。絶対パスとは、ファイルやディレクトリがファイルシステム内のどこにあるかを示す完全なパスのことです。
たとえば、カレントディレクトリから見た相対パス../documents/report.txtは、環境によって場所が変わる可能性があります。しかし、realpathを使うと、/home/user/documents/report.txtのように確定したフルパスを取得できます。
このコマンドはGNU coreutilsに含まれており、多くのLinuxディストリビューションでデフォルトで利用可能です。
realpathの基本的な使い方
基本的な構文は以下の通りです。
realpath [オプション] ファイル名
例1:単純なファイルの絶対パス取得
realpath ./myfile.txt
出力例:
/home/user/project/myfile.txt
カレントディレクトリ内にあるmyfile.txtの絶対パスを表示します。
例2:親ディレクトリを含む相対パスの解決
realpath ../docs/manual.pdf
出力例:
/home/user/docs/manual.pdf
このように、相対パスもすべて絶対パスに変換されて表示されます。
シンボリックリンクを解決する
realpathの便利な特徴の一つが、「シンボリックリンク(シンボリックファイル)」の解決です。
たとえば、あるファイルが別の場所を指しているシンボリックリンクである場合、realpathはそのリンク先の実体パスを返してくれます。
realpath /usr/bin/python
出力例:
/usr/bin/python3.10
このように、/usr/bin/pythonというリンクの実体であるpython3.10のパスが返されます。
ディレクトリに対して使う
realpathはファイルだけでなく、ディレクトリに対しても利用可能です。
realpath ../
出力例:
/home/user
このように、親ディレクトリの絶対パスを取得できます。
複数ファイルをまとめて処理する
複数のファイルやディレクトリを一度に指定することで、それぞれの絶対パスを一括で取得することも可能です。
realpath file1.txt file2.txt ../dir1
出力例:
/home/user/project/file1.txt
/home/user/project/file2.txt
/home/user/dir1
スクリプトなどで多くのファイルを一括処理したい場合に非常に便利です。
realpathとreadlinkの違い
realpathと似たような目的で使われるコマンドにreadlinkがあります。どちらもパスの解決を行いますが、用途が少し異なります。
readlinkは、主にシンボリックリンクのリンク先を表示するコマンド。realpathは、シンボリックリンクを含めた絶対パスを解決して返す。
例:
readlink /usr/bin/python
# 出力:python3.10(相対パス)
realpath /usr/bin/python
# 出力:/usr/bin/python3.10(絶対パス)
スクリプトなどで明確なフルパスが必要な場合は、realpathの方が便利です。
スクリプトでの活用例
シェルスクリプト内で絶対パスを使うことで、どのディレクトリでスクリプトを実行しても同じ結果を得られるようになります。
例:スクリプトのあるディレクトリを基準にファイルを処理する
#!/bin/bash
SCRIPT_DIR=$(realpath $(dirname "$0"))
echo "スクリプトのあるディレクトリ: $SCRIPT_DIR"
CONFIG_FILE="$SCRIPT_DIR/config/settings.conf"
echo "設定ファイル: $CONFIG_FILE"
このように、realpathを使えば相対的な場所の依存を避けて、柔軟なスクリプトが書けます。
realpathが使えない環境では?
realpathがインストールされていない環境では、代替手段として以下のような方法もあります。
readlink -f ./file.txt
ただし、readlink -fが利用できないOSもあるため、ポータブルなスクリプトを目指す場合には注意が必要です。
また、Pythonなどの言語でも絶対パスは取得できます。
import os
print(os.path.realpath("file.txt"))
realpathのインストール方法
多くのLinuxディストリビューションではrealpathはデフォルトでインストールされていますが、もしインストールされていない場合は以下のようにパッケージをインストールすることで使えるようになります。
Debian/Ubuntu系
sudo apt install coreutils
RedHat/CentOS系
sudo yum install coreutils
まとめ
realpathは、ファイルやディレクトリの絶対パスを取得するための非常に便利なLinuxコマンドです。相対パスの解決やシンボリックリンクの実体参照など、日常のコマンド操作やスクリプト作成において大きな助けになります。
絶対パスが必要な場面は意外と多く、realpathを知っているだけでトラブル回避や作業の効率化が実現できます。まだ使ったことがない方は、ぜひ一度試してみてください。
