絶対パス(absolute path)と相対パス(relative path)入門 - . と .. と ~ を理解する

絶対パス(absolute path)と相対パス(relative path)入門 - . と .. と ~ を理解する

この記事でできるようになること

  • 絶対パスと相対パスを使い分けられる
  • . と .. と ~ が指す場所を正しく読める

前提知識(先に読むと理解しやすい記事)

パスの読み方でつまずいていませんか?

cd ../logs.. って何?」「~/Documents~ ってどこ?」コマンドを学び始めると、こういう記号付きの「住所」に必ず出会う。これが パスファイルやディレクトリの場所を表す文字列。(path) だ。

この記事では、絶対パス(absolute path)と相対パス(relative path)の違いを説明する。. .. ~ という3つの記号の意味も、リナとライニー先輩の会話で整理していく。読み終わるころには、どんなパスを見ても「今どこを指しているか」が分かるようになる。

この記事でわかること

1. そもそもパスって何?

結論: パスはファイルやフォルダの「住所」。どのフォルダをたどればそこに着くかを、/ で区切って書いたもの。

リナ: ライニー先輩、コマンドの説明に出てくる /home/lina/memo.txt みたいなやつ、いつも何を表してるのか分からなくて…
ライニー先輩: それは「パス(path)」だよ。日本語では「経路けいろ」と言う。ファイルやフォルダの場所を示す住所だと思えばいい。
リナ: 住所、ですか?
ライニー先輩: そう。/home/lina/memo.txt は「home フォルダの中の lina フォルダの中にある memo.txt」という意味だよ。/(スラッシュ)はフォルダの区切り記号だね。
リナ: あの、説明でよく見る「ディレクトリ」という言葉は、フォルダとは別物ですか?
ライニー先輩: 同じものだよ。Windows や Mac で言う「フォルダ」を、Linux では「ディレクトリ」と呼ぶんだ。この記事では「フォルダ」と書く。ただし「カレントディレクトリ」のように用語として定着している言葉は、そのまま使うね。
リナ: なるほど。郵便の住所が「東京都→渋谷区→…」って絞り込んでいくのと似てますね。フォルダも1段ずつ降りていくイメージですか?
ライニー先輩: その通り。ルート(/)から1段ずつフォルダを降りていくのがパスの基本ルールだよ。

パス=ファイルへの道順

Linux では、すべてのファイルとフォルダが /(ルート)を頂点にした1本の木構造もくこうぞうに並んでいる。パスは、その木のどの枝をたどれば目的のファイルに着くかを示す「道順」だ。木構造そのものは、ディレクトリ構造の全体像 で詳しく解説している。

2. 絶対パスとは?

結論: 絶対パスは必ず /(ルート)から始まる。どこにいても同じ場所を指す住所だ。「東京都から書いた完全な住所」と同じだと考えるといい。

リナ: パスにも種類があるって聞いたんですけど、本当ですか?
ライニー先輩: 本当だよ。パスには大きく2種類ある。まずは「絶対パス(absolute path)」から説明するね。
リナ: 最初がスラッシュ、ですね。
ライニー先輩: そう。/ は木のてっぺん「ルートディレクトリ」を表す。絶対パスは、そこから目的地までを省略しょうりゃくせずに書くんだ。
リナ: だから、どこにいても同じ場所を指せるんですか?
ライニー先輩: その通り。たとえば /etc/hosts は、リナがどのフォルダにいても /etc/hosts のまま。郵便で言えば、都道府県から書いた完全な住所と同じだね。
cd /etc
pwd
/etc

/etc のように / で始まるパスを指定すると、現在地に関係なく必ずその場所へ移動できる。

絶対パスの目印は先頭の /

  • /(ルート)から書き始める
  • 現在地がどこでも結果は同じ
  • 設定ファイルやスクリプトなど「確実にこの場所」と指定したいときに向く

3. 相対パスとは?

結論: 相対パスは「今いる場所」を起点にした住所だ。専門用語では「カレントディレクトリ」(作業ディレクトリとも呼ぶ)という。/ では始まらず、現在地が変わると指す先も変わる。

