realpath --stripオプションとは?初心者にもやさしくパスの正規化を解説!
生徒
「Linuxで./や../みたいな記号がついたパスって見かけますけど、あれってどういう意味ですか?」
先生
「あれは『相対パス』といって、自分が今いる場所からの位置関係を表す記号なんです。」
生徒
「なるほど…でも、あの記号を取り除いてスッキリしたパスにしたい時ってどうすれば?」
先生
「そのときに便利なのがrealpathコマンドの--stripオプションなんですよ。正規化という操作で、.や..を取り除いてくれます。」
1. realpathコマンドとは?
realpathは、Linuxでファイルやディレクトリの絶対パスを取得するコマンドです。特に、相対パスをわかりやすく変換したいときに重宝されます。
たとえば、カレントディレクトリにある./test.txtの絶対パスを表示したいときはこう使います:
realpath ./test.txt
/home/user/Documents/test.txt
2. 相対パスとは?
./や../は相対パスを表します。これは「今いる場所からの相対的な位置」を意味します。
./は「現在のディレクトリ」../は「1つ上の階層」
たとえば、次のようなパスがあるとします:
./../Pictures/../Documents/./file.txt
このままだと、どこにあるのか非常にわかりにくいですよね。
3. --stripオプションとは?
--stripは、realpathコマンドの中でも、「相対パス記号(. や ..)を取り除く」ためのオプションです。
つまり、「パスを正規化してスッキリさせる」という働きをしてくれます。
たとえば、次のような長いパスがあったとします:
realpath --strip ./../Pictures/../Documents/./file.txt
/home/user/Documents/file.txt
このように、.や..を取り除いて、正しい絶対パスだけを表示してくれます。
4. --stripの効果を図で理解しよう
以下のようなパスがあるとします:
./../A/./B/../C/file.txt
これを人間がたどるとこうなります:
..→ 1階層上へA→ Aディレクトリへ.→ そのままB→ Bディレクトリへ..→ Bから1階層上へ(つまりA)C→ Cディレクトリへfile.txt→ ファイル
最終的に「A/C/file.txt」になります。
--stripを使うと、この変換を自動でやってくれるのです。
5. --stripと-sの違いは?
realpathには-s(--no-symlinks)というオプションもあります。
--stripはパスの中の記号を取り除く(正規化)-sはシンボリックリンクを辿らない
つまり、用途が全く異なりますので注意が必要です。
6. --stripを使った便利な実用例
複雑なスクリプトを組むときや、ユーザーから入力されたパスを正しく処理したいときに、--stripは非常に役立ちます。
たとえば、次のようなシェルスクリプトで使うと便利です:
realpath --strip "$1"
これで、ユーザーが入力したパスがどんなに複雑でも、スッキリしたパスとして使うことができます。
7. 絶対パスだけが必要なときに重宝する
Linuxの世界では、コマンドに渡すパスが明確であることが重要です。特にcronジョブやバックアップ処理などで、曖昧なパスを使うと失敗の原因になります。
--stripで正規化しておけば、コマンド処理の信頼性もぐっと上がります。
8. ファイルが存在しなくても正規化可能
通常のrealpathでは、ファイルが存在しないとエラーになりますが、--stripを使えば、存在しないファイルでもパスだけを正規化できます。
realpath --strip ./abc/../xyz/new.txt
/home/user/xyz/new.txt
まだnew.txtがなくても正しいパスが表示されるのは大きな利点です。