realpath リアルパス

英語表記realpath

日本語表記実体パス正規化

正式名称realpath

危険度安全

What does it mean?

パスを絶対化し、.や..、シンボリックリンクを整理して正規化された経路を表示します。比較、基準化、自動化で便利です。

Command Quest

realpath を今日の道具にする

パスを絶対化し、.や..、シンボリックリンクを整理して正規化...

$ realpath [オプション]... パス...
関連用語3
次のコマンド0
FAQ2
参照2

概要

パスを絶対化し、.や..、シンボリックリンクを整理して正規化された経路を表示します。比較、基準化、自動化で便利です。

基本構文

realpath [オプション]... パス...

詳細解説

realpathは、与えられたパスを正規化し、分かりやすい絶対パスへ変換するコマンドです。相対要素の.や..を整理し、必要に応じてシンボリックリンクをたどることで、同じ場所を指す複数表記を一つにそろえられます。

実務では、スクリプトの基準ディレクトリを固定したい時、ユーザー入力のパスを比較可能な形へそろえたい時、複数の参照経路が本当に同じ実体か確認したい時に便利です。dirnameやbasenameと組み合わせると、構成ファイルの所在計算が読みやすくなります。

ただし、どこまで存在を要求するかで挙動が変わります。存在を厳密に求めるか、存在しない末尾も含めて正規化したいかを、-eや-mで明示して使い分けると事故が減ります。

このコマンドを使う場面

相対パスを安定した絶対パスにそろえたい時、同じ実体かどうか比較したい時、スクリプトの起点ディレクトリを決めたい時に使います。

まず安全に試す方法

1. mkdir -p /tmp/realpath-demo/a && cd /tmp/realpath-demo
2. ln -s a linka
3. realpath ./linka/..
4. realpath -e ./linka
5. realpath -m ./missing/../a

-eと-mの違いを確認してください。

3分ミッション

少しでも手を動かすと定着しやすくなります。終わった項目にチェックを入れてください。

  1. 現在位置から複雑な相対パスを入力し、絶対パスへそろえます。

  2. -eと-mで、存在しない経路を含むパスの扱いがどう変わるか確認します。

オプション

  • -e
    すべての要素が存在する場合のみ正規化します。
    realpath -e ./current
  • -m
    存在しない要素を含んでも可能な範囲で正規化します。
    realpath -m ./missing/../data
  • -s
    シンボリックリンクをたどらずに字面中心で正規化します。
    realpath -s ./link/../x

実行結果サンプル

  • realpath ./.
    /tmp/realpath-demo
  • realpath -m ./missing/../a
    /tmp/realpath-demo/a

戻り値コード

  • 0 正常終了。指定条件で正規化パスを表示できました。
  • >0 存在要件を満たさない、解決できない、オプション不正などで失敗しました。

使用例

  • realpath ./script.sh
  • realpath -e ./current
  • realpath -m ./missing/../data

よくあるエラー

  • realpathで失敗する
    原因: -e相当の存在要件に対し、途中または末尾の要素が存在しません。
    対処: 存在確認後に実行するか、用途に応じて-mを使います。
  • リンク先を残したまま字面だけ整えたかった
    原因: 既定でリンク解決まで進む実装を使っています。
    対処: 必要なら-sで字面中心の正規化を選びます。

導入・互換性情報

realpathはGNU系やBSD系で使えますが、POSIXの中核標準ではありません。-eや-m、-sの挙動は実装差があるため、移植性が必要なスクリプトでは事前確認が必要です。

注意点 / セキュリティリスク

危険度は低いですが、存在要件を誤ると想定外の失敗や、逆に存在しない経路をあたかも有効な経路として扱う原因になります。用途に応じて-eと-mを使い分けてください。

FAQ

  • Q. readlink -fとほぼ同じですか。
    A. 似ていますが、realpathは正規化結果を得る意図が明確で、存在要件の制御もしやすい道具です。
  • Q. 存在しない出力先の親パス計算にも使えますか。
    A. はい。-mを使うと、存在しない末尾を含む場合でも整理に使えます。

関連用語

参照リンク

関連記事