Linux mkdir 命令详解 🐧📁📂

学习目标 🎯

理解 mkdir 命令的基本功能与使用场景。

掌握创建目录的多种方式,包括一次性创建多级目录。

了解不同 Linux 发行版(如 Ubuntu、CentOS、EulerOS)在权限和默认行为上的差异。

能结合实际开发、运维、脚本编写等场景灵活运用 mkdir。

熟悉常见错误及解决方法。

核心重点 ✅

类别

内容

命令含义

make directory 创建目录

基本语法

mkdir [选项] 目录名

常用参数

-p, -m, -v

核心功能

- 创建单个或多个目录- 创建嵌套目录结构

权限控制

受文件系统权限限制,普通用户不能在 /root 或 /etc 下创建目录

跨平台差异

不同发行版对权限、默认 umask 设置略有差异

详细讲解 💡

1. 基本介绍 📘

📌 功能:

mkdir 是 make directory 的缩写,用于在 Linux 文件系统中创建新目录。它是文件管理中最基础但非常重要的命令之一。

📌 语法:

mkdir [选项] 目录名

📌 示例:

mkdir mydir # 创建一个名为 mydir 的目录

mkdir dir1 dir2 dir3 # 一次创建多个并列目录

2. 常用参数详解 🛠️

✅ -p:递归创建目录(最常用)

当你需要创建多层嵌套目录时,必须使用 -p 参数:

mkdir -p project/src/main/java

⚠️ 如果不加 -p,会提示:

mkdir: cannot create directory ‘project/src/main/java’: No such file or directory

📌 这个参数适用于:

初始化项目结构

自动化脚本中创建日志/缓存目录

✅ -m:设置目录权限(mode)

你可以直接在创建目录时指定权限模式:

mkdir -m 700 private_data # 权限为 drwx------

🔍 权限说明(数字表示法):

7 = rwx(读+写+执行)

6 = rw-

5 = r-x

4 = r--

⚠️ 注意:如果当前用户的 umask 设置为 022,则实际权限会被掩码影响。例如:

umask 022

mkdir newdir

# 实际权限是 drwxr-xr-x (755)

✅ -v:显示详细的创建过程(verbose)

mkdir -v dir1 dir2 dir3

输出示例:

mkdir: created directory 'dir1'

mkdir: created directory 'dir2'

mkdir: created directory 'dir3'

👀 应用:调试脚本时查看具体执行情况,适合初学者理解流程。

3. 实际应用场景 🏢

🧱 场景一:初始化项目目录结构(开发环境搭建)

mkdir -p myproject/{src,bin,lib,doc,logs}

这将创建如下结构:

myproject/

├── bin/

├── doc/

├── lib/

├── logs/

└── src/

👀 应用:快速构建标准项目结构,避免手动逐层创建。

🧱 场景二:自动化脚本中创建日志目录

#!/bin/bash

LOG_DIR="/var/log/myapp"

if [ ! -d "$LOG_DIR" ]; then

mkdir -p $LOG_DIR

fi

👀 应用:确保程序运行前有对应的日志路径,防止因目录不存在而崩溃。

🧱 场景三:创建临时测试目录

mkdir -p /tmp/testdata/{input,output}

👀 应用:测试数据处理流程时,快速构建输入输出路径。

4. 不同 Linux 发行版差异对比 🖥️🐧

对比项

Ubuntu

CentOS

EulerOS

默认 shell

bash

bash

bash

默认 umask

0022

0022

0022

是否支持 -p

是否支持 -m

是否支持 SELinux

❌(默认关闭)

✅(默认启用)

✅(默认启用)

root 用户权限限制

sudo 制度严格

su 更常见

政企级安全强化

⚠️ 小贴士:在生产环境中(如 EulerOS),创建目录时可能受 SELinux 或 AppArmor 等安全策略限制,需额外配置上下文标签或权限策略。

5. 常见问题与解决方案 ❗

❌ 错误 1:权限不足无法创建目录

mkdir: cannot create directory ‘/root/mydir’: Permission denied

原因:普通用户没有权限操作 /root 目录

解决:使用 sudo 提权:

sudo mkdir /root/mydir

❌ 错误 2:目录已存在

mkdir: cannot create directory ‘logs’: File exists

原因:目录已经存在

解决:

使用 -p 忽略该错误(不会报错)

或先检查是否存在再创建(建议用于脚本):

[ ! -d "logs" ] && mkdir logs

❌ 错误 3:路径中有空格或特殊字符

mkdir my folder

mkdir: cannot create directory ‘my’: File exists

解决:

mkdir "my folder" # 加引号

mkdir my\ folder # 转义空格

6. 小技巧 & 高效用法 🚀

Tab 补全:输入部分目录名后按 Tab 键自动补全。

历史记录:使用上下箭头键查看之前执行过的 mkdir 命令。

批量创建目录:

mkdir dir{1..10} # 创建 dir1 ~ dir10

mkdir {images,css,js} # 创建 images、css、js 三个目录

配合变量使用(脚本中):

BASE_DIR="/opt/app"

mkdir -p $BASE_DIR/{log,tmp,data}

7. 实战练习题 🧪

🔍 练习 1:

请写出以下命令的作用:

mkdir -p data/{in,out,err}

📝 答案:

创建 data/in, data/out, data/err 三个子目录,若父目录 data 不存在则自动创建。

🔍 练习 2:

编写一个脚本 create_project_dirs.sh,实现以下功能:

接收一个参数作为项目名称

创建该项目的目录结构:{src,bin,lib,doc,logs}

📝 答案:

#!/bin/bash

PROJECT_NAME=$1

if [ -z "$PROJECT_NAME" ]; then

echo "请提供项目名称!"

exit 1

fi

mkdir -p $PROJECT_NAME/{src,bin,lib,doc,logs}

echo "项目目录 $PROJECT_NAME 已创建完成!"

使用方法:

chmod +x create_project_dirs.sh

./create_project_dirs.sh myapp

总结 📋

mkdir 是 Linux 中最基础但极其实用的命令之一,尤其在项目初始化、脚本编写、自动化部署中扮演重要角色。通过掌握其各种参数、理解不同发行版之间的差异,并结合实际场景灵活使用,可以显著提升你的工作效率和系统掌控能力。

建议多与 cd, ls, rm, touch 等命令配合使用,形成完整的目录操作流程。