リナ: もう1種類は何ていうんですか?
ライニー先輩: 「相対パス(relative path)」だよ。これは / から始まらない。「今いる場所」を起点にして道順を書くんだ。
リナ: 今いる場所が基準…?
ライニー先輩: そう。リナが /home/lina にいるとき、cd Documents と打つと /home/lina/Documents に移動する。「ここから見て Documents の中へ」という意味だね。
リナ: じゃあ、別の場所で同じ cd Documents を打ったら…?
ライニー先輩: 行き先が変わるよ。/var にいるなら /var/Documents を探しにいく。自分の立ち位置によって指す先が変わるから「相対」と呼ぶんだ。
pwd
/home/lina
cd Documents
pwd
/home/lina/Documents

相対パスは「今どこにいるか」で結果が変わる

同じ cd Documents でも、現在地(カレントディレクトリ)が違えば移動先が変わる。コマンドが思った通りに動かないときは、まず pwd で現在地を確認しよう。

4. . と .. と ~ の意味は?

結論: . は「今いる場所」を表す記号だ。.. は「1つ上の階層かいそう」を表す。~ は「自分のホームディレクトリ」を表す。

リナ: 本題なんですけど、. とか .. とか ~ って結局なんなんですか? ずっと謎で…
ライニー先輩: いい質問。相対パスを書くときに使う特別な記号だよ。3つまとめて覚えよう。
リナ: お願いします!
ライニー先輩: .(ドット1つ)は「今いる場所」を表す。..(ドット2つ)は「1つ上の階層」を表す。~(チルダ)は「自分のホームディレクトリ(作業を始めたときの初期位置、home directoryとも呼ぶ)」を表す近道だよ。
記号 読み方 意味
. ドット / カレント 今いる場所(カレント) ./script.sh(ここのスクリプト)
.. ドットドット 1つ上の階層 cd ..(親フォルダへ)
~ チルダ 自分のホームディレクトリ cd ~(ホームへ一発移動)

.. で1つ上に戻る

リナ: .. がいちばん見かける気がします。
ライニー先輩: よく使うよ。/home/lina/Documents にいるとき cd .. すると、1つ上の /home/lina に戻る。さらに cd .. すれば /home に行けるよ。
pwd
/home/lina/Documents
cd ..
pwd
/home/lina

.. は組み合わせも可能だ。cd ../../etc なら「2つ上に戻ってから etc に入る」という意味になる。

~ でホームに一発で帰る

リナ: ~ はどんなときに便利なんですか?
ライニー先輩: どこにいても cd ~ だけでホームディレクトリ(/home/lina など)に一発で戻れる。深いフォルダで迷子になったときの「帰宅ボタン」みたいなものだね。cd を引数なしで打っても同じ効果だよ。
cd ~
pwd
/home/lina

~/Documents のように書けば「ホームの中の Documents」を、今いる場所に関係なく指せる。

. はいつ使うの?

. は普段あまり打たない。スクリプトを実行するとき、./script.sh という形でよく登場する。これは「今いるフォルダにある script.sh」という意味だ。

. を付けないと、シェル入力したコマンドを解釈してコンピュータに実行させる対話プログラム。(打ったコマンドを受け取って実行するプログラム。ターミナルの中で動いている)は、決められたコマンド置き場だけを探す。今いるフォルダは探さない。だから見つからず失敗することがある。自作スクリプトの実行では ./ を付けるのが定番だ。

5. 絶対パスと相対パス、どう使い分ける?

結論: 確実に指定したいなら絶対パスを使う。近くの場所へすぐ移動したいなら相対パスが向く。同じ場所を両方の書き方で指せることも多い。

リナ: 結局、絶対パスと相対パスはどう使い分ければいいんですか?
ライニー先輩: 迷わず確実に指したいときは絶対パス。今いる場所のすぐ近くを指したいときは相対パスが楽だよ。
リナ: 両方で同じ場所を指せることもあるんですか?
ライニー先輩: あるよ。リナが /home/lina にいるとき、/home/lina/Documents(絶対)も Documents(相対)も行き先は同じだよ。短く書けるのが相対パスの強みだね。

