ファイルとディレクトリを作る
前提:1-1が完了し、ホームディレクトリ(/home/ubuntu)にいる状態から始めます。1-1では歩き方を覚えましたが、今のあなたのホームディレクトリはまだ何もない空っぽの部屋です。このページではmkdirでディレクトリ(部屋の中の棚)を作り、touchで空のファイルを作り、ls -Rで階層を見渡し、rmdirで不要な棚を片付ける練習をします。まず最初に、これから第1章を通してずっと使う練習専用の部屋~/practiceを作ります。
このページではSET 1〜3、合計30行のコマンドを上から順に叩きます。手打ち推奨(コピーは確認用)です。
SET 1 ― practiceディレクトリを作る
- $pwd
- /home/ubuntu
- $mkdir practice
- $ls
- practice
- $cd practice
- $pwd
- /home/ubuntu/practice
- $mkdir uni
- $mkdir baito memo
- $ls
- baito memo uni
- $ls -l
- 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
- $mkdir uni
- mkdir: cannot create directory 'uni': File exists
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 ― 深い階層とファイルを作る
- $mkdir uni/report/2024
- mkdir: cannot create directory 'uni/report/2024': No such file or directory
- $mkdir -p uni/report/2024
- $ls -R uni
- $touch uni/report/2024/economics.txt
- $ls -l uni/report/2024
- -rw-rw-r-- 1 ubuntu ubuntu 0 Jul 3 10:05 economics.txt
- $touch memo/todo.txt memo/idea.txt
- $ls memo
- idea.txt todo.txt
- $ls -l memo
- $touch memo/todo.txt
- $ls -l memo
1行目、uniの中にreport/2024という2階層を一気に作ろうとして失敗した例です(出力例のとおり)。mkdirは標準では1階層ずつしか作れず、親のuni/reportがまだ無い状態でその先の2024までは一度に作れません。2行目のmkdir -p(parentsの略)を使うと、途中の階層が無ければまとめて作ってくれるので、uni/reportもuni/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 -lでtodo.txtの更新日時を確認したあと、9行目でもう一度同じファイルにtouchを実行すると、mkdirのようにエラーにはならず、10行目のls -lで見ると更新日時だけが今の時刻に変わっています。これがtouch本来の役割です。ファイルの中身を変えずに「触った記録」だけを新しくしたいときに使います。
深い階層を作るときはmkdir -pを基本の型にしてください。-pを付け忘れて「親ディレクトリが無い」と怒られるのは、初心者が必ず一度は通る道です。
SET 3 ― 壊して片付ける(rmdir)
- $pwd
- /home/ubuntu/practice
- $mkdir sotsuron
- $ls
- baito memo sotsuron uni
- $rmdir sotsuron
- $ls
- baito memo uni
- $rmdir baito
- $rmdir uni
- rmdir: failed to remove 'uni': Directory not empty
- $ls -l
- drwxrwxr-x 2 ubuntu ubuntu 4096 Jul 3 10:02 memo drwxrwxr-x 3 ubuntu ubuntu 4096 Jul 3 10:05 uni
- $ls -R
- $cd ~
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を実行すると、残っているのはmemoとuniの2つだけになったことがわかります。9行目のls -Rで、~/practiceの中にmemoとuni(中にreport/2024/economics.txt)が残っていることを確認し、10行目のcd ~でホームディレクトリへ戻ってこのページを終えます。次のページではこの残った構造を使って、コピー・移動・削除を練習していきます。

rmdirは中身が空じゃないと消してくれない、めちゃくちゃ慎重派のコマンドなんだよね。これはむしろ優しさで、「中に何か入ってるのに間違って消しちゃう事故」を防いでくれてるの。次のページで出てくるrm -rは逆に中身ごと問答無用で消せちゃうから、そのギャップは覚えておいてね!
rmdirが失敗したら「中身が入っているから、このコマンドでは消せない」というサインです。エラーで止まる=安全装置が働いている、と捉えると気が楽になります。
まとめ
1-2では、~/practiceという練習拠点を作りながら、ディレクトリとファイルを作る・階層を確認する・空のディレクトリを片付けるという基本操作を体験しました。このページで叩けるようになったコマンドを一覧にまとめます。
| コマンド | 何をするか | 覚え方 |
|---|---|---|
mkdir <名前> | 新しいディレクトリを作成する | make directory(ディレクトリを作る) |
mkdir -p <パス> | 途中の階層が無くてもまとめて作成する | parents(親も一緒に) |
touch <名前> | 空ファイルを作成/更新日時を今にする | ファイルに触れて新しくする |
ls -R | サブディレクトリの中身まで再帰的に一覧する | recursive(再帰的に) |
rmdir <名前> | 空のディレクトリだけを削除する | remove directory(空じゃないと拒否される慎重派) |
次のページ「1-3. コピー・移動・削除」では、~/practiceに残ったuniやmemoを使いながら、cp・mv・rmでファイルを自在に動かしたり消したりする練習をします。
- 再帰(さいき) … あるディレクトリの中を見るときに、そのまた中のディレクトリ、さらにその中……というように同じ処理を繰り返し掘り下げていくこと。
ls -Rは「今見ている階層の中身」を再帰的にすべて表示する。↩