华山再高,顶有过路。
一,mkdir命令是什么
https://man.he.net/man1/mkdir
mkdir - 创建目录
mkdir (Make Directory) 是 Linux 中最基础但也最强大的命令之一。除了简单的创建文件夹,配合不同的参数,能瞬间搭建复杂的目录结构。
二,参数
[root@master1 ~]# mkdir --help用法:mkdir [选项]... 目录...如果目录不存在,则创建该目录。长选项的必填参数对于短选项来说也是必填的。 -m, --mode=MODE 设置文件模式(如使用chmod命令),非a=rwx - umask -p, --parents 如果已存在,则无错误;根据需要创建父目录 -v, --verbose 为每个创建的目录打印一条消息 -Z 将每个创建的目录的SELinux安全上下文设置为默认类型 --context[=CTX] like -Z, 或者,如果指定了CTX,则将SELinux或SMACK安全上下文设置为CTX --help 显示此帮助信息并退出 --version 显示版本信息并退出GNU coreutils online help: <http://www.gnu.org/software/coreutils/>请向<http://translationproject.org/team/zh_CN.html> 报告mkdir 的翻译错误要获取完整文档,请运行:info coreutils 'mkdir invocation'
三,例子
1、一键创建多层级目录(最常用)
在没有 -p 的情况下,如果父目录不存在,命令会报错。使用 -p 可以一次性创建整条路径。
[root@master1 ~]# mkdir /opt/dir2/dir3mkdir: 无法创建目录"/opt/dir2/dir3": 没有那个文件或目录[root@master1 ~]# mkdir /opt/dir2/dir3 -p[root@master1 ~]# ls /opt/dir2/dir3[root@master1 ~]#
2、花括号扩展:瞬间搭建项目骨架
这是 mkdir 的“高阶玩法”,配合 Shell 的花括号 {},可以一次性创建多个平级或嵌套的目录,非常适合初始化项目结构。
[root@master1 ~]# mkdir -p /opt/dir2/{src,bin,doc,test}[root@master1 ~]# ls /opt/dir2/bin dir3 doc src test[root@master1 ~]#
3、创建复杂的嵌套结构:
[root@master1 ~]# mkdir -p /opt/dir2/dir3/{1..5}/{images,notes}[root@master1 ~]# ls /opt/dir2/dir3/1 2 3 4 5[root@master1 ~]# ls /opt/dir2/dir3/1/images notes[root@master1 ~]# ls /opt/dir2/dir3/2/images notes
4、创建带权限的目录(安全)
[root@master1 ~]# mkdir -m 700 /opt/dir2/secret1 # 创建一个权限为 700 的目录(所有者读写执行,其他人无任何权限)[root@master1 ~]# mkdir -m 500 /opt/dir2/secret2 # 创建一个权限为 600[root@master1 ~]# ls /opt/dir2/bin dir3 doc secret1 secret2 src test[root@master1 ~]# ll /opt/dir2/总用量 0drwxr-xr-x 2 root root 6 5月 10 11:18 bindrwxr-xr-x 7 root root 51 5月 10 11:19 dir3drwxr-xr-x 2 root root 6 5月 10 11:18 docdrwx------ 2 root root 6 5月 10 11:23 secret1dr-x------ 2 root root 6 5月 10 11:24 secret2drwxr-xr-x 2 root root 6 5月 10 11:18 srcdrwxr-xr-x 2 root root 6 5月 10 11:18 test[root@master1 ~]#
5、创建带时间戳的备份目录,结合命令替换 $(date ...),可以自动创建以当前日期命名的目录,常用于脚本备份
# 创建格式为 backup_20260510 的目录[root@master1 ~]# mkdir -p /opt/dir2/backup_$(date +%Y%m%d)[root@master1 ~]# ls /opt/dir2/ -lth总用量 0drwxr-xr-x 2 root root 6 5月 10 11:29 backup_20260510dr-x------ 2 root root 6 5月 10 11:24 secret2drwx------ 2 root root 6 5月 10 11:23 secret1drwxr-xr-x 7 root root 51 5月 10 11:19 dir3drwxr-xr-x 2 root root 6 5月 10 11:18 bindrwxr-xr-x 2 root root 6 5月 10 11:18 docdrwxr-xr-x 2 root root 6 5月 10 11:18 testdrwxr-xr-x 2 root root 6 5月 10 11:18 src
6、显示创建详情,加上 -v 可以清楚地看到发生了什么。
[root@master1 ~]# mkdir -pv /opt/dir2/a/bmkdir: 已创建目录 "/opt/dir2/a"mkdir: 已创建目录 "/opt/dir2/a/b"
7、创建包含空格的目录名,如果目录名中包含空格或特殊字符,必须使用引号包裹,或者使用转义字符。
# 方法一:使用引号(推荐)mkdir "my photos 2026"# 方法二:使用转义符mkdir my\ photos\ 2026[root@master1 ~]# mkdir /opt/dir2/"my photos 2026"[root@master1 ~]# mkdir /opt/dir2/my\ photos\ 2027[root@master1 ~]# ls /opt/dir2/[root@master1 ~]# ls /opt/dir2/ -lth总用量 0drwxr-xr-x 2 root root 6 5月 10 11:34 my photos 2027drwxr-xr-x 2 root root 6 5月 10 11:33 my photos 2026
[root@master1 ~]# mkdir -p /opt/dir2/{web,app,api}-env/{dev,test,prod}[root@master1 ~]# ls /opt/dir2/api-env app-env web-env[root@master1 ~]# ls /opt/dir2/ -R/opt/dir2/:api-env app-env web-env/opt/dir2/api-env:dev prod test/opt/dir2/api-env/dev:/opt/dir2/api-env/prod:/opt/dir2/api-env/test:/opt/dir2/app-env:dev prod test/opt/dir2/app-env/dev:/opt/dir2/app-env/prod:/opt/dir2/app-env/test:/opt/dir2/web-env:dev prod test/opt/dir2/web-env/dev:/opt/dir2/web-env/prod:/opt/dir2/web-env/test:
9、目录结构模板:复刻骨架,利用 mkdir 的嵌套能力,一键生成一个标准的软件项目骨架。[root@master1 ~]# rm -rf /opt/dir2/*[root@master1 ~]# mkdir -p /opt/dir2/myapp/{src/{components,hooks,utils},public,tests/{unit,integration},docs}[root@master1 ~]# ls -lth -R /opt/dir2//opt/dir2/:总用量 0drwxr-xr-x 6 root root 56 5月 10 11:47 myapp/opt/dir2/myapp:总用量 0drwxr-xr-x 2 root root 6 5月 10 11:47 docsdrwxr-xr-x 4 root root 37 5月 10 11:47 testsdrwxr-xr-x 2 root root 6 5月 10 11:47 publicdrwxr-xr-x 5 root root 50 5月 10 11:47 src/opt/dir2/myapp/docs:总用量 0/opt/dir2/myapp/tests:总用量 0drwxr-xr-x 2 root root 6 5月 10 11:47 integrationdrwxr-xr-x 2 root root 6 5月 10 11:47 unit/opt/dir2/myapp/tests/integration:总用量 0/opt/dir2/myapp/tests/unit:总用量 0/opt/dir2/myapp/public:总用量 0/opt/dir2/myapp/src:总用量 0drwxr-xr-x 2 root root 6 5月 10 11:47 componentsdrwxr-xr-x 2 root root 6 5月 10 11:47 hooksdrwxr-xr-x 2 root root 6 5月 10 11:47 utils/opt/dir2/myapp/src/components:总用量 0/opt/dir2/myapp/src/hooks:总用量 0/opt/dir2/myapp/src/utils:总用量 0
10、创建“共享文件夹”(粘滞位),创建一个目录供多人协作(例如 /tmp 或团队共享目录),希望大家都能写入,但只能删除自己的文件,不能删除别人的文件,这时需要设置粘滞位(Sticky Bit)。
效果: 所有用户都可以往里面存文件,但用户 A 无法删除用户 B 上传的文件,只有文件所有者和 root 能删除。
#创建带权限目录[root@master1 ~]# mkdir -m 1777 /opt/dir2/team_share -p[root@master1 ~]# ls /opt/dir2/ -lth总用量 0drwxrwxrwt 2 root root 6 5月 10 11:49 team_share[root@master1 team_share]# pwd/opt/dir2/team_share[root@master1 team_share]# ls -thmytest2 mytest1[root@master1 team_share]# ls -lth总用量 8.0K-rw-rw-r-- 1 test2 test2 2 5月 10 11:52 mytest2-rw-rw-r-- 1 test1 test1 2 5月 10 11:51 mytest1#测试权限,切换test1 test2 两个目录分别执行[test1@master1 ~]$ cd /opt/dir2/[test1@master1 team_share]$ echo 1 > mytest2[test1@master1 team_share]$ lsmytest1 mytest2[test1@master1 team_share]$ echo 1 > mytest2-bash: mytest2: 权限不够#test2测试[test1@master1 ~]$ cd /opt/dir2/[test1@master1 team_share]$ echo 2 > mytest2[test1@master1 team_share]$ lsmytest1 mytest2[test2@master1 team_share]$ rm -rf mytest1 rm: 无法删除"mytest1": 不允许的操作
11、创建“黑洞”目录(仅 root 可见),创建一个只有 root 能看、能写的目录,普通用户甚至不知道里面有什么[root@master1 team_share]# sudo mkdir -m 700 /opt/dir2/secure_logs#切换test1 用户[test1@master1 dir2]$ ls /opt/dir2/secure_logs/ls: 无法打开目录/opt/dir2/secure_logs/: 权限不够
12、自动创建“今日工作区”,把这个命令写在 .bashrc 或别名里,每天早上自动创建以今天日期命名的文件夹# 定义别名:mktd (Make Today)[root@master1 dir2]# mkdir -p /opt/dir2/work/$(date +%Y-%m-%d) && cd /opt/dir2/work/$(date +%Y-%m-%d)[root@master1 2026-05-10]# pwd/opt/dir2/work/2026-05-10#从文件列表[root@master1 dir2]# vi list.txt[root@master1 dir2]# cat list.txt | xargs mkdir[root@master1 dir2]# ls -lth总用量 4.0Kdrwxr-xr-x 2 root root 6 5月 10 12:02 01drwxr-xr-x 2 root root 6 5月 10 12:02 02drwxr-xr-x 2 root root 6 5月 10 12:02 03-rw-r--r-- 1 root root 9 5月 10 12:02 list.txtdrwxr-xr-x 3 root root 24 5月 10 12:01 work[root@master1 dir2]# cat list.txt 010203
四,补充
作者 编写于 David MacKenzie.提交BUG GNU coreutils online help: <https://www.gnu.org/software/coreutils/> Report any translation bugs to <https://translationproject.org/team/>版权 Copyright (C) 2020 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>. 这是免费软件:您可以自由修改和重新分发。在法律允许的范围内,不提供任何保证。关于 mkdir(2) 完整文档在 <https://www.gnu.org/software/coreutils/mkdir> 或在本地通过: info '(coreutils) mkdir invocation'
五,总结
mkdir 不仅仅是“新建文件夹”,它是文件系统的建筑师。
以前从没相关单独写一下mkdir,因为太常用了,今天再发掘,发现了一些mkdir 从没发现过的特性,比如权限玩法,分享给大家最后的最后(Last but not least),欢迎交流:
关注公众号留言,或者在下方直接留言: