ファイルとディレクトリの操作
ファイルやフォルダは作る・コピーする・移動(名前変更)する・消す、の4操作が基本です。mkdir でフォルダを作り、touch で空ファイルを作成、cp で複製、mv で移動や改名、rm で削除します。rm は確認なしで消えるため、最初は対象をよく見てから実行する習慣をつけます。
場所をつかめるようになったら、次はその場所の中身を自分の手で動かす番だ。ファイルとディレクトリの扱いは、Linux操作の中核である。
やることは多そうに見えるが、煎じ詰めると「作る・複製する・移動(改名)する・消す」の4つに集約され、それぞれに対応するコマンドがある。
Linuxではデータの保存先であるディレクトリだけでなく、ハードウェアやプロセスへの入り口までファイルとして表現する。だからファイルを操作することは、事実上Linuxそのものを操作することに等しい。
まずは基本の4操作を、手を動かしながら身体で覚えていきたい。どのコマンドも、操作の前後に ls で状態を確かめることをセットにすると、何が起きたのかが目で追えて理解が早くなる。
🆕 入れ物を作る mkdir、中身を作る touch
まず「作る」から始めよう。入れ物であるディレクトリを作るのが mkdir(make directory)だ。mkdir universe とすれば、カレントディレクトリの直下に universe ができる。
ところが、途中の階層がまだ存在しないのに mkdir a/b/c のように一気に深く作ろうとすると、通常は「そのようなディレクトリはありません」とエラーになる。親が無いのに孫だけ作れないからだ。
そんなときは -p オプションを付ける。-p は不足している親ディレクトリ(この例なら a と a/b)も連鎖的に作ってくれるので、プロジェクト用のフォルダ構造をまとめて用意したいときに重宝する。
すでに存在するディレクトリに対して -p を使ってもエラーにならない。この性質は、繰り返し実行するスクリプトの中で便利に働く。
入れ物ではなく中身、つまり空のファイルを作りたいときは touch を使う。
本来 touch はファイルのタイムスタンプ(最終更新時刻)を現在時刻に更新するコマンドだ。だが指定した名前のファイルが存在しないときは、その名前で空ファイルを新規作成する。
touch memo.txt のように書く。複数まとめて touch a.txt b.txt c.txt と作ることもできる。
ここで初心者がよく不安になるのが、touch も mkdir も、成功すると何も表示しないことだ。だが、これは故障ではない。
Linuxのコマンドは「うまくいったら黙る」のが流儀(無言で成功)だ。本当に作れたかどうかは、続けて ls を打って一覧で確かめる。この確認の習慣をセットで身につけてほしい。
逆に、何かメッセージが出たら、それは多くの場合エラーや警告のサインだ。
📋 複製する cp
作れるようになったら、次は「複製する」だ。ファイルを複製するのが cp(copy)である。
書式は cp コピー元 コピー先 だ。cp apple orange とすれば apple はそのまま残り、その複製として orange が新しくできる。
ディレクトリをまるごと複製したいときは、中身も含めて再帰的にコピーする -r を付けて cp -r src dst とする。
複数のファイルを最後に指定したディレクトリへまとめて入れる cp file1 file2 dir/ という形も便利だ。ワイルドカード * を使った cp *.txt backup/ のような一括コピーもよく使う。
設定ファイルを編集する前に cp httpd.conf httpd.conf.bak のように複製してバックアップを取っておくのは、現場で身につけたい安全策のひとつだ。
cp には、見落とすと痛い目に遭う落とし穴がある。コピー先に同じ名前のファイルがあると、何も聞かずに上書きしてしまうのだ。
大事なファイルを意図せず潰さないよう、上書き前に確認を出す -i を付けると安全になる。
もう一つ知っておきたいのは時刻の扱いだ。通常の cp ではコピーした時刻が「いま」になってしまう。-a(または -p)を付けると元ファイルの更新時刻や権限を保ったまま複製でき、バックアップ用途で重宝する。
🔀 移動と改名をこなす mv
複製ではなく、ただ場所を変えたい、あるいは名前だけ変えたいときは mv(move)を使う。mv は「移動」と「改名」の両方を一手に引き受ける。
Linuxではこの2つを区別せず、どちらも同じ mv で行うのが特徴だ。
mv orange mikan のように、移動先に存在しない名前を指定すると改名になる。mv mikan citrus/ のように既存のディレクトリを指定すると、その中への移動になる。
複数ファイルを mv a.txt b.txt dir/ とまとめて移動することもできる。
cp と違って元のファイルは残らず移動する。こちらも上書き事故を避けたいときは -i を添えたい。
改名と移動が同じコマンドというのは最初は戸惑うが、「ファイルのパスを書き換える操作」と捉えると一本の理屈で理解できる。
⚠ 「消す」だけは特別に怖い
最後の操作が「消す」だ。削除はファイルなら rm(remove)、空のディレクトリなら rmdir(remove directory)を使う。
rmdir は中身が残っていると「ディレクトリは空ではありません」とエラーを出して削除しない。誤って中身ごと消す事故を防ぐ安全弁になる。
中身ごとディレクトリを消したいときは、再帰的に削除する -r を付けて rm -r dir とする。複数ファイルの一括削除や、rm *.tmp のようなワイルドカード指定もできるが、ここからが最も慎重さの要る領域だ。実行結果は ls で消えたことを確かめる。
作る・複製する・移動するに比べて、消すだけがこれほど怖いのには理由がある。最も強く意識してほしいのは、rm はゴミ箱を経由せず、確認もなしに即座に消すという点だ。
グラフィカルなファイルマネージャの「削除」とは性質が違い、消したものは原則として戻らない。
とりわけ rm -rf(-f は確認や警告を抑制する強制削除)や、ワイルドカード * を組み合わせた削除は強力で、対象を打ち間違えると意図しないファイルまで巻き込む。たとえば rm -rf / のような操作はシステム全体を破壊しかねない。
慣れるまでは、削除の前に同じ引数で ls を打って「何が対象になるか」を一覧で先に確認し、それから rm に置き換える。このひと手間をかけると安全だ。
もうひとつの防御策が -i オプションだ。rm -i file とすると1つずつ「削除してよいか」を尋ねてくれるので、まとめ消しの前に対象を目視できる。
スペースの入れ間違いも危険で、rm file1 file2 のつもりが余計な空白で別の意味になることもある。
これらのコマンドが ls の表示する標準出力を頼りに状態を確認しながら進むのと同様、削除でも「実行前に目で確かめる」ことが最大の防御になる。
作る・複製する・移動する操作は失敗してもやり直せるが、消す操作だけは取り返しがつかない。この非対称性を覚えておくと、自然と慎重な手つきが身につく。次は、消す前に中身を確かめるためにも欠かせない「ファイルを読む」操作へ進もう。