第1章 1-2 / ファイル操作の基本

ファイルとディレクトリを作る

このページで叩くコマンドと到達点

前提:1-1が完了し、ホームディレクトリ(/home/ubuntu)にいる状態から始めます。1-1では歩き方を覚えましたが、今のあなたのホームディレクトリはまだ何もない空っぽの部屋です。このページではmkdirでディレクトリ(部屋の中の棚)を作り、touchで空のファイルを作り、ls -Rで階層を見渡し、rmdirで不要な棚を片付ける練習をします。まず最初に、これから第1章を通してずっと使う練習専用の部屋~/practiceを作ります。

このページではSET 1〜3、合計30行のコマンドを上から順に叩きます。手打ち推奨(コピーは確認用)です。

SET 1 ― practiceディレクトリを作る

ubuntu@lightsail: ~
  1. $pwd
  2. /home/ubuntu
  3. $mkdir practice
  4. $ls
  5. practice
  6. $cd practice
  7. $pwd
  8. /home/ubuntu/practice
  9. $mkdir uni
  10. $mkdir baito memo
  11. $ls
  12. baito memo uni
  13. $ls -l
  14. drwxrwxr-x 2 ubuntu ubuntu 4096 Jul 3 10:02 baito drwxrwxr-x 2 ubuntu ubuntu 4096 Jul 3 10:02 memo drwxrwxr-x 2 ubuntu ubuntu 4096 Jul 3 10:01 uni
  15. $mkdir uni
  16. mkdir: cannot create directory 'uni': File exists
解説 ― SET 1 で何をしたか

1行目のpwdでホームディレクトリにいることを確認したら、2行目のmkdir practice(make directoryの略)でいよいよ最初のディレクトリを作ります。~/practiceは、これから第1章の残り全部のページで使う専用の練習部屋です。3行目のlsで、確かにpracticeという名前のディレクトリが作られたことがわかります。

4行目のcd practiceで中に入り、5行目のpwdで現在地が/home/ubuntu/practiceになったことを確認します。6行目のmkdir uniで大学(uni)関係のファイルを置く棚を1つ作り、7行目のmkdir baito memoのように、mkdirはスペース区切りで複数の名前を渡せば一度に複数のディレクトリを作れます。8行目のlsで3つとも作られたことを確認できます。

9行目のls -l(longの略)は、名前だけでなく作成日時やアクセス権も含めて詳しく一覧表示するオプションです。行の先頭がdで始まっているのは「これはディレクトリですよ」という印で、このdと通常のファイルの違いは1-5以降でパーミッションを学ぶときにまた登場します。10行目でもう一度mkdir uniを叩くと、出力例のようにFile exists(すでに存在します)というエラーが返ってきます。mkdirは基本的に、同じ名前のディレクトリがすでにあると失敗する仕様です。このエラーは壊れたわけではなく、「もう作ってあるよ」という正常な警告なので、慌てる必要はありません。

ゆみちゃん
ゆみ

赤い文字でエラーが出るとギクッとするよね、わかる。でもFile existsは「もう作ってあるから安心して」って教えてくれてるだけだから、全然怖くないよ! Linuxのエラーメッセージは大体、次に何をすればいいかのヒントをくれてるから、まずは慌てず読む癖をつけるのがおすすめ!

SET 2 ― 深い階層とファイルを作る

ubuntu@lightsail: ~/practice
  1. $mkdir uni/report/2024
  2. mkdir: cannot create directory 'uni/report/2024': No such file or directory
  3. $mkdir -p uni/report/2024
  4. $ls -R uni
  5. $touch uni/report/2024/economics.txt
  6. $ls -l uni/report/2024
  7. -rw-rw-r-- 1 ubuntu ubuntu 0 Jul 3 10:05 economics.txt
  8. $touch memo/todo.txt memo/idea.txt
  9. $ls memo
  10. idea.txt todo.txt
  11. $ls -l memo
  12. $touch memo/todo.txt
  13. $ls -l memo
解説 ― SET 2 で何をしたか

1行目、uniの中にreport/2024という2階層を一気に作ろうとして失敗した例です(出力例のとおり)。mkdirは標準では1階層ずつしか作れず、親のuni/reportがまだ無い状態でその先の2024までは一度に作れません。2行目のmkdir -p(parentsの略)を使うと、途中の階層が無ければまとめて作ってくれるので、uni/reportuni/report/2024も一発で完成します。深い階層を作るときは-pを付ける癖をつけると失敗しません。

3行目のls -R(再帰※1のR)は、指定したディレクトリだけでなく、その中のサブディレクトリの中身まですべて掘り下げて表示するオプションです。uniの中にreportがあり、その中に2024がある、という階層構造を一気に確認できます。

