Linux 講座 / ファイルとディレクトリ管理 - 作成・コピー・移動・削除

Linuxでファイルとディレクトリを管理するときは、mkdirでディレクトリを作り、touchで空のファイルを準備し、cp・mvでコピーまたは移動します。削除にはrmとrmdirを使用します。この講座ではホームディレクトリ内に別の練習スペースを作り、作業の前後の状態を確認しながらこれらのコマンドを安全に組み合わせて試します。

ファイルを作成して移動するときは、現在の場所とパスの確認をまず適用してください。この記事の練習用ディレクトリがすでにある場合は別の新しい名前を決め、作成が失敗した状態で以降のコマンドを実行しないでください。

練習スペースを準備する

以下の練習はBashと一般ユーザーアカウントで進めます。~/linux-course-07-practiceは練習用に新しく作るディレクトリです。同じ名前のディレクトリがすでにある場合は既存のデータに触れずに別の名前を決めてください。下記mkdirコマンドはすでに存在するとエラーを出すため、最初に実行する際の確認手段となります。

mkdir ~/linux-course-07-practice

成功すると通常は何もメッセージは出ません。ls -ld ~/linux-course-07-practiceでディレクトリが作成されたか確認してください。その後のコマンドは、第1段階が成功し、該当ディレクトリが空である前提で実行されます。

ls -ld ~/linux-course-07-practice

実習のために2つのサブディレクトリを作成し、その中のリストを確認します。

mkdir ~/linux-course-07-practice/drafts ~/linux-course-07-practice/archive

ls ~/linux-course-07-practice

このときリストにはarchiveとdraftsが表示されます。より深いパスを一度に作成したい場合はmkdir -pが便利ですが、既存のディレクトリも許可されるので、今回の実習では使用しません。

空ファイルを作成して確認する

touchに存在しないファイル名を指定すると空ファイルが作成されます。すでに存在するファイルに対して実行すると、新たに作成する代わりに修正日時などを更新できるため、「新しいファイルだけを作成するコマンド」と考えてはいけません。

touch ~/linux-course-07-practice/drafts/notes.txt

ls -l ~/linux-course-07-practice/drafts/notes.txt

さきほど作成したファイルなので、ls -lでのファイルサイズは通常0バイトと表示されます。権限や日付はシステム設定によって異なります。touchはファイルに内容を書き込まず、ファイル内容を作成するにはエディタや他のコマンドが必要です。

コピーと移動の違いを確認する

cpは元のファイルを残して新しいコピーを作ります。以下のコマンドはdraftsのファイルをarchiveにコピーします。-iは同じ名前の対象がすでにある場合に上書きする前に尋ねるGNU cpオプションです。

cp -i ~/linux-course-07-practice/drafts/notes.txt ~/linux-course-07-practice/archive/notes.txt

ls -1 ~/linux-course-07-practice/drafts

ls -1 ~/linux-course-07-practice/archive

上記の2つのls -1コマンドの出力は順番に次の通りです。それぞれdraftsおよびarchiveにnotes.txtが残っています。ファイルの内容を修正しても、2つのファイルは自動的に同期されるわけではありません。

notes.txt

notes.txt

mvはファイルを別の場所に移動するか、同じディレクトリ内で名前を変更します。以下のコマンドは元のファイルの名前をnotes-old.txtに変更します。保存しておいたコピーの名前はそのままです。

mv -i ~/linux-course-07-practice/drafts/notes.txt ~/linux-course-07-practice/drafts/notes-old.txt

ls -1 ~/linux-course-07-practice/drafts

ls -1 ~/linux-course-07-practice/archive

今回は1行目がdraftsのnotes-old.txt、2行目がarchiveのnotes.txtです。つまり元の名前だけが変更され、コピーは保持されます。

notes-old.txt

notes.txt

cpや mv の最後の引数が既存のディレクトリである場合、その中に同じ名前で入ることになるため、実行前に対象がファイルかディレクトリか確認する必要があります。-i を使用する場合でも、プロンプトを無意識に承認しないでください。

ファイルと空ディレクトリを削除する

rm は指定したファイルを削除します。基本的にゴミ箱に送られないので、パスをまず ls で確認してください。以下の -i は削除前に確認を求めます。質問が出たらファイル名を確認し、同意する場合のみ進めてください。

ls -l ~/linux-course-07-practice/drafts/notes-old.txt

rm -i ~/linux-course-07-practice/drafts/notes-old.txt

削除に同意した場合、drafts は空です。空ディレクトリだけを削除する rmdir で実習してみてください。

rmdir ~/linux-course-07-practice/drafts

ls ~/linux-course-07-practice

最後の一覧には archive が残ります。archive には notes.txt があるため、rmdir ~/linux-course-07-practice/archive は、中にファイルが残っているため失敗します。実習資料は保存しておき、不要になったときに正しいパスを確認して別途整理してください。初級段階で rm -rf によってディレクトリ全体を一度に削除する方法は推奨しません。

作業前に確認すること

  • 現在の位置: 相対パスを使用する場合は pwd で基準ディレクトリを確認します。
  • 対象: ls -ld でファイル・ディレクトリ自体と名前を確認します。
  • 上書き: 重要なファイルはコピー・移動する前にバックアップを取り、目的地に同じ名前があるか確認します。
  • 削除: rm は基本的に復元手段を提供しないので、パスを短く推測して入力しません。

コマンドごとの様々なオプションや例外は、touch、mkdir、cp、mv、rm、rmdir の詳細記事で確認できます。

公式ドキュメント

各コマンドの正確な動作とオプションについては、GNU Coreutils公式マニュアルを参照してください。インストールされている実装のオプションはmanや--helpで再確認することをおすすめします。