
LinuC入門|Linuxでディレクトリを作成・削除する方法
ディレクトリの作成から階層管理、安全な削除まで、Linuxの整理術をしっかり身につけよう。
Linuxでは、ファイルを用途や種類ごとに整理するためにディレクトリを使用します。Windowsのフォルダーに近い役割を持ち、ファイルや別のディレクトリを中に格納できます。
たとえば、学習用ファイル、設定ファイル、ログファイルを別々のディレクトリに分けておけば、必要なファイルを見つけやすくなります。シェルスクリプトなどで自動処理するときにも、整理されたディレクトリ構成は大切です。
AlmaLinux 10.2でディレクトリを管理するときは、主に次のコマンドを使用します。
| 操作 | コマンド | 役割 |
|---|---|---|
| ディレクトリの作成 | mkdir | 新しいディレクトリを作成する |
| 空のディレクトリの削除 | rmdir | 中身が空のディレクトリを削除する |
| 中身があるディレクトリの削除 | rm -r | ファイルやサブディレクトリを含めて削除する |
mkdirは、make directoryを由来とするコマンドです。rmdirは、remove directoryを由来としています。
ディレクトリを削除するときは、rmdirとrm -rの違いがとても重要です。rmdirは空のディレクトリしか削除できません。一方、rm -rは中身があるディレクトリもまとめて削除できます。
rm -rは強力なコマンドですが、削除した内容は通常のごみ箱には入りません。簡単には元に戻せないため、削除対象を十分に確認してから実行しましょう。
この記事では、一般ユーザーsuzukiのホームディレクトリで操作することを想定し、mkdir、cp、ls、rmdir、rmの書式、引数、オプション、使用例を順番に解説します。
ディレクトリの作成と削除の基本
ディレクトリの作成と削除では、中にファイルやサブディレクトリがあるかどうかが大切な判断材料になります。
| ディレクトリの状態 | 使用するコマンド | 実行結果 |
|---|---|---|
| 新しく作成したい | mkdir | 新しいディレクトリを作成する |
| 空のディレクトリを削除したい | rmdir | ディレクトリを削除する |
| 中身があるディレクトリをrmdirで削除したい | rmdir | 空ではないためエラーになる |
| 中身があるディレクトリを削除したい | rm -r | 中身を含めて削除する |
rmdirが空のディレクトリだけを対象とするのは、誤って大切なファイルをまとめて削除することを防ぐためです。
中身を残しておきたい可能性がある場合は、最初にrmdirを試す方法もあります。ディレクトリが空でなければ削除されず、エラーで停止します。
図1:mkdir・rmdir・rm -rの役割

