絶対パスと相対パスのコマンド/運用演習
現在位置を変えながら、同じパス表記がどこへ到達するかを練習します。設問はリンクなし、指定のディレクトリは存在して移動可能、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を確認せず相対パスの到達先を決めない。
- "~/..."をホーム展開すると誤解しない。
- リンクがある場合まで単純な文字列の打消しで計算しない。
用語解説
- 絶対パス
- ルート/を基点に指定するパス。
- 相対パス
- 作業ディレクトリ等の基点から指定するパス。
- 作業ディレクトリ
- プロセスが相対パスを解釈するときの現在位置。
- サブシェル
- 親と別の実行環境でシェルの処理を行う仕組み。
- ホーム展開
- 引用されていない語頭の~等をホームのパスへ置き換えるシェルの処理。
関連教材
参考資料
教材データに登録された参考リンクです。リンク先の内容や更新日は提供元でご確認ください。
確認問題の出題・採点や学習履歴の保存にはログインが必要です。