mkdirは「make directory」の略で、そのままディレクトリを新規作成するコマンドだ。
Windowsの「右クリック > 新しいフォルダを作成」に当たる。
Linuxのコマンドの中でも使用頻度が高いコマンドで、このコマンドなしでは基本的な操作もできない。使いやすいオプションも揃っているので、オプション含め動作をしっかり把握し活用してほしい。
目次
コマンドの基本
コマンドの基本動作
ディレクトリを新規作成するには、次のコマンドで簡単だ。
$ mkdir ディレクトリ名
work01ディレクトリを作成するには、次のコマンドだ。
$ mkdir work01
work01ディレクトリが作成された。
確認してみよう。
$ ls -ld work01
work01ディレクトリが作成されている。
上記mkdirコマンドを試すなら下のコマンドをLinux上で実行すればすぐに再現可能だ。
1 2 |
mkdir work01 ls -ld work01 |
mkdirコマンドの便利なオプションたち
コマンドの一覧
後から詳細をご紹介するが、まずは一覧で見てみよう。
オプション-m(--modeオプション)
パーミッションを指定しディレクトリを作成する
-pオプション(--parentsオプション)
エラーを表示せず記述したディレクトリが存在しなければ作成する
-vオプション(--verboseオプション)
ディレクトリを作成した結果のメッセージを表示する
それでは、ひとつずつ見ていこう。
-mオプション:パーミッションを指定しディレクトリを作成する
パーミッションを指定してディレクトリを作成するオプションだ。
mkdirは指定がなければ、状況によってシステムで規定されたパーミッションが指定されるが、このオプションを使うことで任意のパーミッションを指定できる。
$ mkdir -m パーミッション指定 ディレクトリ名
パーミッションは、000から777までの3桁の8進数の形式や、u=w+といった権限を与えるユーザー=権限の形式で指定できる。
パーミッションが666(全ユーザに読み書き許可、実行許可なし)のwork02ディレクトリを作成するには、次のコマンドだ。
$ mkdir -m 666 work02
パーミッションが666のwork02ディレクトリが作成された。
確認してみよう。
$ ls -ld work02
ディレクトリwork02がrw-rw-rw-で全ユーザーに読み書き許可、実行許可なしのパーミッションで作成されている。
$ mkdir -m 666 work02
1 |
ls -ld work02 |
--modeオプションも同じ
-mオプションと同様にパーミッションを指定してディレクトリを作成するオプションだが=でもパーミッションを指定できる。
$ mkdir --mode=パーミッション指定 ディレクトリ名
「=」がなくても動く。
パーミッションが所有者に実行権限を与えたwork03ディレクトリを作成する場合は、次のコマンドだ。
$ mkdir --mode o=w+ work03
パーミッションが所有者に実行権限を与えたwork03ディレクトリが作成された。
確認してみよう。
$ ls -ld work03
ディレクトリwork03が所有者に実行権限が与えられたパーミッションで作成されている。
もしくは次の半角空白ではなく=を記述した書式でも可能だ。パーミッションが所有者に実行権限を与えたwork04ディレクトリを作成する場合は、次のコマンドになる。
$ mkdir --mode=o=w+ work04
パーミッションが所有者に実行権限を与えたwork04ディレクトリが作成された。
確認してみよう。
$ ls -ld work04
パーミッション指定の前に空白で指定した書式と同様にディレクトリwork04が所有者に実行権限が与えられたパーミッションで作成されている。
パーミッション指定のオプションは書式が違うだけですべて同じ動作をするので、やりやすい書式のオプションを選択しよう。
1 2 3 4 |
mkdir --mode o=w+ work03 ls -ld work03 mkdir --mode=o=w+ work04 ls -ld work04 |
-pオプション(--parentsオプション):エラーを表示せず記述したディレクトリが存在しなければ作成する
mkdirは指定がなければ、作成しようとしているディレクトリが存在していると、エラーになりディレクトリが作成されない。
実験してみよう。
すでにあるwork01ディレクトリを同じ名前で再度作成するために次のコマンドを実行する。
$ mkdir work01
ディレクトリwork01が存在しているというエラーメッセージが表示された。
これはwork01ディレクトリがすでにあるにもかかわらず再度作成すると、そのディレクトリ内容も削除されてしまうので作成できないようにしているためである。
また、mkdirは指定がなければ作成する親ディレクトリが存在していなくてもエラーになり子ディレクトリが作成されない。
実験してみよう。
存在しないwork05ディレクトリ内にsub02ディレクトリを作成するために次のコマンドを実行する。
$ mkdir work05/sub02
work05ディレクトリが存在しないというエラーメッセージが表示された。親ディレクトリであるwork05がなければ子ディレクトリを作成することができないためである。
1階層だけのディレクトリの作成であればあまり問題にならないが、ディレクトリの構成が深くなればなるほど面倒だ。
この2通りのケースに対応できるオプションが、-pオプション(--parentsオプション)だ。
-pオプション(--parentsオプション)を指定することで、ディレクトリが存在していてもエラーメッセージを表示せず、現在あるディレクトリはそのままにして新規に作成することはなく子ディレクトリを作成する。
コマンドは次の通りだ。
$ mkdir -p ディレクトリ名
また、親ディレクトリが存在しなくてもエラーメッセージを表示せずに親ディレクトリと子ディレクトリを作成する。
現在あるwork01ディレクトリがある場合は無視し、ない場合はwork01ディレクトリを作成するためには、次のコマンドだ。
$ mkdir -p work01
エラーメッセージが表示されない。
ディレクトリを確認してみよう。
$ ls -ld work01
この場合、work01ディレクトリは上書き作成されるのではないことに注意したい。エラー表示しないだけだ。
今度は現在ないディレクトリに対する動作を確認していこう。現在ないwork05ディレクトリ内にsub02ディレクトリを作成するためには、次のコマンドだ。
$ mkdir -p work05/sub02
エラーメッセージが表示されない。
ディレクトリを確認してみよう。
$ ls -lR work05
work05ディレクトリは新規作成され、またwork05ディレクトリ内にsub02ディレクトリが作成されている。
1 2 3 4 5 6 |
mkdir work01 mkdir work05/sub02 mkdir -p work01 ls -ld work01 mkdir -p work05/sub02 ls -lR work05 |
-vオプション(--verboseオプション):ディレクトリを作成した結果のメッセージを表示する
親ディレクトリから子ディレクトリまでいくつもディレクトリを作成する場合、どのディレクトリが新規作成されたものか作成しながら、一度に確認できると便利だ。
-vオプション(--verboseオプション)はmkdirコマンドでディレクトリを作成した結果を表示する。
$ mkdir -v ディレクトリ名
現在あるwork01ディレクトリ内にsub01ディレクトリを作成し、その中にdata00ディレクトリを確認しながら作成するためには、次のコマンドだ。
$ mkdir -p -v work01/sub01/data00
sub01ディレクトリとdata00ディレクトリが新たに作成されたことがわかった。
1 |
mkdir -p -v work01/sub01/data00 |
オプションの同時指定
もちろんオプションは、同時指定をすることもできる。
work06ディレクトリ内にsub05ディレクトリを確認しながら作成するためには、次のコマンドだ。
$ mkdir -p -v work06/sub05
このコマンドは、次のようにも入力できる。
$ mkdir -pv work06/sub05
-mオプションによるパーミッションの指定を組み合わせる場合も同じように考えることができる。
work06ディレクトリ内にsub06ディレクトリを確認しながらパーミッションが666で作成するためには、次のコマンドだ。
$ mkdir -pvm 666 work06/sub05
上記のように-mオプションと-pオプションを組み合わせて、パーミッションを指定しながら親子ディレクトリを作成する場合、注意したい点がある。
-mオプションと-pオプションを組み合わせた場合は、パーミッションは指定した最下位のディレクトリにのみ反映される。
もしもディレクトリ全体に対してパーミッションを変更する場合は、一旦作成した後、chmodコマンドを-Rオプション付きで実行する。
ディレクトリのみパーミッションを反映し、ファイルにはパーミッションを指定したくない場合は、findコマンドのディレクトリのみ指定する-type dオプションと他のコマンドを実行する-execオプションを組み合わせ、次のコマンドで実行できる。
$ find ディレクトリ -type d -exec chmod パーミッション {} \;
work06ディレクトリ内のディレクトリのパーミッションを707に変更するためには、次のコマンドだ。
$ find work06 -type d -exec chmod 707 {} \;
確認してみよう。
$ ls -ld work06 work06/sub05
work06ディレクトリとその中のsub06ディレクトリのパーミッションが707に変更されている。
1 2 3 |
mkdir -mpv 666 work06/sub05/ find work06 -type d -exec chmod 707 {} \; ls -ld work06 work06/sub05 |
mkdir関連コマンド
最後にmkdirコマンドに関連して、基本的なファイルやディレクトリ操作のコマンドも紹介しておく。
rmdirコマンド
ディレクトリを削除する
cpコマンド
ファイルやディレクトリをコピーする
rmコマンド
ファイルやディレクトリを削除する
mvコマンド
ファイルやディレクトリを移動する
まとめ
mkdirコマンドはLinuxを使う上で、非常に使用頻度の高いコマンドの一つだ。
-pオプション(--parentsオプション)と-vオプションは必ず常時付与してもいい便利なオプションだ。これらのオプションとともに覚えておきたい。
コメント