この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:9
ページ更新者:guest
更新日時:2026-06-11 07:12:00

タイトル: mkdir ディレクトリの作成
SEOタイトル: Linux mkdir コマンド完全ガイド (-p / -m / -v / Windows md / PowerShell New-Item)

この記事の要点
  • mkdir dirname でディレクトリ作成。既存ディレクトリならエラー
  • -p で多階層を一括作成 (途中の親ディレクトリも自動作成)、既存でもエラー出ない
  • -m 755 でパーミッション指定、-v で作成内容を表示
  • 複数同時: mkdir a b c / Windows: mkdir または md
  • 失敗パターン: Permission denied (権限不足) / File exists (-p なしで既存) / No such file (-p なしで親が無い)

基本構文

# 単一ディレクトリ作成
mkdir mydir

# 複数同時
mkdir dir1 dir2 dir3

# 確認
ls -ld mydir
# drwxr-xr-x  2 user group  4096 Jun 10 12:34 mydir/

主要オプション

オプション意味
-p / --parents親ディレクトリも作成、既存でもエラー出さないmkdir -p a/b/c
-m MODE / --mode=MODEパーミッション指定 (umask の影響なし)mkdir -m 700 secret
-v / --verbose作成したディレクトリを表示mkdir -v a b c
-ZSELinux セキュリティコンテキスト指定 (RHEL)mkdir -Z /var/www/html/site
--helpヘルプ
--versionバージョン

-p で多階層を一括作成

# ❌ -p 無し: 親ディレクトリが無いとエラー
mkdir a/b/c
# mkdir: cannot create directory 'a/b/c': No such file or directory

# ✅ -p で親も自動作成
mkdir -p a/b/c
# → a/, a/b/, a/b/c/ 全部作成される

# ✅ 既存ディレクトリにも -p なら安全 (エラー出ない)
mkdir -p a/b/c  # 2回目でも OK

# 開発でよく使うパターン
mkdir -p src/main/java/com/example/{model,controller,service,repository}
# → ブレース展開で複数ディレクトリ一気に

# 確認
tree src/
# src/
# └── main
#     └── java
#         └── com
#             └── example
#                 ├── controller
#                 ├── model
#                 ├── repository
#                 └── service

パーミッション指定 (-m)

# umask の影響を受けず、指定したモードで作成
mkdir -m 755 public          # rwxr-xr-x
mkdir -m 700 private         # rwx------
mkdir -m 2775 shared         # rwxrwsr-x (SGID 付き)

# シンボリック指定
mkdir -m u=rwx,g=rx,o= secret
ls -ld secret
# drwxr-x---  2 user group  4096 ... secret/

# -p と組み合わせると、最後のディレクトリだけ -m が効く点に注意
mkdir -p -m 750 a/b/c
ls -ld a a/b a/b/c
# a と a/b は umask 既定値、a/b/c だけ 750

umask とパーミッションの関係

mkdir でモードを指定しない場合、デフォルトモード 0777 から umask を引いた値が使われます:

umask
# 0022 (一般的なデフォルト)

mkdir test
ls -ld test
# drwxr-xr-x  → 0777 - 0022 = 0755

# umask 変更
umask 0077
mkdir secret
ls -ld secret
# drwx------  → 0777 - 0077 = 0700 (自分以外完全拒否)

# 永続化は ~/.bashrc / /etc/profile に umask を書く

失敗パターンと対処

エラー原因対処
Permission denied親ディレクトリに書込権限なしsudo mkdir or chmod / chown
File exists同名のファイル / ディレクトリが既存-p を付ける / 別名にする
No such file or directory親ディレクトリが存在しない-p を付ける
Read-only file systemRO マウント / 容量不足mount -o rw,remount /
Disk quota exceededクォータ上限quota -u user 確認
File name too longパスが OS 上限超過パスを短く

Windows での mkdir / md

:: コマンドプロンプト
mkdir mydir
md mydir              :: md は mkdir の別名

:: 多階層は何もオプション無しで OK (Linux と挙動が違う)
mkdir a\b\c           :: a, a\b, a\b\c 全部作成される

:: 複数同時 (スペース区切り)
mkdir dir1 dir2 dir3

:: 既存だとエラー
mkdir mydir
:: A subdirectory or file mydir already exists.

PowerShell での同等コマンド

# 単一ディレクトリ
New-Item -ItemType Directory -Path mydir

# 多階層 (-Force で親も作成、既存でもエラー出ない)
New-Item -ItemType Directory -Path a\b\c -Force

# 短縮 (mkdir / md は PowerShell でも関数として動く)
mkdir mydir
md mydir
ni -ItemType Directory -Path mydir

# 複数
'dir1', 'dir2', 'dir3' | ForEach-Object {
    New-Item -ItemType Directory -Path $_ -Force
}

# パーミッション (NTFS ACL) は別途設定
$acl = Get-Acl mydir
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule(
    "Everyone", "ReadAndExecute", "Allow"
)
$acl.SetAccessRule($rule)
Set-Acl mydir $acl

応用: スクリプトから安全に作成

#!/bin/bash
# 安全なディレクトリ作成パターン

DIR="/var/log/myapp"

# パターン1: 存在チェック後に作成 (古い書き方)
if [ ! -d "$DIR" ]; then
    mkdir -p "$DIR" || { echo "作成失敗" >&2; exit 1; }
fi

# パターン2: -p なら冪等 (推奨)
mkdir -p "$DIR" || { echo "作成失敗" >&2; exit 1; }

# パターン3: 一時ディレクトリ (mktemp 推奨)
TMPDIR=$(mktemp -d /tmp/myapp.XXXXXX)
trap "rm -rf $TMPDIR" EXIT
echo "作業ディレクトリ: $TMPDIR"

# パターン4: 親ディレクトリ含めて権限統一
install -d -m 755 -o www-data -g www-data /var/www/html/uploads
# → install コマンドで mkdir + chown + chmod を 1 発で

FAQ

Q: mkdir したら 755 じゃなくて 775 になった
A: umask が 0002 になっています。umask で確認、umask 0022 で標準に戻せます。

Q: 一気に大量のディレクトリを作るには?
A: ブレース展開が便利。mkdir -p logs/{2026-01..2026-12} で 12 個一気に。

Q: シンボリックリンクを mkdir で作れる?
A: いいえ、リンクは ln -s を使います。mkdir は実ディレクトリ専用。