Linux `mkdir` 命令详解

Linux mkdir 命令详解 🐧📁📂


学习目标 🎯

  • 理解 mkdir 命令的基本功能与使用场景。
  • 掌握创建目录的多种方式,包括一次性创建多级目录。
  • 了解不同 Linux 发行版(如 Ubuntu、CentOS、EulerOS)在权限和默认行为上的差异。
  • 能结合实际开发、运维、脚本编写等场景灵活运用 mkdir
  • 熟悉常见错误及解决方法。

核心重点 ✅

类别 内容
命令含义 make directory 创建目录
基本语法 mkdir [选项] 目录名
常用参数 -p, -m, -v
核心功能 - 创建单个或多个目录
- 创建嵌套目录结构
权限控制 受文件系统权限限制,普通用户不能在 /root/etc 下创建目录
跨平台差异 不同发行版对权限、默认 umask 设置略有差异

详细讲解 💡

1. 基本介绍 📘

📌 功能:

mkdirmake 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 等命令配合使用,形成完整的目录操作流程。

posted @ 2025-06-19 21:04  红尘过客2022  阅读(214)  评论(0)    收藏  举报