この図から分かること
mkdirは、新しいディレクトリを作成するときに使います。
rmdirは、空のディレクトリを削除するためのコマンドです。中にファイルやサブディレクトリがある場合は削除できません。
rm -rは、ディレクトリの中にあるファイルやサブディレクトリも含めて削除します。削除前の安全確認が特に重要です。
mkdirコマンドでディレクトリを作成する
mkdirは、新しいディレクトリを作成するコマンドです。
作成するディレクトリの名前を引数として指定します。現在作業しているディレクトリに対して書き込み権限があれば、一般ユーザーでも作成できます。
mkdirコマンドの書式
mkdir [オプション] ディレクトリmkdirコマンドの引数
| 引数 | 説明 |
|---|---|
| ディレクトリ | 作成するディレクトリの名前またはパスを指定する |
mkdirコマンドの主なオプション
| オプション | 説明 |
|---|---|
| -p | 必要な親ディレクトリも一緒に作成する |
| -m | 作成するディレクトリのパーミッションを指定する |
1つのディレクトリを作成する
ホームディレクトリにlinux-labというディレクトリを作成してみましょう。
suzuki@AlmaLinux:~$ mkdir linux-labmkdirが正常に終了した場合、通常はメッセージが表示されません。
作成結果はlsで確認します。
suzuki@AlmaLinux:~$ ls
Desktop Documents Downloads linux-lab表示内容は、suzukiのホームディレクトリに存在するファイルやディレクトリによって異なります。lsの結果にlinux-labが表示されれば、ディレクトリは作成されています。
lsコマンドでディレクトリを確認する
lsは、ファイルやディレクトリの名前や情報を表示するコマンドです。
ディレクトリの作成や削除の前後でlsを実行すると、操作対象が存在するか、正しく作成または削除されたかを確認できます。
lsコマンドの書式
ls [オプション] [ファイルまたはディレクトリ]ls [オプション] [ファイルまたはディレクトリ]| 引数 | 説明 |
|---|---|
| ファイル | 情報を確認するファイルを指定する |
| ディレクトリ | 内容を確認するディレクトリを指定する |
| 省略 | カレントディレクトリの内容を表示する |
lsコマンドの主なオプション
今回扱うlsのオプションは-lです。
| オプション | 説明 |
|---|---|
| -l | ファイルやディレクトリの種類、パーミッション、所有者、サイズ、更新日時などを詳細表示する |
作成したディレクトリの情報を確認する場合は、次のように実行します。
suzuki@AlmaLinux:~$ ls -l
合計 0
drwxr-xr-x. 2 suzuki suzuki 6 8月 16 14:20 linux-lab表示される日時やサイズは、実際の環境によって異なります。
行の先頭がdになっていることから、linux-labがディレクトリであると確認できます。
cpコマンドでディレクトリ内にファイルをコピーする
作成したlinux-labへ練習用ファイルをコピーしてみましょう。
ここでは、ホームディレクトリに次のファイルが存在するものとします。
suzuki@AlmaLinux:~$ ls report*.txt
report1.txt report2.txt report3.txt report4.txtreport*.txtは、reportで始まり、末尾が.txtになっている既存ファイルを表します。
次のコマンドで、4つのファイルをlinux-labへコピーします。
suzuki@AlmaLinux:~$ cp report*.txt linux-lab/コピー結果を確認します。
suzuki@AlmaLinux:~$ ls linux-lab
report1.txt report2.txt report3.txt report4.txtlinux-labの中に4つのファイルが表示されれば、コピーは完了しています。
cpコマンドの書式
cp [オプション] コピー元 コピー先複数のファイルをコピーする場合は、次の形式になります。
cp [オプション] コピー元... コピー先ディレクトリcpコマンドの引数
| 引数 | 説明 |
|---|---|
| コピー元 | コピーするファイルまたはディレクトリを指定する |
| コピー先 | コピー後の名前またはコピー先ディレクトリを指定する |
cpコマンドの主なオプション
今回扱うcpのオプションは-rです。
| オプション | 説明 |
|---|---|
| -r | ディレクトリと、その中にあるファイルやサブディレクトリを再帰的にコピーする |
ディレクトリのコピーには-rが必要
通常のcpでディレクトリをコピーしようとすると、ディレクトリが省略されたことを示すエラーになります。
次の例では、linux-labをDownloadsへコピーしようとしています。
suzuki@AlmaLinux:~$ cp linux-lab Downloads/
cp: -rが指定されていません。ディレクトリlinux-labを省略しますcpは、オプションなしでは通常のファイルをコピーします。ディレクトリの中身をどこまでコピーすればよいか指定されていないため、linux-labはコピーされません。
ディレクトリを中身ごとコピーする場合は、-rを指定します。
suzuki@AlmaLinux:~$ cp -r linux-lab Downloads/ここでは、Downloads内にlinux-labが存在していないものとします。
コピー結果を確認します。
suzuki@AlmaLinux:~$ ls Downloads/linux-lab
report1.txt report2.txt report3.txt report4.txt元のディレクトリも確認してみましょう。
suzuki@AlmaLinux:~$ ls linux-lab
report1.txt report2.txt report3.txt report4.txtcpによるコピーなので、コピー元のlinux-labは残っています。Downloads内に、同じ内容を持つlinux-labが追加された状態です。
コピー先に新しいディレクトリ名を指定する
cp -rでは、コピー先の新しい名前まで指定できます。
次の例では、linux-labをDownloads内へlinux-lab-backupという名前でコピーします。
suzuki@AlmaLinux:~$ cp -r linux-lab Downloads/linux-lab-backupコピー結果を確認します。
suzuki@AlmaLinux:~$ ls Downloads/linux-lab-backup
report1.txt report2.txt report3.txt report4.txt既存のディレクトリだけをコピー先として指定した場合は、通常、コピー元と同じディレクトリ名が使われます。
コピー先に存在しない新しい名前を指定した場合は、その名前でディレクトリのコピーが作成されます。
複数階層のディレクトリを作成する
次のような階層を一度に作りたい場面を考えてみましょう。
projects
└── almalinux
└── logs最初に、-pを付けずに末端のlogsまで指定してみます。
suzuki@AlmaLinux:~$ mkdir projects/almalinux/logs
mkdir: ディレクトリprojects/almalinux/logsを作成できません: そのようなファイルやディレクトリはありませんこの時点では、親ディレクトリとなるprojectsとalmalinuxが存在しません。
通常のmkdirは、存在しない親ディレクトリを自動的には作成しないため、logsを作成できません。
-pで親ディレクトリも一緒に作成する
-pを指定すると、途中にある親ディレクトリが存在しない場合でも、必要な階層をまとめて作成できます。
suzuki@AlmaLinux:~$ mkdir -p projects/almalinux/logs作成された階層を順番に確認します。
suzuki@AlmaLinux:~$ ls projects
almalinux
suzuki@AlmaLinux:~$ ls projects/almalinux
logsprojects、almalinux、logsの3階層が作成されています。
-p には、次の特徴があります。
- 指定したパスの途中に必要な親ディレクトリを作成する
- 親ディレクトリがすでに存在する場合は、そのディレクトリをそのまま利用する
- 作成対象のディレクトリがすでに存在しても、通常はエラーにしない
- 深い階層を少ない操作で作成できる
ログの保存場所やプロジェクト用の階層など、複数のディレクトリをまとめて準備したいときに便利です。
図2:mkdir -pで複数階層を作成する流れ

