必须用-p才能安全创建多级目录,因mkdir默认只创建末级目录,中间任一父目录缺失即报“No such file or directory”错误;-p可自动补全所有缺失父目录且静默跳过已存在目录。

mkdir -p 是 Linux 运维中构建目录结构最常用、最可靠的命令,核心作用是“自动补全缺失的父目录”,避免因路径不完整导致脚本中断或手动逐层创建的繁琐。
为什么必须用 -p 才能安全创建多级目录
不加 -p 时,mkdir 只尝试创建路径最末端的那一级。只要中间任意一级(比如 app/logs 中的 app 不存在),就会报错:
mkdir: cannot create directory ‘app/logs’: No such file or directory。
这不是权限问题,而是命令设计限制——-p 是唯一能绕过该限制的原生命令。
典型运维场景下的正确写法
在部署脚本、日志初始化、CI/CD 流水线中,应始终搭配 -p 使用:
- 创建项目骨架:
mkdir -p /opt/myapp/{bin,etc,logs,cache} - 初始化日志层级:
mkdir -p /var/log/myapp/{error,access,audit} - 配合变量动态生成路径:
mkdir -p "/data/backups/$DATE/{full,diff}"(注意引号防空格/特殊字符)
权限控制不能依赖 umask,要用 -m 显式指定
运维环境差异大(本地 umask 常为 0002,CI 环境常为 0022),不加 -m 会导致组写权限意外丢失。关键规则:
- 目录必须有执行位(x)才能 cd 进入,所以
644对目录无效 - 公开服务目录建议
-m 755(如 web 根目录) - 敏感数据目录建议
-m 700(如.ssh或密钥缓存) -
-m必须紧接在-p后面,写成mkdir -p -m 755 path,顺序颠倒可能被旧系统忽略
调试与可观测性:加上 -v 更易排查
在部署脚本或故障复现阶段,叠加 -v 能清晰看到每一级实际创建了什么:
mkdir -pv /tmp/test/{a,b}/subdir
输出示例:
mkdir: 已创建目录 '/tmp/test'
mkdir: 已创建目录 '/tmp/test/a'
mkdir: 已创建目录 '/tmp/test/a/subdir'
mkdir: 已创建目录 '/tmp/test/b'
mkdir: 已创建目录 '/tmp/test/b/subdir'


















