mkdir コマンドで新しいディレクトリを作成するとき、複数階層を一度に作る、作成時に権限を指定する、既存ディレクトリでもエラーにしないなど、目的に応じてオプションを使い分けると作業がぐっと効率化します。この記事では「mkdir オプション」で知りたいことに直接答える形で、基本構文・主要オプション・実行例・注意点を整理します。すべてのコマンド例は実環境で動作確認済みです。
mkdirコマンドとは
mkdir(make directory)は、指定した名前の新しいディレクトリを作成するコマンドです。システム管理やスクリプト作成、作業用フォルダの作成など、日常的に利用されます。
基本構文(Syntax)
mkdir [オプション] ディレクトリ名...
ディレクトリ名はスペース区切りで複数指定でき、一度のコマンドでまとめて作成できます。
mkdirの主なオプション一覧
| オプション | 説明 | 使用例 |
|---|---|---|
| (なし) | 単一または複数のディレクトリを作成 | mkdir project |
-p, --parents | 存在しない親ディレクトリも同時に作成し、既存ディレクトリを指定してもエラーにしない | mkdir -p project/src/include |
-v, --verbose | 作成したディレクトリ名を1件ずつ表示(verbose) | mkdir -v project |
-m MODE, --mode=MODE | 作成と同時にパーミッション(アクセス権)を指定。umaskの影響を受けない | mkdir -m 755 project |
-Z, --context | SELinuxのセキュリティコンテキストを設定 | mkdir -Z project |
--help | ヘルプを表示 | mkdir --help |
--version | バージョン情報を表示 | mkdir --version |
オプション別の実行例
オプションなし:単一・複数のディレクトリを作成
mkdir work
mkdir dir1 dir2 dir3
スペース区切りで複数指定すると、まとめて作成されます。
-p:親ディレクトリごと一括作成
mkdir -p project/src/include
→ project → src → include の順に、存在しない階層をまとめて作成します。ブレース展開と組み合わせると、複数の子ディレクトリも1コマンドで作れます。
mkdir -p project/{src,bin,doc}
→ project/src・project/bin・project/doc の3ディレクトリが一度に作成されます。シェルスクリプトの初期化処理でよく使われる書き方です。
-p:既存ディレクトリを指定してもエラーにしない
mkdir -p work
echo $?
すでに work が存在していてもエラーにならず、終了ステータスも 0(成功)になります。-p なしで既存ディレクトリを指定すると File exists エラーで終了ステータスが 1 になるため、スクリプト内で「なければ作る」処理をエラーなく書きたいときは -p が必須です。
-m:パーミッションを指定して作成
mkdir -m 700 private_dir
ls -ld private_dir
drwx------ 2 user user 4096 7月 20 00:00 private_dir
-m を指定しない場合、パーミッションは umask(既定では多くの環境で 022 や 002)の影響を受けて自動的に絞り込まれます。-m を使うと umask に関係なく指定したモードがそのまま設定される点が特徴です。詳しいパーミッションの仕組みはパーミッションとは?Linuxの権限の仕組みとchmodによる変更方法で解説しています。
-v:作成したディレクトリを表示
mkdir -v newdir
mkdir: created directory 'newdir'
-p -v のように組み合わせると、途中で作成された親ディレクトリもすべて表示されます。
よくあるエラーと対処法
| エラー内容 | 原因 | 対処法 |
|---|---|---|
mkdir: cannot create directory 'work': File exists | 同名のディレクトリ(またはファイル)がすでに存在する | -p を付けるか、別名にする |
mkdir: cannot create directory 'no_parent/child': No such file or directory | 親ディレクトリ no_parent が存在しない | -p を付けて親ディレクトリごと作成する |
mkdir: cannot create directory '/root/xxx': Permission denied | 対象パスへの書き込み権限がない | 権限のあるディレクトリに作成するか、sudo を使う |
よくある質問
mkdir -pとは何をするオプションですか?
存在しない親ディレクトリを自動的に作成し、さらに指定したディレクトリがすでに存在してもエラーにしないオプションです。mkdir -p a/b/c のように使うと、a・b・c をまとめて作成できます。
複数のディレクトリを一度に作成するには?
mkdir dir1 dir2 dir3 のようにスペース区切りで並べるか、mkdir -p project/{src,bin,doc} のようにブレース展開と組み合わせます。
作成したディレクトリの権限を指定するには?
-m MODE オプションで指定します。例えば mkdir -m 700 secret とすると、所有者のみ読み書き・実行できるディレクトリになります。作成後に権限を変更したい場合は chmod コマンドを使います。
既存ディレクトリを指定するとどうなりますか?
-p なしの場合は File exists エラーになり作成に失敗します。-p を付けた場合はエラーにならず、そのまま処理が続行されます。
関連コマンド
rmdir: 空のディレクトリを削除。詳しくはLinuxでディレクトリを削除する方法|rmdir・rm -rの使い方と注意点を解説を参照rm -r: ディレクトリと中身を再帰的に削除。詳しくはLinuxでファイルを削除する方法|rmコマンドの使い方と主要オプションを解説を参照ls: 作成したディレクトリの中身を確認。詳しくはls – ディレクトリやファイルの一覧を表示するコマンドを参照chmod: 既存ディレクトリのパーミッションを変更。詳しくはパーミッションとは?Linuxの権限の仕組みとchmodによる変更方法を参照cd: 作成したディレクトリへ移動。詳しくはcd – ディレクトリを移動するを参照pwd: 現在の作業ディレクトリを確認。詳しくはpwd – 現在の作業ディレクトリ(カレントディレクトリ)を表示するを参照find: 作成したディレクトリ配下のファイルを検索。詳しくはfind – ファイルやディレクトリを検索するコマンドを参照
備考
- ディレクトリ作成には、作成先の親ディレクトリへの書き込み権限が必要です。
-pオプションを使えばエラーを避けつつ階層をまとめて作れるため、シェルスクリプトの初期化処理でよく利用されます。-mを省略した場合の権限はumaskの値によって決まります。明示的に権限を固定したい場合は-mを指定してください。
参考
- manページ: man7.org mkdir(1)
- GNU Coreutils: https://www.gnu.org/software/coreutils/

コメント