この図から分かること
通常のmkdirでは、指定したパスの途中に存在しないディレクトリがあると、末端のディレクトリを作成できません。
mkdir -pを使用すると、projects、almalinux、logsのように、必要な親ディレクトリを含めて一度に作成できます。
深い階層を作るときは、ディレクトリを1つずつ作成するよりも、mkdir -pを使用したほうが入力を減らせます。
-mでパーミッションを指定する
-mを指定すると、ディレクトリを作成するときにパーミッションを設定できます。
次の例では、secure-dataというディレクトリを750のパーミッションで作成します。
suzuki@AlmaLinux:~$ mkdir -m 750 secure-data作成結果をls -lで確認します。
suzuki@AlmaLinux:~$ ls -l
drwxr-x---. 2 suzuki suzuki 6 8月 16 14:45 secure-data750は、ディレクトリの所有者、グループ、その他のユーザーに与える権限を数値で指定したものです。
| 数値 | 対象 | 設定される権限 |
|---|---|---|
| 7 | 所有者 | 読み取り、書き込み、移動や参照に必要な実行権限 |
| 5 | グループ | 読み取り、移動や参照に必要な実行権限 |
| 0 | その他のユーザー | 権限なし |
ls -lの表示では、次のようになります。
drwxr-x---それぞれの部分は、次の意味を持ちます。
| 表示 | 意味 |
|---|---|
| d | ディレクトリ |
| rwx | 所有者は読み取り、書き込み、移動や参照が可能 |
| r-x | グループは読み取り、移動や参照が可能 |
| --- | その他のユーザーには権限がない |
ディレクトリでは、実行権限がディレクトリ内への移動や、内部にある項目へのアクセスに関係します。通常のファイルにおけるプログラムの実行権限とは、少し役割が異なります。
-pと-mを組み合わせる場合
-pと-mは、同じmkdirで組み合わせることもできます。
suzuki@AlmaLinux:~$ mkdir -p -m 750 data/archiveこの操作では、必要に応じてdataを作成し、その下にarchiveを作成します。
ただし、-mで指定したパーミッションは、基本的に最後に指定したarchiveへ適用されます。-pによって自動作成される途中の親ディレクトリは、同じ750になるとは限りません。
階層全体へ同じパーミッションが設定されると決めつけないようにしましょう。
rmdirコマンドで空のディレクトリを削除する
rmdirは、中身が空のディレクトリを削除するコマンドです。
ファイルやサブディレクトリが入っている場合は削除しません。空であることを確認してからディレクトリだけを片付けたいときに適しています。
rmdirコマンドの書式
rmdir [オプション] ディレクトリrmdirコマンドの引数
| 引数 | 説明 |
|---|---|
| ディレクトリ | 削除する空のディレクトリを指定する |
rmdirコマンドの主なオプション
| オプション | 説明 |
|---|---|
| -p | 指定したディレクトリを削除したあと、空になった親ディレクトリも順番に削除する |
空のディレクトリを削除する
最初に、削除練習用のempty-dirを作成します。
suzuki@AlmaLinux:~$ mkdir empty-dir作成されたことを確認します。
suzuki@AlmaLinux:~$ ls empty-dirempty-dirは空なので、lsを実行しても中にあるファイル名は表示されません。
rmdirで削除します。
suzuki@AlmaLinux:~$ rmdir empty-dir削除結果を確認します。
suzuki@AlmaLinux:~$ ls empty-dir
ls: empty-dirにアクセスできません: そのようなファイルやディレクトリはありませんempty-dirが存在しないというメッセージが表示されれば、削除されています。
-pで空になった親ディレクトリも削除する
mkdir -pで、複数階層の空ディレクトリを作成します。
suzuki@AlmaLinux:~$ mkdir -p training/basic/exercise階層は次のようになっています。
training
└── basic
└── exerciseすべてのディレクトリが空である場合は、rmdir -pで末端から親へ向かって削除できます。
suzuki@AlmaLinux:~$ rmdir -p training/basic/exercise削除は次の順番で行われます。
exerciseを削除
↓
空になったbasicを削除
↓
空になったtrainingを削除削除結果を確認します。
suzuki@AlmaLinux:~$ ls training
ls: trainingにアクセスできません: そのようなファイルやディレクトリはありませんrmdir -pは、指定したディレクトリを削除したあと、その親も空であれば続けて削除します。
途中の親ディレクトリに別のファイルやディレクトリが存在する場合は、その親を削除できません。この場合、末端側の空ディレクトリだけが先に削除され、空ではない親のところで処理が停止することがあります。
rmdirでは中身のあるディレクトリを削除できない
rmdirの動作を確認するため、中にファイルがあるworkdirを用意します。
最初にディレクトリを作成します。
suzuki@AlmaLinux:~$ mkdir workdir次に、/etc/hostsをworkdirへコピーします。
suzuki@AlmaLinux:~$ cp /etc/hosts workdir/中身を確認します。
suzuki@AlmaLinux:~$ ls workdir
hostsworkdirの中にはhostsが存在しているため、空ではありません。
この状態でrmdirを実行します。
suzuki@AlmaLinux:~$ rmdir workdir
rmdir: workdirを削除できません: ディレクトリは空ではありませんrmdirは、workdirの中にhostsがあることを確認して削除を中止します。workdirもhostsも、そのまま残ります。
suzuki@AlmaLinux:~$ ls workdir
hostsrmdirでエラーが表示されたからといって、中身が自動的に削除されることはありません。
rm -rで中身のあるディレクトリを削除する
rmは、ファイルを削除するコマンドです。-rを指定すると、ディレクトリの中にあるファイルやサブディレクトリを順番にたどって削除できます。
rmコマンドの書式
rm [オプション] ファイルまたはディレクトリrmコマンドの引数
| 引数 | 説明 |
|---|---|
| ファイル | 削除するファイルを指定する |
| ディレクトリ | -rを指定した場合に、削除するディレクトリを指定する |
rmコマンドの主なオプション
今回扱うrmのオプションは-rです。
| オプション | 説明 |
|---|---|
| -r | ディレクトリ内のファイルやサブディレクトリを含めて再帰的に削除する |
中にhostsが入っているworkdirを削除します。
実行前に、削除対象をもう一度確認しましょう。
suzuki@AlmaLinux:~$ ls workdir
hosts対象が正しいことを確認してから、rm -rを実行します。
suzuki@AlmaLinux:~$ rm -r workdir削除結果を確認します。
suzuki@AlmaLinux:~$ ls workdir
ls: workdirにアクセスできません: そのようなファイルやディレクトリはありませんworkdirだけでなく、その中にあったhostsも削除されています。
rm -rは、ディレクトリ内にさらにサブディレクトリがある場合も、その中を順番にたどって削除します。ディレクトリの階層が深くても、指定したディレクトリの下にある内容がまとめて削除対象になります。
図3:rmdirとrm -rの使い分け

