文件与目录76 条

mkdir 创建目录

创建一级或多级目录;-p 自动补齐父目录且目标已存在不报错,是脚本幂等建目录的标准写法。

Linux 运维命令速查系统更新于 2026-10-13

mkdir 是什么

mkdir 是 GNU coreutils 里的建目录命令,一次可以创建一级或多级目录。它默认只建最后一段:父目录不存在时直接报 No such file or directory;加上 -p 才会把缺失的父目录一并补齐,并且目标已存在时不再报错,这正是脚本里「幂等建目录」的标准写法。新建目录的权限等于默认模式 777 与 ~umask 按位与的结果,用 -m 可以绕开 umask 直接指定。

基本信息

适用平台Linux 发行版通用(GNU coreutils);BusyBox 精简版选项较少
命令语法mkdir [选项] 目录...
常用选项-p 递归创建缺失父目录且忽略已存在 / -m 模式 直接指定权限 / -v 显示每个实际创建的目录 / -Z 设置 SELinux 上下文
权限要求需要对父目录有写权限与执行权限;在 /、/usr 等系统目录下建目录需要 root

典型使用场景

  • 部署脚本建目录骨架:mkdir -p /data/app/{conf,logs,tmp} 一条命令建好多级与多个子目录,重复执行不报错
  • 严格控制权限的目录:mkdir -m 700 ~/.ssh,密钥目录不允许同组或其他人进入
  • 按日期归档:mkdir -p /backup/$(date +%Y%m%d) 给每天的备份留独立目录
  • 批量生成平行结构:mkdir -p project/{src,test,docs} 快速搭出工程骨架
  • 清理脚本占位:先建临时空目录做落点,任务结束后用 rmdir 收走

常用示例

常用示例
mkdir -p /data/app/{conf,logs,tmp}   # 多级 + 多子目录,一次建成
mkdir -m 750 /srv/secure             # 直接指定权限,不受 umask 影响
mkdir -pv a/b/c                      # 显示实际创建的每一级目录
mkdir -p /backup/$(date +%F)         # 按日期建归档目录
mkdir -v release-v1 release-v2       # 批量建一级目录并回显
mkdir -p -- '-weird-name'            # 目录名以 - 开头时用 -- 分隔

权限与 umask 的关系

权限与 umask 的关系
umask                              # 例如输出 0022
mkdir -m 777 d1; stat -c %a d1     # 777:-m 覆盖 umask
mkdir d2;       stat -c %a d2      # 755 = 777 与 ~022 按位与

常用选项

选项作用使用提示
-p递归创建缺失的父目录,目标已存在也不报错脚本里的默认选择,保证可重复执行
-m 模式用八进制模式指定权限,不受 umask 影响敏感目录用 700 或 750
-v打印每个实际创建的目录排查脚本到底建了什么
-Z 上下文设置 SELinux 安全上下文只在启用了 SELinux 的系统上有效
--选项与参数分隔用来处理以 - 开头的目录名
umask 决定默认权限:目录默认是 777 与 ~umask 的按位与(常见 755),文件默认是 666 与 ~umask 的按位与(常见 644)。要做共享目录,可再给目录加 setgid 位(chmod 2775),让其中新建的文件自动继承父目录的组。
需要同时定好属主、属组与权限的目录,用 install -d -m 750 -o app -g app /opt/app/conf 一条命令搞定,比 mkdir 加 chown 加 chmod 三步少两次出错机会。

常见权限取值

模式含义典型目录
700仅属主可读写执行密钥目录 ~/.ssh
750属主全权限,同组可读可进入团队组内共享的配置目录
755所有人可读可进入,仅属主可写网站静态目录、命令目录
2775在 775 基础上加 setgid,新建文件自动继承该目录的组多人协作的共享目录
1777加 sticky 位,只有属主能删自己的文件类似 /tmp 的公共目录

常见误用

  • 用 chmod -R 777 处理「权限不够」,把安全边界一次性拆掉;应先定位缺的是哪一级目录的哪个位
  • 把递归改权限当日常操作,结果给普通文件也加上了执行位
  • 建完目录忘记改属主,服务以另一个用户运行仍然写不进去
目录的 x 位表示「可以通过并进入」:只给 r 不给 x 时,ls 能看到目录里的文件名,却读不到文件内容,共享目录最常见的权限投诉就是这种缺 x 的组合。
递归改权限时不要一把梭:-R 会把执行位加到普通文件上。规范做法是先对目录统一加 x,再对文件统一去掉 x,两条命令分工完成。

易错点

  • 不加 -p 时父目录不存在会立刻报错,脚本可能中途退出;幂等脚本统一写 mkdir -p
  • 目录已存在时 mkdir 返回非 0,用它来判断存在性不可靠,应改用 [ -d 路径 ]
  • 权限受当前 shell 的 umask 影响,想要可预期的 755 或 700 就用 -m 明确指定
  • 目录缺少执行位时无法进入,只读共享目录常误配成 644 而进不去
  • 目录名以 - 开头会被当成选项解析,用 -- 分隔或加 ./ 前缀

数据来源与参考

  • man 1 mkdir(GNU coreutils 手册)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