mkdir(make directories)是 Linux 建立目錄的核心指令。除了基本建立單層目錄,其 -p 遞迴建立、-m 直接指定權限、-v 顯示過程等參數,能大幅簡化腳本撰寫與部署流程。本文完整整理語法、參數、實戰範例與最佳實務。

mkdir [選項]... 目錄...
前置條件:
w)與執行(x)權限| 參數 | 長參數 | 功能 | 範例 |
|---|---|---|---|
| -p | --parents | 遞迴建立父目錄鏈,不存在則自動建立 | mkdir -p a/b/c |
| -m | --mode=模式 | 直接設定目錄權限(如 chmod 格式),覆蓋 umask | mkdir -m 750 private |
| -v | --verbose | 顯示每個建立的目錄名稱 | mkdir -pv a/b/c |
| -Z | --context | 設定 SELinux 安全內容(預設類型) | mkdir -Z webroot |
| --help | 顯示幫助資訊 | ||
| --version | 顯示版本資訊 |
權限計算: 最終權限 =mode & ~umask。若指定-m則忽略 umask 直接套用模式。
mkdir test1
ls -ld test1
# drwxr-xr-x 2 user group 4096 Oct 25 17:42 test1
mkdir -p test2/test22
tree test2
# test2
# └── test22
# 加上 -v 顯示過程
mkdir -pv project/{src,bin,doc,test/{unit,integration}}
# mkdir: 建立了目錄 'project'
# mkdir: 建立了目錄 'project/src'
# mkdir: 建立了目錄 'project/bin'
# ...
# 建立僅擁有者可存取的私密目錄
mkdir -m 700 ~/.ssh_backup
# 建立群組協作目錄(設定 setgid 確保新檔繼承群組)
mkdir -m 2770 /shared/teamdata
chgrp developers /shared/teamdata
# 建立年份月份目錄結構
mkdir -p /var/log/app/{2023,2024}/{01..12}
# 建立多專案標準結構
mkdir -p /opt/{web,api,worker}/{config,logs,data,tmp}
#!/bin/bash
LOG_DIR="/var/log/myapp"
CONFIG_DIR="/etc/myapp"
# -p 確保父目錄存在,不報錯;搭配 || true 忽略已存在錯誤
mkdir -p "$LOG_DIR" "$CONFIG_DIR" || {
echo "無法建立目錄,檢查權限" >&2
exit 1
}
# 設定正確權限與擁有者
chown appuser:applog "$LOG_DIR"
chmod 750 "$LOG_DIR"
chmod 755 "$CONFIG_DIR"
# 安全建立唯一臨時目錄
TMP_DIR=$(mktemp -d /tmp/myapp.XXXXXX)
mkdir -p "$TMP_DIR/{input,output,work}"
# 使用結束後清理
trap 'rm -rf "$TMP_DIR"' EXIT
| 錯誤 | 原因 | 解決 |
|---|---|---|
| Permission denied | 父目錄無寫入權限 | sudo mkdir 或 chmod u+w 父目錄 |
| File exists | 同名檔案/目錄已存在 | 改名、刪除舊項目、或使用 mkdir -p 忽略 |
| No space left on device | 磁碟空間不足或 inode 耗盡 | df -h/df -i 檢查,清理空間 |
| Invalid argument | 目錄名含非法字元(/、NUL) | 檢查變數內容,避免不當字元 |
-p: 避免「父目錄不存在」錯誤,支援冪等操作-m: 關鍵目錄(SSH、SSL、資料庫)直接設定安全權限-v 除錯: 腳本開發階段觀察建立順序與結果-Z: 確保安全內容正確,避免後續存取被拒熟練掌握 mkdir 的參數組合與 Shell 擴展特性,能讓環境部署、專案初始化、日誌輪轉等自動化流程更加健壯且可維護。
Linux VirtualBox 安裝 Windows 8.1 報錯 0x000000C4 解決:啟用 CMPXCHG16B CPU 指令支援
RedHat yum 提示 Unable to read consumer identity?改用 CentOS 鏡像源免註冊安裝軟體
Kali Linux 安裝後必做配置指南:軟體源、中文輸入法、Flash、QQ、開發工具一鍵部署
解決《UNIX 環境高級編程》範例缺少 apue.h 與 error.c 頭文件的編譯錯誤
VirtualBox 安裝 Ubuntu 後滑鼠無法自動釋放、剪貼板無法共享?安裝 Guest Additions 完整解決