realpath -eオプションの使い方を解説!Linuxで存在するファイルのみ絶対パスを取得する方法
生徒
「Linuxでrealpathを使ってファイルの絶対パスを調べたいんですが、存在しないファイルでも結果が出るって聞いたことがあります。間違ったファイル名でも出るんですか?」
先生
「実はその通りなんです。普通にrealpathを使うと、まだ存在しないパスでも計算して出してくれます。でも、それを防ぐ方法がありますよ。」
生徒
「それって安全面でも気になりますね…。どうすれば防げるんですか?」
先生
「そんなときに使うのが-eオプションです。存在するファイルやディレクトリだけを対象にして、実際にあるパスしか表示しないようにできますよ。それでは詳しく見ていきましょう!」
1. realpathコマンドと-eオプションの関係
realpath(リアルパス)コマンドは、Linuxでファイルやディレクトリの絶対パス(完全な場所)を表示するために使います。
しかし通常は、指定したパスが実在しなくても「存在するもの」として扱ってしまうため、間違ったファイル名やタイプミスをそのまま表示してしまうことがあります。
そこで役立つのが-eオプションです。このオプションを付けると、実際に存在するファイルやディレクトリだけを対象として、正しい絶対パスだけを表示してくれます。
2. realpath -e の基本的な使い方
まずは通常のrealpathコマンドを使った例を見てみましょう。
realpath myfolder/sample.txt
/home/user/myfolder/sample.txt
この例では、たとえmyfolder/sample.txtが実際に存在していなくても、形式的には絶対パスを表示してくれます。しかし、存在しないファイルを操作しようとして、エラーになることもあります。
ここで-eオプションを使った場合を見てみましょう。
realpath -e myfolder/sample.txt
realpath: 'myfolder/sample.txt' を解決できません: そのようなファイルやディレクトリはありません
このように、存在しないファイルには絶対パスを返さず、エラーメッセージを表示してくれるのが-eオプションの特徴です。
3. 実在するファイルでの成功例
では、実際に存在するファイルに対して-eオプションを使った場合の例を見てみましょう。
realpath -e /etc/hosts
/etc/hosts
このように、/etc/hostsのような確実に存在するファイルを指定すれば、問題なく絶対パスが返ってきます。
4. -eオプションの使いどころ
-eオプションが便利に使えるのは、以下のような場面です。
- スクリプトや自動化処理の中で、本当に存在するファイルだけ処理したいとき
- ユーザーから受け取ったパスが正しいかどうかを検証したいとき
- シンボリックリンクのリンク先が存在するかチェックしたいとき
誤ったファイルパスで処理が止まるのを防ぐためにも、-eをうまく活用することがポイントです。
5. realpathの他のオプションとの組み合わせ例
realpathには他にも便利なオプションがありますが、-eとよく一緒に使われるのが-sです。
-e→ 実在するファイルだけを対象にする-s→ シンボリックリンクをたどらず、そのままのリンクを表示する
例えば次のように組み合わせて使います:
realpath -e -s mylink
/home/user/mylink
このように、リンク自体が存在すれば、そのリンクのパスが表示されます。リンク先をたどりたくない場合などに便利です。
6. realpath -eとtestコマンドの違い
testコマンド([ -e ファイル名 ]という書き方でも同じ)は、ファイルが存在するかどうかを調べるために使います。
一見すると、realpath -eと似ているようですが、実は用途が少し違います。
test→ 存在するか「だけ」を調べて、表示はしないrealpath -e→ 存在する「うえで」、絶対パスを出力してくれる
[ -e /etc/hosts ] && echo "存在します"
存在します
このように、testは条件判定に特化していますが、realpath -eはそのファイルの絶対パスまで出力できるのが強みです。
まとめ
ここまで、Linuxのrealpathコマンドにおける-eオプションの役割や使い方について詳しく見てきました。
realpathは、相対パスを絶対パスへ変換する便利なLinuxコマンドですが、何も考えずに使うと「存在しないファイル」まで
あたかも存在するかのように絶対パスとして表示してしまう特徴があります。
この挙動は、日常的な確認作業では気にならなくても、シェルスクリプトや自動処理、運用作業の現場では
思わぬトラブルの原因になることがあります。
そこで重要になるのが-eオプションです。
realpath -eを使うことで、実際にファイルやディレクトリが存在している場合のみ絶対パスを取得でき、
存在しない場合は明確にエラーとして扱われます。
これは、Linuxコマンドを使った処理の安全性や信頼性を高めるうえで非常に大きなポイントです。
特に、ユーザー入力を受け取る処理や、ファイル操作を自動化するシェルスクリプトでは、
「存在チェック」と「絶対パス取得」を同時に行える点が大きな強みになります。
また、-eオプションはシンボリックリンクの扱いにも関係しており、
リンク先が正しく存在しているかどうかを含めて確認できます。
さらに-sオプションと組み合わせることで、
シンボリックリンクそのもののパスを扱うなど、用途に応じた柔軟な使い分けも可能です。
Linux環境では、設定ファイルやリンク構造が複雑になることも多いため、
こうした細かなオプションを理解しておくことは、日々の作業効率を確実に高めてくれます。
testコマンドとの違いも重要なポイントでした。
単純に存在確認だけをしたい場合はtestで十分ですが、
実際の処理では「存在することを確認したうえで、その正確な場所を取得したい」
という場面が少なくありません。
そうした場合にrealpath -eを使うことで、
処理の流れをシンプルに保ちつつ、読みやすいスクリプトを書くことができます。
まとめとしてのサンプル確認
最後に、存在確認と絶対パス取得を同時に行う基本的な使い方を改めて確認しておきましょう。 ここでは一般ユーザーとしてコマンドを実行しています。
realpath -e /etc/hosts
/etc/hosts
一方で、存在しないファイルを指定した場合は、次のように明確なエラーが返ります。
この挙動によって、誤ったパスを早い段階で検出できる点が、
realpath -eの大きなメリットです。
realpath -e /etc/hostss
realpath: '/etc/hostss' を解決できません: そのようなファイルやディレクトリはありません
生徒
「最初はrealpathって、ただパスを変換するだけのコマンドだと思っていましたが、
-eオプションを使うと安全性が全然違うんですね。
存在しないファイルをそのまま扱わないのは、スクリプトを書くときに特に重要だと感じました。」
先生
「そうですね。Linuxコマンドは便利な反面、使い方を間違えると想定外の動きをします。
realpath -eは、存在確認と絶対パス取得を同時に行えるので、
実務でもよく使われる組み合わせです。」
生徒
「testコマンドとの違いも分かりました。
確認だけならtest、パスまで必要ならrealpath -e、
というふうに使い分ければよさそうですね。」
先生
「その理解で大丈夫です。 Linuxではファイルパスの扱いがとても重要なので、 こうした基本コマンドを正しく使えるようになると、 トラブルを未然に防げるようになりますよ。」