カテゴリ: Linuxコマンド集 更新日: 2026/04/09

realpath --canonicalize-existingオプションの使い方を解説!Linuxで既存パスだけ絶対パス化する方法

realpath --canonicalize-existingオプション|-eと同じ挙動で既存パスだけ処理する
realpath --canonicalize-existingオプション|-eと同じ挙動で既存パスだけ処理する

先生と生徒の会話形式で理解しよう

生徒

「Linuxでrealpathコマンドを使って絶対パスを取得してるんですが、間違ったパスでも普通に表示されてしまって困っています…」

先生

「それはrealpathの仕様なんですが、実在するパスだけを対象にしたい場合には--canonicalize-existingというオプションを使うといいですよ。」

生徒

「あ、それって-eと同じでしたっけ?」

先生

「その通りです。実は--canonicalize-existing-eの正式名称なんです。では、使い方を詳しく見てみましょう!」

1. realpathコマンドとは?

1. realpathコマンドとは?
1. realpathコマンドとは?

realpath(リアルパス)コマンドは、Linuxでファイルやディレクトリの絶対パスを表示するために使われるコマンドです。シンボリックリンク(ショートカットのようなもの)を解決して、本当に存在する場所(フルパス)を出力してくれます。

しかし、通常のrealpathでは、まだ存在しないファイルのパスでも絶対パスとして表示されてしまうため、間違ったパスでも結果が出てしまうという問題があります。

2. --canonicalize-existingオプションとは?

2. --canonicalize-existingオプションとは?
2. --canonicalize-existingオプションとは?

--canonicalize-existingオプションは、指定したファイルやディレクトリが本当に存在している場合にのみ、その絶対パスを表示するようにするためのものです。

このオプションを使うことで、タイプミスや削除されたパスなど、存在しないファイルを誤って処理してしまうリスクを減らすことができます。

実際には-eとまったく同じ動作をしますが、--canonicalize-existingの方が意味が明確で読みやすく、スクリプトや自動処理に向いていると言えます。

3. 基本的な使用例

3. 基本的な使用例
3. 基本的な使用例

それでは、まず存在しないファイルを指定してみましょう。


realpath --canonicalize-existing missing.txt
realpath: 'missing.txt' を解決できません: そのようなファイルやディレクトリはありません

このように、存在しないファイルを指定すると、エラーになります。

次に、存在するファイルを指定した場合を見てみましょう。


realpath --canonicalize-existing /etc/hosts
/etc/hosts

このように、実際にあるファイルであれば、正しい絶対パスが表示されます。

4. --canonicalize-existingと-eの違いは?

4. --canonicalize-existingと-eの違いは?
4. --canonicalize-existingと-eの違いは?

結論から言えば、--canonicalize-existing-e同じ機能です。

つまり、以下の2つのコマンドはまったく同じ動きをします:


realpath --canonicalize-existing /etc/hosts
realpath -e /etc/hosts

どちらを使うかは好みの問題ですが、可読性を重視したいときや、スクリプトで処理の意図を明確にしたいときには、長い名前の--canonicalize-existingを使うと良いでしょう。

5. 存在する親ディレクトリをたどって処理する例

5. 存在する親ディレクトリをたどって処理する例
5. 存在する親ディレクトリをたどって処理する例

--canonicalize-existingを使うと、指定したファイル自体だけでなくその親ディレクトリすべてが存在しているかもチェックされます。

たとえば、以下のように入力してみます。


realpath --canonicalize-existing ./non/exist/file.txt
realpath: './non/exist/file.txt' を解決できません: そのようなファイルやディレクトリはありません

このように、nonexistという途中のディレクトリが存在しない場合も、エラーになります。

これは、安全にパスの検証をしたいときにとても役立ちます。

6. スクリプトでの活用例

6. スクリプトでの活用例
6. スクリプトでの活用例

以下のようにシェルスクリプト内で使うと、入力されたパスが実在するかどうかを確認してから処理できます。


path=$(realpath --canonicalize-existing "$1" 2>/dev/null)
if [ -z "$path" ]; then
  echo "指定されたパスは存在しません"
  exit 1
fi
echo "絶対パス:$path"

このように使えば、存在しないパスを誤って処理するのを防げるため、セキュリティや正確性が求められる場面でも安心して使えます。

7. 他のオプションとの比較

7. 他のオプションとの比較
7. 他のオプションとの比較

realpathには他にもさまざまなオプションがあります。以下はその一部です:

  • --canonicalize-missing-m):存在しないファイルでも絶対パスを表示
  • --no-symlinks:シンボリックリンクを解決せずに表示
  • --logical:論理的なパスを表示(デフォルト)

今回の--canonicalize-existingは、安全性と確実性を重視する場面にぴったりのオプションです。

まとめ

まとめ
まとめ

realpathと--canonicalize-existingの理解を深める

