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-lab

mkdirが正常に終了した場合、通常はメッセージが表示されません。

作成結果は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.txt

report*.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.txt

linux-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.txt

cpによるコピーなので、コピー元の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
logs

projects、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-data

750は、ディレクトリの所有者、グループ、その他のユーザーに与える権限を数値で指定したものです。

数値対象設定される権限
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-dir

empty-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
hosts

workdirの中にはhostsが存在しているため、空ではありません。

この状態でrmdirを実行します。

suzuki@AlmaLinux:~$ rmdir workdir
rmdir: workdirを削除できません: ディレクトリは空ではありません

rmdirは、workdirの中にhostsがあることを確認して削除を中止します。workdirもhostsも、そのまま残ります。

suzuki@AlmaLinux:~$ ls workdir
hosts

rmdirでエラーが表示されたからといって、中身が自動的に削除されることはありません。

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つの削除方法を整理すると、次のようになります。

比較項目rmdirrm -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を使用しましょう。