同じ移動を2通りで書いた例を見てみよう(現在地が /home/lina の場合)。

cd /home/lina/Documents
cd Documents

どちらも結果は同じ /home/lina/Documents への移動だ。

使い分けのめやす

  • 絶対パス: 設定ファイル / スクリプト / 別の遠い場所を「確実に」指したいとき
  • 相対パス: すぐ隣・1つ上など「近場」を素早く指したいとき
  • 迷ったら絶対パスを使う。現在地に左右されないため事故りにくい

6. 迷子になったらどうする?

結論: pwd で現在地を確認するのが基本。相対パスがうまく動かないときは、まず今どこにいるかを疑う。

リナ: cd Documents と打ったら、英語のメッセージが出て移動できませんでした。さっきは同じコマンドで移動できたのに...! なんで今回だけ失敗するんですか?
cd Documents
bash: cd: Documents: No such file or directory
ライニー先輩: No such file or directory は「そんな名前のファイルやフォルダは見つかりません」という意味だよ。相対パスは今いる場所が基準になる。だから、思っていた場所と違う場所にいると失敗するんだ。
リナ: どうすれば直せますか?
ライニー先輩: 合言葉あいことばpwd。"print working directory" の略で、今いる場所を表示してくれる。エラーが出たら、まず pwd で現在地を確認しよう。
pwd
/var/log
リナ: あっ、/var/log にいました! さっきは /home/lina にいたから動けたんですね。今回は場所が違ったから失敗したんだ...! すっきりしました。

Documents がない」と言われたら、pwd の結果を見て「あ、今 /var/log にいるのか。じゃあ cd ~/Documents にしよう」と修正できる。ls で今いる場所の中身を一覧して、次に進めるフォルダを確認するのも有効だ。

ブラウザ上で実際にパス移動を練習できる。Penguin Gym Linux のターミナルcdpwd を何度も打って、現在地が変わる感覚を体で覚えよう。手を動かすのが上達の近道だ。

ミニ課題

結論: 3つの課題で、絶対パス・相対パス・. .. ~ の理解を確認する。

ライニー先輩: ここまでの内容を、3つの課題で確認してみよう。

課題1: リナは /home/lina/Documents にいる。ここから /home/lina に戻るには、どう入力すればいいか。

ヒント1(方向づけ)を見る

今いる場所から見て、目的地は1つ上の階層にある。表で見た記号の中に、この動きを表すものがあった。

ヒント2(コマンド名)を見る

cd .. を使う。

答えを見る
pwd
/home/lina/Documents
cd ..
pwd
/home/lina

課題2: リナは /var/log にいる。ここから自分のホームディレクトリ(/home/lina)に一発で戻るには、どう入力すればいいか。

ヒント1(方向づけ)を見る

絶対パスをフルで書かなくても、ホームディレクトリに一発で戻れる特別な記号があった。

ヒント2(コマンド名)を見る

cd ~ を使う。引数なしの cd でも同じ結果になる。

答えを見る
pwd
/var/log
cd ~
pwd
/home/lina

課題3: リナは /var にいる。相対パスで cd Documents としたら bash: cd: Documents: No such file or directory と表示された。ホームディレクトリの中の Documents へ確実に移動するには、どう入力すればいいか。

ヒント1(方向づけ)を見る

相対パスは今いる場所が基準になる。今いる場所に関係なく確実に目的地を指せるパスの種類を思い出そう。

ヒント2(コマンド名)を見る

cd に絶対パス、または ~ を組み合わせる。

答えを見る
pwd
/var
cd /home/lina/Documents
pwd
/home/lina/Documents

cd ~/Documents でも同じ場所に移動できる。

まとめ

  • パスはファイル・フォルダの「住所」。/ で区切って道順を書く
  • 絶対パス/(ルート)から始まり、現在地に関係なく同じ場所を指す
  • 相対パス/ で始まらず、今いる場所(カレントディレクトリ)が基準になる
  • . は今いる場所、.. は1つ上、~ は自分のホームディレクトリ
  • 相対パスでつまずいたら、まず pwd で現在地を確認する

次に読む

この記事を共有

次の一手