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はそのファイルの絶対パスまで出力できるのが強みです。