在 Linux 日常使用、项目部署和服务器运维中,mkdir 是最常用的目录创建命令。无论是创建项目目录、日志目录、备份目录,还是在脚本中初始化目录结构,mkdir 都非常高频。mkdir 看起来只是“创建目录”,但实际工作中经常会遇到多级目录不存在、目录已经存在、权限不足、目录权限不符合预期等问题。掌握几个常用参数,可以让目录创建更稳定、更适合脚本化操作。
一、mkdir 是什么?
mkdir 是 make directory 的缩写,用于创建目录。
它主要用于:
说明:
- 使用
-p 可以递归创建多级目录,并且目录已存在时不报错
二、常见使用语法与重点参数
重点参数说明:
常见示例:
mkdir logsmkdir -p /data/app/logsmkdir -m 755 scriptsmkdir -pv /data/app/{logs,tmp,backup}
日常使用中最常用的是 mkdir 和 mkdir -p。
三、常用命令与使用场景
1. 创建单个目录
会在当前目录下创建一个名为 logs 的目录。
创建后可以查看:
2. 一次创建多个目录
会在当前目录下同时创建三个目录:
适合初始化简单目录结构。
3. 创建指定路径下的目录
如果 /data/app 已经存在,就会创建 /data/app/logs。
如果父目录 /data/app 不存在,则会报错:
No such file or directory
这种场景更适合使用 -p。
4. 递归创建多级目录
如果 /data、/data/app、/data/app/logs 中某些目录不存在,mkdir -p 会自动按层级创建。
这是部署脚本和初始化脚本中最常用的写法。
5. 目录已存在时不报错
如果目录已经存在,命令不会报错。
这对脚本很重要,因为脚本重复执行时,不会因为目录已经存在而中断。
6. 创建目录时显示过程
示例输出:
mkdir: created directory '/data'mkdir: created directory '/data/app'mkdir: created directory '/data/app/logs'
适合排查脚本创建目录时到底创建了哪些路径。
7. 创建目录时指定权限
表示创建 scripts 目录,并指定权限为 755。
查看权限:
说明:
775:属主和用户组可读写进入,其他用户可读和进入
实际权限还可能受到 umask 影响,必要时创建后用 chmod 再调整。
8. 使用花括号创建多个子目录
mkdir -p /data/app/{logs,tmp,backup}
会创建:
/data/app/logs/data/app/tmp/data/app/backup
适合快速创建一组同级目录。
9. 创建日期目录
mkdir -p /data/backup/$(date +%F)
示例目录:
适合日志备份、数据库备份、文件归档等场景。
10. 脚本中创建目录前先确认路径
backup_dir=/data/backup/$(date +%F)mkdir -p "$backup_dir"
变量加双引号是一个好习惯,可以避免路径中包含空格或特殊字符时出错。
11. 创建目录后立即进入
mkdir -p /data/app/logscd /data/app/logspwd
这种组合适合初始化目录并继续在目录中操作。
也可以写成:
mkdir -p /data/app/logs && cd /data/app/logs
&& 表示前一个命令成功后才执行后一个命令。
12. 创建目录失败时排查原因
如果普通用户执行,可能提示:
常见原因包括:
可以检查:
pwdls -ld /rootls -ld /data/app
四、常见问题与建议
1. mkdir 和 mkdir -p 有什么区别?
普通 mkdir 只创建最后一级目录,要求父目录必须存在,且目标目录不能已经存在。
mkdir -p 会递归创建多级目录,并且目录已存在时不报错。
脚本中通常优先使用:
2. 为什么创建目录时提示 File exists?
说明目标目录已经存在。
例如:
如果 logs 已经存在,就会报错。可以改用:
3. 为什么创建目录时提示 No such file or directory?
通常是父目录不存在。
例如:
如果 /data/app 不存在,就会失败。使用:
可以递归创建。
4. 为什么创建目录时提示 Permission denied?
说明当前用户对父目录没有写权限。
查看父目录权限:
如果没有权限,需要切换到有权限的目录,或由管理员调整权限。
5. mkdir -m 设置的权限为什么和预期不一致?
可能受 umask 影响。
可以查看当前 umask:
如果需要严格控制权限,可以创建后再执行:
6. 生产环境中使用 mkdir 有什么建议?
建议:
例如:
app_dir=/data/appmkdir -p "$app_dir/logs" "$app_dir/tmp"ls -ld "$app_dir" "$app_dir/logs" "$app_dir/tmp"
五、常用命令速查
mkdir logsmkdir logs tmp backupmkdir /data/app/logsmkdir -p /data/app/logsmkdir -pv /data/app/logsmkdir -m 755 scriptsmkdir -p /data/app/{logs,tmp,backup}mkdir -p /data/backup/$(date +%F)mkdir -p /data/app/logs && cd /data/app/logs
六、总结
mkdir 是 Linux 下最基础的目录创建命令。建议优先掌握以下几条:
mkdir dirmkdir -p /path/to/dirmkdir -pv /path/to/dirmkdir -m 755 dirmkdir -p /data/app/{logs,tmp,backup}
实际工作中,最常用也最稳妥的是 mkdir -p。它能递归创建多级目录,并且目录已存在时不会报错,非常适合脚本和重复执行的初始化任务。遇到创建失败时,优先检查父目录是否存在、当前用户是否有写权限,以及路径是否写对。