在 Linux 操作系统的命令行环境中,mkdir命令是创建目录的基础且实用的工具。其基本语法格式格式为:
复制
[root@localhost ~]# mkdir [OPTION]... DIRECTORY...1.
该命令用于创建由DIRECTORY命名的目录。若在目录名前未添加任何路径名,将在当前目录下创建指定目录;若指定了已存在的路径,则会在该路径下创建相应目录。同时,创建目录时需确保新建目录与所在目录下的文件无重名情况。

命令参数与选项详解
参数选项
说明
DIRECTORY ...
指定要创建的目录列表,多个目录之间用空格隔开。例如mkdir dir1 dir2,可在当前目录下同时创建dir1和dir2两个目录。
选项
-p, --parents
若所要建立目录的上层目录尚未建立,该选项会一并建立上层目录。比如创建多级目录devops/test,若devops目录不存在,直接使用mkdir devops/test会报错;而使用mkdir -p devops/test,则会自动创建devops目录及子目录test。
-m, --mode=MOD
建立目录的同时设置目录的权限。如mkdir -m 333 dir2,创建dir2目录时将其权限设置为333,即所有者、组用户和其他用户都只有写和执行权限 。
-v, --verbose
显示创建目录的过程。执行mkdir -v dir1,命令行将显示mkdir: created directory dir1,方便用户确认目录创建情况。
-Z, --context=CTX
设置安全上下文,在使用 SELinux 时有效,可将每个创建的目录的 SELinux 安全环境设置为指定的CTX 。
--help
显示此帮助信息并退出,帮助用户快速了解命令用法和选项功能。
--version
显示版本信息并退出,便于用户知晓当前mkdir命令的版本 。
案例演示
(1) 不使用任何命令参数创建目录
直接指定目录名,在当前目录下创建新目录。
复制
[root@localhost ~]# mkdir data
[root@localhost ~]# tree -d
.
└── data
1 directory1.2.3.4.5.6.
上述操作在当前目录下创建了名为data的目录,通过tree -d命令可直观查看目录结构。
(2) 使用 -p 参数递归创建多级目录
当创建多级目录且上层目录不存在时,-p参数可避免报错并自动创建所需上层目录。
复制
# 未使用 -p 参数,报错示例
[root@localhost ~]# mkdir devops/test
mkdir: cannot create directory ‘devops/test’: No such file or directory
# 使用 -p 参数成功创建
[root@localhost ~]# mkdir -p devops/test
[root@localhost ~]# tree -d
.
├── data
└── devops
└── test
3 directories1.2.3.4.5.6.7.8.9.10.11.12.13.
(3) 使用 -m 参数设置目录的默认权限
创建目录时可利用-m参数灵活设置权限。
复制
# 创建该目录默认权限为 755
[root@localhost ~]# mkdir dir1
[root@localhost ~]# ls -ld dir1/
drwxr-xr-x. 2 root root 6 Jun 23 22:40 dir1/
# 创建目录时指定 333 的数字权限
[root@localhost ~]# mkdir -m 333 dir2
[root@localhost ~]# ls -ld dir2/
d-wx-wx-wx. 2 root root 6 Jun 23 22:41 dir2/1.2.3.4.5.6.7.8.9.
(4) 同时创建多个目录及多级子目录
在生产环境中,常需创建多个目录及多级子目录,此时可借助mkdir命令结合大括号{}的特殊用法高效完成。
复制
# 大括号里用逗号分隔
[root@localhost ~]# mkdir -p devops/{dir1_1,dir1_2}/{dir2_1,dir2_2}
# 上面创建的目录命令所对应的目录结构如下
[root@localhost ~]# tree -d devops/
devops/
├── dir1_1
│ ├── dir2_1
│ └── dir2_2
├── dir1_2
│ ├── dir2_1
│ └── dir2_2
└── test
7 directories
# {1..5}和{a..g}表示序列
[root@localhost ~]# mkdir -p test/dir{1..5} ops/{a..g}
[root@localhost ~]# tree -d test/ ops/
test/
├── dir1
├── dir2
├── dir3
├── dir4
└── dir5
ops/
├── a
├── b
├── c
├── d
├── e
├── f
└── g
12 directories1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.
扩展知识:大括号{}的特殊用法
在{}中使用逗号分隔多个字符或单词时,配合echo命令可将这些字符或单词分别输出到屏幕上。
复制
# 会输出 B C 到屏幕上
[root@localhost ~]# echo {B,C}
B C
[root@localhost ~]# echo A{B,C}
AB AC
# 如果逗号前无内容,可认为是一个空字符串
[root@localhost ~]# echo A{,C}
A AC1.2.3.4.5.6.7.8.9.10.
生产案例
在实际生产中,若要对大目录进行脚本操作,需先搭建模拟环境复制目录结构。
复制
# 显示所有目录树,--noreport 不显示最后一行统计信息,也可用 find 命令输出目录树
[root@localhost ~]# tree -fid --noreport devops/
devops
devops/dir1_1
devops/dir1_1/dir2_1
devops/dir1_1/dir2_2
devops/dir1_2
devops/dir1_2/dir2_1
devops/dir1_2/dir2_2
devops/test
# 将目录树内容追加到 root 用户家目录下的 devops.txt 文件中
[root@localhost ~]# tree -fid --noreport devops/ >> ~/devops.txt
[root@localhost ~]# cd /tmp/
[root@localhost tmp]# mkdir -p `cat /root/devops.txt`
[root@localhost tmp]# tree devops/
devops/
├── dir1_1
│ ├── dir2_1
│ └── dir2_2
├── dir1_2
│ ├── dir2_1
│ └── dir2_2
└── test
7 directories, 0 files1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.
此案例中,利用反引号优先执行内部cat命令读取文件内容,再执行mkdir命令,避免了因命令过长带来的不便,高效创建了所需目录结构。
掌握mkdir命令的这些用法,能够帮助我们在 Linux 系统中更便捷、高效地进行目录管理,无论是日常操作还是生产环境应用,都能游刃有余。