この図から分かること
削除するディレクトリが空なら、rmdirを使用できます。
中にファイルやサブディレクトリが存在する場合、rmdirでは削除できません。中身も含めて削除する必要がある場合は、rm -rを使用します。
rm -rは、指定したディレクトリ以下をまとめて削除します。実行前にlsで中身を確認し、削除対象のパスが正しいかを慎重に確認することが大切です。
rmdirとrm -r の違い
2つの削除方法を整理すると、次のようになります。
| 比較項目 | rmdir | rm -r |
|---|---|---|
| 空のディレクトリ | 削除できる | 削除できる |
| ファイルが入ったディレクトリ | 削除できない | 削除できる |
| サブディレクトリがある場合 | 削除できない | 削除できる |
| 中身の自動削除 | 行わない | 行う |
| 誤操作時の危険性 | 比較的低い | 高い |
| 主な用途 | 空のディレクトリだけを安全に片付ける | 不要になった階層を中身ごと削除する |
空であることが分かっているディレクトリには、rmdirを使うと安心です。
中身が残っていた場合はエラーになるため、誤ってファイルを削除してしまうのを防げます。
rm -rは、中身が不要であることを確認できた場合に使用します。削除対象の指定を間違えると、多数のファイルが失われる可能性があります。
mkdirでエラーになる主な原因
mkdirでディレクトリを作成できない場合は、次のような原因が考えられます。
| 原因 | 発生する状況 | 対応 |
|---|---|---|
| 親ディレクトリが存在しない | 深い階層をオプションなしで指定した | -pを指定する |
| 同じ名前がすでに存在する | 既存のディレクトリ名を指定した | lsで既存の名前を確認する |
| ファイルと同じ名前を指定した | 同名の通常ファイルが存在する | 別のディレクトリ名を指定する |
| 作成する権限がない | 書き込みできない場所を指定した | 作成可能な場所を指定する |
複数階層を作るときは、mkdir -pが便利です。ただし、同じ名前の通常ファイルが途中にある場合は、-pを指定してもその場所をディレクトリとして使用できません。
ディレクトリを削除できない主な原因
rmdirやrm -rで削除できない場合は、次の点を確認しましょう。
| 原因 | 発生する状況 | 確認する内容 |
|---|---|---|
| ディレクトリが空ではない | rmdirで中身のあるディレクトリを指定した | lsで中身を確認する |
| 指定した名前が存在しない | パスやディレクトリ名を間違えた | lsで親ディレクトリを確認する |
| 削除する権限がない | 操作できない場所を指定した | 実行ユーザーと対象の場所を確認する |
| 親ディレクトリが空ではない | rmdir -pで親まで削除しようとした | 親に別の項目がないか確認する |
エラーが表示されたときは、すぐにrm -rへ切り替えるのではなく、まずlsでディレクトリの中身を確認しましょう。
削除できない理由が、中に大切なファイルが残っているためかもしれません。
rootでディレクトリを操作するときの注意
rootは、システム上のほぼすべてのディレクトリを操作できる特別なユーザーです。
一般ユーザーsuzukiでは権限不足になる場所でも、rootなら作成や削除ができる場合があります。そのため、rootでrm -rを実行すると、システムに必要なディレクトリまで削除できてしまう可能性があります。
一般ユーザーのプロンプトは、末尾が$です。
suzuki@AlmaLinux:~$rootのプロンプトは、末尾が#です。
root@AlmaLinux:~#rootで操作している場合は、コマンドを実行する前に次の点を確認しましょう。
- プロンプトの末尾が#になっていないか確認する
- 削除対象のパスを最初から最後まで確認する
- 目的のディレクトリより上の階層を指定していないか確認する
- rm -rを実行する必要が本当にあるか確認する
- lsで中身を確認してから削除する
特別な権限を必要としない練習は、一般ユーザーsuzukiで行うほうが安全です。
安全にディレクトリを管理するための確認ポイント
ディレクトリの作成や削除を行うときは、次の流れを意識すると安全です。
- mkdirを実行したあとはlsで作成結果を確認する
- 深い階層をまとめて作成するときはmkdir -pを使用する
- パーミッションを指定して作成するときはmkdir -mを使用する
- ディレクトリをコピーするときはcp -rを使用する
- コピー後はlsでコピー先の中身を確認する
- 空のディレクトリを削除するときはrmdirを使用する
- 空の親ディレクトリも削除するときはrmdir -pを使用する
- 中身があるディレクトリを削除する前にlsで内容を確認する
- rm -rでは指定したディレクトリ以下がまとめて削除されることを意識する
- rootでrm -rを実行するときは、一般ユーザー以上に慎重に確認する
mkdirはディレクトリを作成し、rmdirは空のディレクトリを削除します。中身を含めて削除する必要がある場合だけ、対象を十分に確認してrm -rを使用しましょう。
