mkdir コマンドは、新しいディレクトリ(フォルダ)を作成するためのコマンドです。
単一のディレクトリだけでなく、親ディレクトリもまとめて作成したり、作成時のパーミッションを指定したりすることができます。
Web サーバ用のディレクトリ構成を作るときや、ログ・バックアップ用ディレクトリを用意するとき、
シェルスクリプトの中で必要なディレクトリを事前に作成するときなど、サーバ運用で日常的に利用するコマンドです。
mkdir [オプション] ディレクトリ名...
引数には、作成したいディレクトリ名(またはパス)を指定します。
複数指定すると、複数のディレクトリを一度に作ることもできます。
親ディレクトリが存在しない場合はエラーになりますが、-p オプションを付けることで、
必要な親ディレクトリも含めてまとめて作成することができます。
・カレントディレクトリに新しいディレクトリを作成する(基本)
mkdir logs
カレントディレクトリに logs という名前のディレクトリを作成します。
すでに同名のディレクトリが存在する場合はエラーになります。
・一度に複数のディレクトリを作成する
mkdir app logs tmp
スペース区切りで複数指定すると、app・logs・tmp の 3 つのディレクトリをまとめて作成します。
初期構築時に、一気に土台となるディレクトリを用意したいときに便利です。
・親ディレクトリも含めてまとめて作成する(-p)
mkdir -p /var/www/example.com/public_html
-p(–parents)は、指定したパスの途中にある親ディレクトリが存在しない場合に、
親ディレクトリも含めてまとめて作成します。
すでに存在するディレクトリに対して実行してもエラーにならないため、スクリプトの中で多用されます。
・アプリケーションごとのログディレクトリを階層ごと一気に作成する
mkdir -p /var/log/myapp/api /var/log/myapp/batch
複数のパスを指定した例です。
/var/log/myapp が存在しない場合でも、-p によって親ディレクトリごと作成されます。
・パーミッションを指定してディレクトリを作成する(-m)
mkdir -m 750 /var/www/example.com
-m モード(–mode)は、作成するディレクトリのパーミッションを指定します。
この例では、所有者に読み書き実行、グループに読み実行、その他には権限なし(750)で作成します。
umask の設定にかかわらず、指定したモードで作成したい場合に利用します。
・作成したディレクトリ名を表示しながら処理する(-v)
mkdir -pv /var/www/example.com/public_html
-v(–verbose)は、mkdir が作成したディレクトリを 1 行ずつ表示します。
どのディレクトリが作られたのかをログとして残したいとき、-p と組み合わせて使うことがよくあります。
・日付入りのバックアップディレクトリを作成する(スクリプト例)
mkdir -p /backup/$(date +%Y%m%d)
日付(例: 20240101)の名前を持つバックアップディレクトリを作成する例です。
cron などで定期実行するバックアップスクリプトの中でよく使われるパターンです。
・SELinux コンテキストを指定してディレクトリを作成する(対応環境のみ)
mkdir -Z httpd_sys_content_t /var/www/example.com/public_html
-Z(–context)は、SELinux が有効な環境で、作成するディレクトリに付与する
セキュリティコンテキストを指定します(利用可否や指定方法は環境によって異なります)。
通常の運用では chcon や semanage fcontext を使うことが多く、mkdir で直接指定するケースは限定的です。
・Web サーバのディレクトリ構成を作る
例:/var/www/example.com/public_html や /var/log/nginx など、
Web サーバやアプリケーションのためのディレクトリ構成を用意する際に、mkdir -p を多用します。
・ログ・バックアップ用のディレクトリを事前に作成しておく
バッチ処理やバックアップスクリプトが動く前に、
/var/log/myapp や /backup/日付 などのディレクトリを作成しておくのは定番です。
スクリプト内で mkdir -p を入れておくと、「ディレクトリがない」というエラーを防げます。
・権限付きの作業ディレクトリを準備する
一時的な作業用ディレクトリを、特定ユーザ・グループ専用にしたい場合、
mkdir -m 750 で作成後、必要に応じて chown で所有者を変更する、といった使い方をします。
・自動構築スクリプトの中でのディレクトリ準備
Ansible / シェルスクリプト / Cloud-Init などでサーバを自動構築する際、
必要なディレクトリをすべて mkdir -p で作成しておくことで、後続の処理をシンプルにできます。
mkdir 自体はシンプルなコマンドですが、-p と -m をどう組み合わせるかで使い勝手が大きく変わります。
「親ディレクトリも一気に作る」「パーミッションを最初から適切にしておく」という 2 点を意識して使うと、
ディレクトリまわりのトラブルを減らしやすくなります。
| short option | long option | description |
|---|---|---|
| -p | --parents | 指定したパスの途中にある親ディレクトリが存在しない場合に親ディレクトリも含めてまとめて作成し既に存在する場合もエラーにしない |
| -m | --mode | 作成するディレクトリのパーミッション(モード)を指定する(例: -m 755)umask の影響を受けずに指定どおりの権限で作成したいときに使用 |
| -v | --verbose | 作成したディレクトリのパスを処理とともに表示する(スクリプト実行時のログ確認などに便利) |
| -Z | --context | SELinux が有効な環境で作成するディレクトリに付与するセキュリティコンテキストを指定する(対応環境のみ有効) |
| --help | --help | mkdir コマンドの使い方(ヘルプ)を表示して終了する |
| --version | --version | mkdir コマンドのバージョン情報を表示して終了する |
ここでは、GNU coreutils ベースの mkdir コマンドでよく使われる主なオプションを TablePress の表としてまとめている想定です。
実際に利用できるオプションや挙動は、ディストリビューションやバージョンによって異なる場合があるため、
本番環境で使用する前に man mkdir で最新の仕様を確認してください。
新着情報
ブログランキングに参加しています。クリックして応援していただけると嬉しいです。
