server-memo.net

mkdirコマンドの使い方(ディレクトリを作成)

   

linuxでディレクトリを作成する場合に使用する「mkdir」コマンドについてまとめてみたところ、「-m」と「-v」オプションの存在を今更知りました…

mkdir使用方法

「mkdir」コマンドはディレクトリを作成する際に使用します。

使い方はとても簡単で、オプションと作成したいディレクトリを指定するだけとなります。

mkdir オプション 作成ディレクトリ

オプションについて

オプションを指定しなくてもディレクトを作成することが出来ますが、知っているとちょっと便利なのでこの機会に覚えておいて損はありませんよ。

オプション 説明
-m パーミッション
--mode=パーミッション
作成するディレクトリのパーミッションを指定
-p
--parents
途中のディレクトリが無い場合その親ディレクトリも作成
-v
--verbose
ディレクトリの作成結果をメッセージで表示

使用例

「mkdir」の使用例について説明していきます。

オプション指定なし

まずは基本となる、オプションの指定をせずにディレクトリを作成する例です。

「test」というディレクトリを作成する場合は下記のように「mkdir」コマンドを実行します。

$ mkdir test

「ls」コマンドで確認するとディレクトリが作成されていることが確認できます。

$ ls -l
total 4
drwxrwxr-x 2 tamohiko tamohiko 4096 Jun 30 16:45 test

-m(--mode)オプション

「-m」オプションを使用することで、作成するディレクトリのパーミッションを指定することが出来ます。

パーミッションの指定は、chmodコマンドで使用できる、8進数3桁の数値(000~777)で指定する方法や、アルファベットで指定する方法があります。

「-m」オプションの使用例として、パーミッションを「777」に設定したディレクトリ「test2」を作成してみます。

$ mkdir -m 777 test2

作成後パーミッションが「777」に設定されていることを確認します。

$ ls -l
total 8
drwxrwxr-x 2 tamohiko tamohiko 4096 Jun 30 16:45 test
drwxrwxrwx 2 tamohiko tamohiko 4096 Jun 30 16:45 test2

「-m」オプションを使用しない場合は、作成されるディレクトリのパーミッションはユーザのumaskに設定されている値になります。

-p(--parents)オプション

「-p」オプションを使用すると、作成しようとしているディレクトリの親ディレクトリが無い場合、親ディレクトリもあわせて子ディレクトリを作成してくれます。

ちょっと文字だけの説明だとわかりづらいので、実際にディレクトリを作成してみます。

まず、「-p」オプション指定せずに「test3」というディレクトリが無い状態で「test3/testdir」というディレクトリを作成するとエラーとなりディレクトリは作成されません。

$ mkdir test3/testdir
mkdir: cannot create directory ‘test3/testdir’: No such file or directory

次に、「-p」オプションを使用してディレクトリを作成してみると、存在していなかった「test3」というディレクトリもあわせて作成してくれます。

$ mkdir -p test3/testdir

「test3」というディレクトリと、その中に「testdir」ディレクトリが作成されていることが確認できます。

$ ls -l
total 12
drwxrwxr-x 2 tamohiko tamohiko 4096 Jun 30 16:45 test
drwxrwxrwx 2 tamohiko tamohiko 4096 Jun 30 16:45 test2
drwxrwxr-x 3 tamohiko tamohiko 4096 Jun 30 16:46 test3

$ ls -l test3
total 4
drwxrwxr-x 2 tamohiko tamohiko 4096 Jun 30 16:46 testdir

-v(--verbose)オプション

通常「mkdir」コマンドでディレクトリを作成しても、正常にディレクトリが作成された場合は特に何も表示されませんが、「-v」オプションを使用するとどのようなディレクトリが作成されたのか表示されます。

「-v」オプションを指定して「test4」というディレクトリを作成してみると、ディレクトリが作成された旨のメッセージが表示されました。

$ mkdir -v test4
mkdir: created directory ‘test4’

「-p」オプションと組み合わせて使用してみると、親ディレクトリもあわせて作成されている様子が分かりやすくなります。

$ mkdir -p -v test5/testdir
mkdir: created directory ‘test5’
mkdir: created directory ‘test5/testdir’

一度に複数のディレクトリを作成する方法

あまり使う機会はないかもしれませんが、「mkdir」コマンドで一度に複数のディレクトリを作成する方法です。

「,」区切り

{}で囲み「,」で区切ることで一度に複数のディレクトを作成することが出来ます。

例えば「test6」「test7」「test8」という3つのディレクトリを一度に作成する場合は、それぞれを「,」で区切って作成するディレクトリ名を指定します。

$ mkdir -v {test6,test7,test8}
mkdir: created directory ‘test6’
mkdir: created directory ‘test7’
mkdir: created directory ‘test8’

このように、ディレクトリ名の一部を指定することもできます。

$ mkdir -v test{10,11,12,14,15}
mkdir: created directory ‘test10’
mkdir: created directory ‘test11’
mkdir: created directory ‘test12’
mkdir: created directory ‘test14’
mkdir: created directory ‘test15’

「..」による範囲指定