4行目のtouchは、本来はファイルの更新日時を「今」に変える(触る)コマンドですが、指定した名前のファイルが存在しない場合は中身が空のファイルを新規作成してくれるため、空ファイルを作る用途でよく使われます。5行目のls -l uni/report/2024で確認すると、先頭がdではなく-になっています。SET 1のls -lで見たdはディレクトリの印でしたが、-は「これは通常のファイルですよ」という印です。ファイルサイズも0になっており、touchで作った直後は中身が空であることも確認できます。6行目のように、touchもスペース区切りで複数のファイルを一度に作成できます。

8行目のls -ltodo.txtの更新日時を確認したあと、9行目でもう一度同じファイルにtouchを実行すると、mkdirのようにエラーにはならず、10行目のls -lで見ると更新日時だけが今の時刻に変わっています。これがtouch本来の役割です。ファイルの中身を変えずに「触った記録」だけを新しくしたいときに使います。

POINT

深い階層を作るときはmkdir -pを基本の型にしてください。-pを付け忘れて「親ディレクトリが無い」と怒られるのは、初心者が必ず一度は通る道です。

SET 3 ― 壊して片付ける(rmdir)

ubuntu@lightsail: ~/practice
  1. $pwd
  2. /home/ubuntu/practice
  3. $mkdir sotsuron
  4. $ls
  5. baito memo sotsuron uni
  6. $rmdir sotsuron
  7. $ls
  8. baito memo uni
  9. $rmdir baito
  10. $rmdir uni
  11. rmdir: failed to remove 'uni': Directory not empty
  12. $ls -l
  13. drwxrwxr-x 2 ubuntu ubuntu 4096 Jul 3 10:02 memo drwxrwxr-x 3 ubuntu ubuntu 4096 Jul 3 10:05 uni
  14. $ls -R
  15. $cd ~
解説 ― SET 3 で何をしたか

1行目のpwd~/practiceにいることを確認してから始めます。2行目で試しにsotsuron(卒論)という名前のディレクトリを作り、4行目のrmdir(remove directoryの略)で削除します。rmdirは名前のとおりディレクトリを削除するコマンドですが、中身が空のディレクトリしか削除できません5行目のlsで、sotsuronがきれいに消えたことがわかります。

6行目のrmdir baitoも、まだ何も入っていない空のディレクトリなので問題なく削除できます。ところが7行目でuniを同じように削除しようとすると、出力例のようにDirectory not empty(空ではありません)というエラーになります。uniの中にはSET 2で作ったreport/2024/economics.txtが入っているため、rmdirでは削除できないのです。中身ごとまとめて削除する方法は、次の1-3で扱うrm -rで学びます。

8行目のls -lを実行すると、残っているのはmemouniの2つだけになったことがわかります。9行目のls -Rで、~/practiceの中にmemouni(中にreport/2024/economics.txt)が残っていることを確認し、10行目のcd ~でホームディレクトリへ戻ってこのページを終えます。次のページではこの残った構造を使って、コピー・移動・削除を練習していきます。

ゆみちゃん
ゆみ

rmdirは中身が空じゃないと消してくれない、めちゃくちゃ慎重派のコマンドなんだよね。これはむしろ優しさで、「中に何か入ってるのに間違って消しちゃう事故」を防いでくれてるの。次のページで出てくるrm -rは逆に中身ごと問答無用で消せちゃうから、そのギャップは覚えておいてね!

POINT

rmdirが失敗したら「中身が入っているから、このコマンドでは消せない」というサインです。エラーで止まる=安全装置が働いている、と捉えると気が楽になります。

まとめ

1-2では、~/practiceという練習拠点を作りながら、ディレクトリとファイルを作る・階層を確認する・空のディレクトリを片付けるという基本操作を体験しました。このページで叩けるようになったコマンドを一覧にまとめます。

コマンド何をするか覚え方
mkdir <名前>新しいディレクトリを作成するmake directory(ディレクトリを作る)
mkdir -p <パス>途中の階層が無くてもまとめて作成するparents(親も一緒に)
touch <名前>空ファイルを作成/更新日時を今にするファイルに触れて新しくする
ls -Rサブディレクトリの中身まで再帰的に一覧するrecursive(再帰的に)
rmdir <名前>空のディレクトリだけを削除するremove directory(空じゃないと拒否される慎重派)

次のページ「1-3. コピー・移動・削除」では、~/practiceに残ったunimemoを使いながら、cpmvrmでファイルを自在に動かしたり消したりする練習をします。

脚注 ─ 用語解説
  1. 再帰(さいき) … あるディレクトリの中を見るときに、そのまた中のディレクトリ、さらにその中……というように同じ処理を繰り返し掘り下げていくこと。ls -Rは「今見ている階層の中身」を再帰的にすべて表示する。