りなっくすとらずぱい!

Raspberry Pi初心者に向けた各コマンドの説明、プログラムの作り方について紹介しています!

mkdir/rmdir - ディレクトリを作成/削除する

f:id:ibuquicallig:20190611154905p:plain

この記事ではmkdirrmdirの基本的な使い方と例、オプションなどについて解説しています。

mkdir コマンド

mkdirコマンドはディレクトリを作成することのできるコマンドです。touchコマンドでは空のファイルを作成することができましたが、こちらはディレクトリを作成することができます。

MaKe DIRectoryを短縮したコマンド名で、Windowsのコマンドプロンプト上でもオプションは異なりますが同名、同機能で存在しています。

ディレクトリを作成する

mkdir [ディレクトリ名]で指定した名前のディレクトリを作成することができます。

$ mkdir test
$ ls
test

ディレクトリ名にスペースで区切った複数の名前を渡すと一度に複数のディレクトリを作成することができます。

$ mkdir test_1 test_2 test_3
$ ls
test_1 test_2 test_3

上記のように複数のディレクトリを一度に作成することはできますが、オプションなしのままでは複数階層あるディレクトリを作成することができません。以下を実行するとエラーとなります。

$ mkdir test/test_nest
mkdir: cannot create directory ‘test/test_nest’: No such file or directory

以下の-pオプションを追加することで正常に作成することができるようになります。また最終ディレクトリ以外のディレクトリが既に存在している場合には、エラーとなりません。

$ mkdir -p test/test_nest
$ mkdir test/test_nest/final_dir
# エラーとならずfinal_dirが作成される

-p オプションで深い階層のディレクトリごと作成する

-pオプションを指定することで、指定したファイル名(パス名)の途中に存在していないディレクトリが指定されている場合に、えらとせずに一緒に作成することができます。複数階層あるディレクトリを一気に作成した時に使用します。

$ mkdir -p test/test_nest
$ ls
test
$ cd test
$ ls
test_nest

注意が必要な点は、指定したパスの途中にすでに同名のファイルが存在している場合にはエラーとなってしまいます。Linuxでは、同名のファイルとディレクトリを同じ場所に作成することができません。

-m オプションで権限を設定しながら作成する

ディレクトリを作成した時の権限設定はデフォルトの値か、umaskで設定している値となりますが、-m [権限設定値]で設定しながらディレクトリを作成することができます。

値には数値で設定する方法(777600など)と文字列で設定する方法(a+rwxなど)の両方が使用できます(chmodと同じ)。

$ mkdir -m 777 test
$ ls -l
drwxrwxrwx 2 user user 4096 Jun 11 15:13 test

-pオプションと同時に使用した場合、最終ディレクトリのみ-mオプションで指定した権限が付与されます。

$ mkdir -p -m 777 test/nest
# test/ディレクトリはデフォルト値でnestディレクトリのみ777権限となる。

一括で作成したディレクトリにまとめて権限を付与したい場合は、作成後にchmod -Rで変更することができます。

rmdir コマンド

ここまではmkdirの説明でしたが、ディレクトリを削除するためだけのrmdirというコマンドがあります。

rmコマンドでもオプションと組み合わせることによってディレクトリを削除することができますが、rmdirではディレクトリしか削除できません。

ReMove DIRectoryの短縮で、こちらもコマンドプロンプトに存在しています。

ディレクトリを削除する

rmdir [ディレクトリ名]で存在するディレクトリを削除することができます。注意が必要な点はディレクトリの中身が隠しファイルも含めて空っぽでなければエラーとなります。

$ mkdir test
$ rmdir test
# 成功
$ mkdir -p test/nest
$ rmdir test
rmdir: failed to remove 'test': Directory not empty
# 失敗(test/内にnest/が存在しているため)

深い階層のディレクトリごと削除するには以下の-pオプションを使用します。なお-pオプションを使用した場合でも、ファイルなどが残っていると削除できません。

ディレクトリ名にスペース区切りで複数ディレクトリを指定することで一括でさくじょすることができます。

ファイルが存在しているなどのエラーで削除できないディレクトリが発生した場合、そのディレクトリだけ残り、ほかのディレクトリは削除されます。削除できるディレクトリは削除されてしまうので注意が必要です。

$ mkdir -p 1 2 3/.exist 4
# 3/は削除できないようにする
$ rmdir 1 2 3 4
rmdir: failed to remove '3': Directory not empty
$ ls
3
# 3/以外は削除されてしまう

-p オプションで深い階層のディレクトリごと削除する

mkdir -pで深い階層のディレクトリごと作成できたのと同じく、rmdir -pでも逆の同じようなことができます。

先ほど削除できなかったディレクトリを以下のようにして削除することができます。

$ rmdir -p test/nest

ディレクトリの中身ごと削除するにはrm -rを使う

rmdirを紹介しましたが、おそらくあまり使われることはないと思われます。rm -rを使用することでディレクトリが削除できたり、ディレクトリ内にファイルやディレクトリが存在している場合にでも削除できるのでこちらのほうが便利です。

一切合切削除したい場合には便利ですが、削除前に消してはいけないファイルがないかどうかしっかりとチェックする必要があります。

$ mkdir -p test/nest
$ rmdir test
rmdir: failed to remove 'test': Directory not empty
# 失敗
$ rm -r test
$ ls
# (何もない)
# 成功

参考

以下のサイトの情報を引用・参考にしました。