絶対パスと相対パスのコマンド/運用演習

現在位置を変えながら、同じパス表記がどこへ到達するかを練習します。設問はリンクなし、指定のディレクトリは存在して移動可能、BashのCDPATHは未設定を前提とします。

この単元で学ぶこと

  • 絶対パスと相対パスの基点を区別する
  • 現在位置と.・..から到達先を求める
  • 引用・ホーム展開・サブシェルによる違いを検証する

本文解説

階層を用意 作業用ルートの下にa/bとcを作り、以後の実験をその中だけで行います。mkdir -p a/b cの後にpwdで基点を記録します。問題の/workなどは階層を説明する仮の場所なので、実習時は自分で作った専用場所に読み替えます。

二段戻る 現在位置/work/a/bから../../cは、最初の..で/work/a、次の..で/workへ戻り、cへ入って/work/cになります。..の個数と現在位置の階層を対応させます。../cなら/work/a/cであり、似た表記でも場所が違います。

移動後の同じ相対パス /work/aでb/file.txtは/work/a/b/file.txtです。その後/workへ戻れば同じb/file.txtは/work/b/file.txtになります。ディレクトリ移動を挟む手順では、各コマンドの直前の現在位置を記録します。

絶対パスは基点固定 /work/aにいても/work/cにいても、/work/a/b/file.txtという絶対パスは同じ場所を指定します。先頭/の有無を見落とすと別の場所を扱います。/work/aから/work/cへは絶対パス/work/cでも相対パス../cでも移動できます。

以前の位置 Bashのcd -はOLDPWDに保存された以前のディレクトリへ移り、そのパスを表示します。/work/aからcd ../cで/work/cへ進み、その後cd -なら/work/aへ戻ります。cd ..のように親を指定するものではありません。

失敗時に後続を止める cd missing && printf 'OK\n'ではmissingが存在せず移動に失敗するとOKを表示しません。単にセミコロンで続けると、後続コマンドが元の場所で動く場合があります。ファイル操作前に移動成功を条件にすることが大切です。

引用と環境変数 HOMEが/work/home spaceなら"$HOME/notes"は空白を含む一つのパスになります。"~/notes"は~が文字どおり残るので同じ指定ではありません。変数を引用なしで展開する方法には分割などの影響があるため、パス変数は二重引用で保護します。

親子の状態を照合 親でpwd、括弧内でcd a/bとpwd、括弧の後でpwdを実行し、親の位置が保持されることを確認します。同じ処理を括弧なしで行うと、その後の相対パスの基点が変わります。リンクありの実機ではpwd -Lと-Pの差を別途確認し、本演習のリンクなしの結果から一般化しません。

図解

同じファイルへ二つの道
相対パスは短く書けるが、現在位置とセットで読む。

重要ポイント

  • 絶対パスは/から始まり、相対パスは現在位置が基点。
  • .は現在、..は親。
  • ~の展開はシェルが行い、引用の影響を受ける。
  • cd失敗時とサブシェル内の移動では親の現在位置を決めつけない。

間違えやすい点

  • /と/rootを同じ場所だと考えない。
  • pwdを確認せず相対パスの到達先を決めない。
  • "~/..."をホーム展開すると誤解しない。
  • リンクがある場合まで単純な文字列の打消しで計算しない。

用語解説

絶対パス
ルート/を基点に指定するパス。
相対パス
作業ディレクトリ等の基点から指定するパス。
作業ディレクトリ
プロセスが相対パスを解釈するときの現在位置。
サブシェル
親と別の実行環境でシェルの処理を行う仕組み。
ホーム展開
引用されていない語頭の~等をホームのパスへ置き換えるシェルの処理。

関連教材

参考資料

教材データに登録された参考リンクです。リンク先の内容や更新日は提供元でご確認ください。

確認問題の出題・採点や学習履歴の保存にはログインが必要です。