連番で作成したい場合は{}で囲んで「..」で連番の範囲を指定することが出来ます。

この「..」はbashのブレース展開を使用するため、bashのバージョンが3以降でなければ使用することが出来ません。
※bashのバージョンは「bash --version」で確認することができます。

たとえばtest20からtest30というディレクトリを作成する場合は、下記の通りに指定することで作成することが出来ます。

$ mkdir -v test{20..30}
mkdir: created directory ‘test20’
mkdir: created directory ‘test21’
mkdir: created directory ‘test22’
mkdir: created directory ‘test23’
mkdir: created directory ‘test24’
mkdir: created directory ‘test25’
mkdir: created directory ‘test26’
mkdir: created directory ‘test27’
mkdir: created directory ‘test28’
mkdir: created directory ‘test29’
mkdir: created directory ‘test30’

桁を0埋めさせたりすることもできます。

$ mkdir -v test{00..10}
mkdir: created directory ‘test00’
mkdir: created directory ‘test01’
mkdir: created directory ‘test02’
mkdir: created directory ‘test03’
mkdir: created directory ‘test04’
mkdir: created directory ‘test05’
mkdir: created directory ‘test06’
mkdir: created directory ‘test07’
mkdir: created directory ‘test08’
mkdir: created directory ‘test09’
mkdir: created directory ‘test10’

数字以外に文字も指定することが出来ます。

$ mkdir -v test{a..e}
mkdir: created directory ‘testa’
mkdir: created directory ‘testb’
mkdir: created directory ‘testc’
mkdir: created directory ‘testd’
mkdir: created directory ‘teste’

-m と -pの組み合わせ時の注意点

「-m」と「-p」オプションを組み合わせて使用する場合は、指定したパーミッションが設定されるのは子ディレクトリのみとなってしまうのでちょっと注意が必要となります。

「-p」オプションを使用して「test/testdir」というディレクトリを作成する場合に、パーミッションを「-m」オプションで「777」と指定したとします。

この場合に設定したパーミッションが有効となるのは「test/testdir」ディレクトリのみとなり、親ディレクトリである「test」ディレクトリのパーミッションは「umask」で指定されている値となってしまいます。

$ mkdir -m 777 -pv test/testdir
mkdir: created directory ‘test’
mkdir: created directory ‘test/testdir’

ディレクトリを作成した後にそれぞれのパーミッションを確認してみると、小ディレクトリである「testdir」のパーミッションだけが「777」と設定されてることが確認できます。

$ ls -l
total 4
drwxrwxr-x 3 tamohiko tamohiko 4096 Jun 30 17:01 test

$ ls -l test/
total 4
drwxrwxrwx 2 tamohiko tamohiko 4096 Jun 30 17:01 testdir

ディレクトリの削除方法

ディレクトリの作成方法の説明をしたので、ついでに削除する方法についても説明しておきます。

ディレクトリの削除には「rmdir」コマンドを使用する方法と「rm」コマンドを使用する方法がありますので、それぞれの方法について説明していきます。

rmdirを使用する方法

「rmdir」コマンドの後に削除したいディレクトリを指定することで、ディレクトリを削除することが出来ます。

rmdir ディレクトリ

ただし、rmdirを使用してディレクトリを削除する場合は、ディレクトリの中身が空っぽである必要があります。ディレクトリの中にファイルやディレクトリがある場合は、エラーとなって削除することが出来ませんので注意してください。

「test」ディレクトリの中に「testdir」というディレクトリを作成してから、「test」ディレクトを「rmdir」コマンドで削除してみます。

$ mkdir -p test/testdir

ディレクトリの中が空っぽではないため、エラーが表示されてディレクトリを削除することが出来ません。

$ rmdir test
rmdir: failed to remove ‘test’: Directory not empty

rmコマンドを使用する方法

「rm」コマンドを使用してディレクトリを使用する場合、ディレクトリが空っぽの場合のみ削除する方法と、中にフォルダやファイルがあった場合も削除するという2種類の方法がありますので、両方の方法について説明をしていきます。

ディレクトリの中身が空っぽの場合のみ削除

「-d」オプションを使用すると、「rmdir」コマンドと同様に中身が空っぽの場合に限りディレクトリを削除することが出来ます。

rm -d ディレクトリ

ディレクトリの中が空っぽでない場合はその旨のメッセージが表示されて、ディレクトリは削除されません。

$ rm -d test
rm: cannot remove ‘test’: Directory not empty

ディレクトリの中にファイル・ディレクトリがある場合も削除する方法

ディレクトリの中にファイルやディレクトリがある場合にも削除するには、「-r」「-R」「--recursive」オプションのどれかを指定します。

rm -r ディレクトリ
rm -R ディレクトリ
rm  --recursive ディレクトリ

「-r」オプションを使用してディレクトリを削除してみます。今回は「-v」オプションもあわせて使用して削除されたディレクトリを表示させるようにしてみました。

$ rm -rv test
removed directory: ‘test/testdir’
removed directory: ‘test’

この方法でディレクトリを削除する場合には、必要なデータが削除対象ディレクトリに含まれていか十分に確認を行ってから削除するようにしましょう。

 - mkdir