ファイル・ディレクトリ操作の全体像

ファイル操作ではコマンド名だけでなく、元と先がファイルかディレクトリかを確認することが大切です。コピー、移動、削除で何が残るかを追い、内容の検証と名前の検証を分けます。GNUの基本コマンドを使い、自分で作った実習用ファイルだけを操作します。

この単元で学ぶこと

  • cpとmvで操作後に残るパスを予測できる
  • 相対パス・空白・先頭ハイフンを安全に扱える
  • 内容とファイルの存在を確認して操作を検証できる

本文解説

最初に現在位置を確認する pwdは現在の作業ディレクトリを表示します。notes/a.txtは現在位置を基準にした相対パス、/tmp/notes/a.txtはルートからの絶対パスです。ls -lは指定した場所の内容や属性を確認します。ディレクトリ自身の属性を見るときはls -ld dirを使い、配下の一覧と区別します。

コピーは元を残す cp source.txt copy.txtは通常ファイルの内容を別のファイルへコピーし、source.txtも残します。copy.txtが存在しなければ作成されます。既存ファイルなら通常は上書きの対象になるため、作業前に出力先を確認します。cp -iは上書きの確認を求める指定です。

出力先がディレクトリの場合 backupが既存ディレクトリならcp source.txt backupはbackup/source.txtを作ります。backupが存在しない場合、同じコマンドはbackupというファイルを作ります。「先の名前がbackupだからフォルダーになる」のではありません。複数の元を指定してcp a.txt b.txt backupとする場合は、最後を既存ディレクトリにします。

移動と名前変更 mv old.txt new.txtは、移動先が存在しない通常ファイル名なら名前を変えます。成功後はold.txtという名前がなくnew.txtが残ります。既存ディレクトリarchiveへmv new.txt archiveとすればarchive/new.txtへ移します。別ファイルシステムへの移動ではコピーと元の削除を伴う場合があり、常にメタデータ変更だけで済むとは限りません。

ディレクトリを用意・コピーする mkdir workはディレクトリを作ります。mkdir -p work/day1は必要な親も作成し、既に存在する適切なディレクトリをエラー扱いしません。ディレクトリのコピーにはcp -Rなど再帰指定が必要です。cp -aはGNUでは再帰に加え属性やリンクを可能な範囲で保持する指定で、普通のファイル内容のコピーと区別します。

削除は対象を明示する rm duplicate.txtは通常、その名前をファイルシステムから取り除き、デスクトップのごみ箱へ送る操作ではありません。空のディレクトリを消すrmdir workは、中身があれば失敗します。初心者の実習ではrm -rを使って広い範囲を削除せず、作成した名前を明示して状態の変化を確認します。

シェルが引数を作る 空白入りの名前はcp "draft note.txt" "copy note.txt"のように引用符で一つの引数にします。-memoのようにハイフンから始まる名前はGNUコマンドではcp -- -memo copyのように--でオプションの終わりを示すか、./-memoと相対パスにします。通常のBashの*は先頭ドットの隠しファイルに一致しない点も確認します。

実習と成功条件 lesson_dir=$(mktemp -d)で専用場所を作り、printf "draft\n" > "$lesson_dir/source.txt"、mkdir "$lesson_dir/backup"、cp "$lesson_dir/source.txt" "$lesson_dir/backup/"を順に実行します。catで両方がdraftの一行であることを確認し、cmp -sで同一内容なら終了状態0を確認します。mv "$lesson_dir/backup/source.txt" "$lesson_dir/backup/final.txt"後は元のsource.txtが残り、backup/source.txtがなく、backup/final.txtがあることをtest -fなどで確認します。

失敗の切り分け 存在の確認はtest -f、内容の比較はcmp、属性の確認はls -lやstatで行います。内容が同じでも権限や時刻まで同じとは限りません。cpに失敗したら元の読取り権、先の親ディレクトリ、空き容量などを調べ、単に同じコマンドを繰り返して成功扱いにしないようにします。

図解

コピーと名前変更を区別
存在するパスと内容を操作ごとに確認する。表示名だけで操作成功を判定しない。

重要ポイント

  • cpは元を残し、mvは元の名前を移す。
  • 最後の引数が既存ディレクトリかどうかで結果が変わる。
  • 空白は引用符、先頭ハイフンは--や./で扱う。
  • 名前の存在・内容・属性を別々に検証する。

間違えやすい点

  • 出力先の名前だけを見てディレクトリだと決め付けない。
  • rmがごみ箱へ移すと思わない。
  • cp成功で全ての属性も同じになると思わない。

用語解説

相対パス
現在の作業位置を基準とするパス。
絶対パス
ルートから位置を表すパス。
再帰コピー
ディレクトリの配下をたどり、含まれる内容もコピーする処理。
オプション終端
--により、後続をオプションとして解釈しないようにする指定。
隠しファイル
Unix系で先頭がドットの名前。通常のlsでは省略される。

参考資料

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

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