realpath --canonicalize-missingの使い方を初心者向けに解説!存在しないパスも正しく表示する方法
生徒
「Linuxで、まだ存在していないファイルやディレクトリのフルパスを確認したいんですが、どうすればいいですか?」
先生
「それなら、realpathコマンドの--canonicalize-missingオプションを使うと便利ですよ。」
生徒
「それって、-mオプションと同じですか?」
先生
「その通りです。--canonicalize-missingは、-mと同じ働きをします。では、どんなときに使えるのか一緒に見ていきましょう!」
1. realpathコマンドとは?
realpath(リアルパス)コマンドは、Linuxで指定したパスを「絶対パス(フルパス)」に変換して表示するためのコマンドです。
絶対パスとは、「どの場所にファイルやディレクトリがあるか」をルートディレクトリ(/)からすべての階層をたどって表す書き方のことです。
たとえば、相対的な場所である../test/file.txtなどを、実際のフルパスである/home/user/test/file.txtのように変換してくれます。
2. --canonicalize-missingオプションとは?
--canonicalize-missingオプションは、指定されたファイルやディレクトリがまだ存在していない場合でも、パスの正規化(整った形に変換)を行ってくれる便利なオプションです。
たとえば、「まだ作っていないファイルの場所」を確認したいときなどに使えます。
このオプションは短縮形として-mでも同じ意味になります。どちらを使っても動作は同じです。
3. 存在しないパスでも正規化できる例
次のようなコマンドを実行してみましょう。今回は、まだ作っていないdata/report.txtというファイルのパスを確認してみます。
realpath --canonicalize-missing ./data/report.txt
/home/user/data/report.txt
このように、たとえdataやreport.txtが存在しなくても、パスを絶対パスで教えてくれます。
4. 存在するパスとの違いを確認
もし、同じコマンドを--canonicalize-existing(または省略)で実行した場合、ファイルやディレクトリが存在しないとエラーになります。
realpath ./data/report.txt
realpath: ./data/report.txt: No such file or directory
このように、存在することが前提のコマンドでは、ファイルが無いと怒られてしまうのです。だから、--canonicalize-missingを使うと安心ですね。
5. --canonicalize-missingと-mの違いは?
実は、--canonicalize-missingと-mには機能的な違いはありません。どちらを使っても結果は同じになります。
違いは書き方だけで、--canonicalize-missingは「わかりやすい英語表記」、-mは「短くて打ちやすい略記」という違いです。
6. ディレクトリ構造が一部欠けていても大丈夫
次のように、途中のディレクトリがいくつか存在しない場合でも、正規化された絶対パスを表示できます。
realpath --canonicalize-missing ./archive/2025/09/report.txt
/home/user/archive/2025/09/report.txt
このように、実際にファイルやフォルダが存在しなくても、realpathコマンドは「あると仮定して」パスを組み立ててくれます。
7. 応用:スクリプト内での使用例
たとえば、シェルスクリプトなどでファイルを先に指定してパスを計算しておきたいときに便利です。
#!/bin/bash
target_path=$(realpath --canonicalize-missing ./temp/output.txt)
echo "出力ファイルのパスは:$target_path"
このように、あらかじめファイルの保存場所を計算しておきたいときに役立ちます。
8. 他のrealpathオプションとの違い
realpathコマンドには、他にもいくつかのオプションがあります。以下に違いを簡単にまとめます。
realpath:ファイルやディレクトリが存在していないとエラーになる。realpath -m:存在しないものでもパスを正規化して表示。realpath -e:存在しているものだけを対象にする(エラーが出やすい)。
初心者の方がパスの確認をしたいときには、-mや--canonicalize-missingを使うのが安心です。
9. realpathとreadlinkの違いは?
realpathと似たコマンドにreadlinkがあります。readlinkもファイルの実際の場所を調べるコマンドですが、realpathのほうが柔軟で高機能です。
特に--canonicalize-missingのように、「存在しないファイルでも扱える」という点では、realpathの方が便利です。