今回はLinux環境において絶対パスを取得するためのrealpathコマンドと、その中でも特に重要なオプションである--canonicalize-existingについて詳しく解説してきました。日常的にファイル操作やディレクトリ管理を行う中で、パスの扱いは非常に重要です。特にシェルスクリプトや自動処理を行う場面では、誤ったパスを扱ってしまうことが重大な不具合やトラブルにつながる可能性があります。

通常のrealpathコマンドは便利ではあるものの、存在しないパスであっても絶対パスとして変換してしまうという特徴があります。この挙動は一見便利に見える反面、実在しないファイルを前提とした処理を進めてしまうリスクを内包しています。そのため、安全性や正確性が求められる現場では、存在確認を含めたパス解決が不可欠です。

安全なパス処理を実現するポイント

そこで役立つのが--canonicalize-existingオプションです。このオプションを使用することで、指定したパスが実際に存在する場合にのみ絶対パスを返すようになります。つまり、存在しないファイルやディレクトリを誤って処理してしまうリスクを大幅に減らすことができます。

また、このオプションは-eという短縮形でも利用できるため、用途や記述スタイルに応じて使い分けることができます。特に可読性を重視する場合やチーム開発でスクリプトを共有する場合には、意味が明確に伝わる長い形式の方が好まれることも多いです。

実務で役立つ活用方法

実務では、ユーザーから入力されたパスを検証したり、設定ファイルの存在確認を行ったりするケースが頻繁にあります。そのような場面で--canonicalize-existingを活用することで、事前に安全性を確保したうえで処理を進めることができます。


path=$(realpath --canonicalize-existing "$1" 2>/dev/null)
if [ -z "$path" ]; then
  echo "指定されたパスは存在しません"
  exit 1
fi
echo "安全に確認された絶対パス:$path"

このように、事前にパスの存在確認を行うことで、システムの安定性を高めることができます。特にバックアップ処理やファイル削除処理など、誤操作が致命的になる場面では必須のテクニックといえるでしょう。

基本動作の振り返り

存在しないパスを指定した場合にはエラーとなり、処理を止めることができます。一方で存在するパスであれば、シンボリックリンクも解決された正確な絶対パスが返されます。この動作を理解しておくことで、より信頼性の高いLinux操作が可能になります。


realpath --canonicalize-existing /etc/hosts
/etc/hosts

また、途中のディレクトリが存在しない場合もエラーになるため、ディレクトリ構造全体の整合性チェックにも活用できます。


realpath --canonicalize-existing ./invalid/path/file.txt
realpath: './invalid/path/file.txt' を解決できません: そのようなファイルやディレクトリはありません

学習のポイント整理

realpathコマンドは単なるパス変換ツールではなく、ファイルの存在確認やパスの正規化といった重要な役割を担っています。その中でも--canonicalize-existingは、安全性を担保するための必須オプションといえます。Linuxコマンドを正しく理解し、適切なオプションを選択することが、効率的でミスの少ない作業につながります。

先生と生徒の振り返り会話

生徒

realpathコマンドは絶対パスを取得するためのコマンドだけど、普通に使うと存在しないパスでも表示されてしまうんですね

先生

その通りです。だからこそ--canonicalize-existingを使うことで、本当に存在するパスだけを扱うようにするのが重要です

生徒

なるほど、スクリプトで使うときに安全性が上がるということですね

先生

はい。特にファイル削除やコピー処理などでは、存在しないパスを前提に処理を進めてしまうと大きなトラブルになります

生徒

短縮形の-eも同じ意味だから、用途に応じて使い分ければいいんですね

先生

その理解で問題ありません。可読性を重視するなら長い形式、簡潔さを重視するなら短縮形を使うとよいでしょう

生徒

Linuxコマンドはオプション一つで動作が大きく変わるので、しっかり理解して使うことが大切ですね

先生

その意識があれば十分です。今回の内容を押さえておけば、安全で正確なパス処理ができるようになります

関連記事:
カテゴリの一覧へ
新着記事
New1
ファイル・ディレクトリ操作
stat -Lオプションの使い方を解説|シンボリックリンクをたどってファイル情報を確認しよう
New2
ファイル・ディレクトリ操作
realpath -eオプションの使い方を解説!Linuxで存在するファイルのみ絶対パスを取得する方法
New3
テキスト処理とフィルタ
tacコマンドの基本!ファイル内容を逆順に表示する方法
New4
テキスト・データ処理
awk -fオプションの使い方を完全ガイド!初心者でもわかるLinuxテキスト処理の基本
人気記事
No.1
Java&Spring記事人気No1
テキスト・データ処理
catコマンドとは?Linuxでファイル内容を表示・連結する基本
No.2
Java&Spring記事人気No2
ファイル・ディレクトリ操作
pwdコマンドとは?初心者でもわかる現在の作業ディレクトリの確認方法を解説!
No.3
Java&Spring記事人気No3
ファイル・ディレクトリ操作
findコマンドの使い方を完全ガイド!初心者でもわかるLinuxのファイル検索の基本
No.4
Java&Spring記事人気No4
ファイル・ディレクトリ操作
cd ~ の使い方を完全解説!ホームディレクトリへの移動方法と初心者向けLinuxコマンド入門