6.6 ディレクトリの管理
Linux Essentials Online Text | 2021/07/21

ディレクトリの作成(mkdir)

ディレクトリを作成するコマンドは、mkdir(MaKe DIRectory)です。

書式:

mkdir [オプション] ディレクトリ名

主なオプション:

-p指定されたディレクトリの上位ディレクトリも作成する。
-m指定したパーミッションでディレクトリを作成する。

<実習: mkdirコマンドの実行>

$ mkdir test_dir
$ ls
hosts.new test_dir touch_file

mkdirコマンドには制約事項があります。以下を実行してみて下さい。
どのような状態になるでしょうか?

$ mkdir dir1/dir2/dir3

では、実行してみましょう。

$ mkdir dir1/dir2/dir3
mkdir: ディレクトリ ` dir1/dir2/dir3' を作成できません: そのようなファイルやディレクトリはありません

実際には、このコマンドは実行できずエラーが表示されます。
では、なぜ、エラーになったのでしょうか?

多くの人は、このように考えたのではないでしょうか?

「dir1」ディレクトリを作り、その下に「dir2」ディレクトリを作り、「dir3」ディレクトリを作成する。

実は、mkdirコマンドは、ディレクトリを1つ作成するコマンドで、複数のディレクトリを作成することができません。今回実行したコマンドの意味は、システム側では下記のような解釈になっています。

既存の「dir1/dir2/」の下に「dir3」を作成する

つまり、今回の場合は「dir3」ディレクトリのみを作成しようとしています。しかし、既存であるはずのdir1/dir2/ディレクトリが存在しないため、作成が出来なかった。となり、その旨のエラーを出力しています。

そのため、通常は作成したいディレクトリまで移動してから実行します。つまり、ディレクトリdir1を作成し、その下にディレクトリdir2を作成、さらにその下にディレクトリdir3を作成するということです。実際にやってみましょう。

$ mkdir dir1
$ mkdir dir1/dir2
$ mkdir dir1/dir2/dir3
$ ls
dir1  hosts.new test_dir touch_file
$ ls dir1
dir2
$ ls dir1/dir2
dir3

オプション無しでmkdirコマンドを実行する場合は、このようにmkdirコマンドを3つに分けて実行してdir3ディレクトリを作成しなければなりません。

ただし、一行のコマンドで全てのディレクトリを一括作成する事は可能で、その場合には「-p」オプションを使用します。「-p」オプションを使用すると、存在しないディレクトリを浅い階層から順番に作成していきます。

$ mkdir -p test1/test2/test3
$ ls
dir1  hosts.new  test1 test_dir touch_file
$ ls test1/
test2
$ ls test1/test2/
test3

ディレクトリの削除(rmdir)

ディレクトリを削除する場合は、「rmdir(ReMove DIRectory)」コマンドを使用します。

書式:

rmdir [オプション] ディレクトリ名

主なオプション:

-p指定されたディレクトリの上位ディレクトリも作成する。

rmdirコマンドでは「中が空のときに限り」該当のディレクトリを削除できます。中にファイルが存在していると削除する事ができません。

<実習: rmdirコマンドの実行>

$ rmdir test_dir
$ ls
dir1  hosts.new  test1  touch_file

デフォルトではrmdirコマンドの後に、作成したいディレクトリ名を指定すれば削除できます。

では、先ほどと同じように、以下のコマンドを実行してみてください。
どうなると思いますか?

$ rmdir dir1/dir2/dir3

今回は、mkdirコマンドの時と異なり、エラーが出ることなく正常に実行されます。

$ rmdir dir1/dir2/dir3/
$ ls dir1/
dir2
$ ls dir1/dir2/
$
$ rmdir -p dir1/dir2/
$ ls
hosts.new  test1 test_dir touch_file

エラーが出なかった理由は、mkdirの時と同じです。
rmdirコマンドは、mkdirコマンドと同様、ディレクトリを1つ削除するコマンドです。つまり、既存の「dir1/dir2/」の下の「dir3」を削除する、ということになります。

複数のディレクトリを削除したいときは、mkdirコマンドと同様に「-p」オプションを使用します。このオプションを使用すると、深い階層から順番に削除していきます。

1行目に実行したコマンドは dir3ディレクトリのみを削除するコマンドであることに注意して下さい。全てを一括で削除する場合は「p」オプションを使用します。

今度は、test1/test2/test3 ディレクトリにfileを作成した上で、test3ディレクトリを削除してみます。

$ touch test1/test2/test3/file
$ rmdir -p test1/test2/test3/
rmdir: `test1/test2/test3/' を削除できません: ディレクトリは空ではありません
$ rm -r test1/
$ ls
hosts.new  touch_file

3行目に注目してください。「-p」オプションを使っても、指定したディレクトリを削除することができていませんでした。

rmdirコマンドは、ディレクトリを削除するコマンドですが、削除できる対象は「空のディレクトリ」に限ります。
今回は「test3」ディレクトリの下には「file」が作成されており、空ではないために削除ができず、エラーが表示されています。

この場合は「test1/test2/test3/file」を削除してからディレクトリを削除するか、「rm –r」コマンドを実行します。「rm –r」コマンドは、削除対象のディレクトリが空であるかどうかに関わらず削除することができます。

PAGE TOP