mkdir 默认只创建最后一级目录,需加 -p 才能递归建多级路径;批量建同级目录可用 mkdir -p {logs,conf,bin};权限须用 -m 显式指定,且仅作用于末级目录;挂载点下建目录需先挂载再创建,-pv 可验证实际创建情况。

不加 -p 就根本建不成多级路径
Linux 的 mkdir 默认只创建**最后一级目录**,前提是所有上级目录已存在。比如当前是空目录,执行 mkdir a/b/c 会直接报错:mkdir: cannot create directory ‘a/b/c’: No such file or directory。这不是权限问题,而是语义限制 —— 它不负责“补全路径”。
-
mkdir -p是唯一可靠方式:它从左到右逐级检查,自动创建所有缺失的父目录(a、a/b),最后再建a/b/c - 已存在的层级会被静默跳过,不会报错也不会覆盖
- 哪怕路径中混有符号链接,
-p仍能正常工作(只要最终路径可写)
批量建同级目录时大括号展开最省事
如果要一次性建 logs、conf、bin 三个并列目录,不用重复敲三次 mkdir:
mkdir -p logs conf bin
更进一步,用 shell 大括号展开可以避免重复打字:
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
mkdir -p {logs,conf,bin}
- 注意:大括号内不能有空格,否则会被当作文本字面量;含空格或特殊字符时,必须改用
while read或数组方式处理 - 这种写法本质是 shell 展开后调用一次
mkdir -p,和分开写等价,但更紧凑
权限控制必须显式用 -m,别指望 umask
新建目录默认权限受系统 umask 影响,比如 umask 022 会让 mkdir dir 产出 755,但你无法保证所有环境 umask 一致。想精确控制,就得用 -m:
mkdir -p -m 700 private/stuff
-
-m必须放在-p后面(顺序无关紧要,但习惯上先-p再-m) - 它只作用于**最末级目录**(
stuff),上级(private)仍按 umask 计算 —— 如果也要统一设权,得分别指定或用chmod -R补救 - 权限数字建议用八进制(如
750),避免符号写法在脚本中出歧义
挂载点或 NFS 路径下建多级目录要格外小心
在 /mnt 下为新磁盘建挂载点,比如 /mnt/data/archive/2026,看似只是路径问题,但实际可能踩坑:
- 如果目标是 NFS 或某些网络文件系统,
mkdir -p可能因服务器端权限或导出选项失败,错误信息往往模糊(如Permission denied却不是本地权限问题) - 挂载前就建好完整路径,挂载后该路径内容会被隐藏 —— 所以推荐先挂载,再在已挂载点内建子目录
- 用
mkdir -pv(加-v)可确认每一级是否真被创建,避免误以为成功而后续操作失败
mkdir -p a/b/c 可能触发竞态,虽然概率低,但关键路径里得加锁或检查返回值。

















