详解Linux命令之mkdir

linux命令建新目录

坦白讲,Linux中创建新目录的命令其实很简单,使用mkdir即可。
我们先来说说最重要的事情。
基本用法是 mkdir dirName。
这里的dirName是你要创建的新目录的名称。
例如,要创建名为“AAA”的目录,您可以键入 mkdir AAA。

还有一点,如果需要创建多级目录,比如BBB/CCC/DDD这样的结构,可以使用mkdir -p。
这个-p参数非常关键,因为它会帮助你创建多级目录。
如果中间目录之一已经存在,则不会报错,而是继续创建其余目录。
我们去年跑的项目就是用这个命令快速创建了3 000级左右的目录结构。

一开始我以为创建多级目录会有问题,后来发现其实很简单,尤其是加上-p参数。
等等,还有一件事,在使用 mkdir 命令时,记得检查你的权限,否则可能会因为权限不足而创建失败。

总之,虽然mkdir命令创建目录很简单,但是使用-p参数创建多级目录却是一个很多人不注意的小技巧。
我认为值得一试。

linux命令mkdir什么意思

说实话,一开始我在使用 mkdir 命令时总是混淆 -p 和 -m。
我记得有一次,当我在服务器上构建项目目录时,我必须手动为每一层创建子目录。
结果手指一划,按-m,直接给目录7 7 7 权限。
我吓得赶紧用chmod改回来了。
那时还没有 SELinux。
否则,规范将会变得更加混乱。

有趣的是,虽然-v选项看起来多余,但实际上使用时非常有用。
例如,如果您在脚本中运行命令并且创建失败,则仅通过查看标准输出将无法知道哪个目录有问题。
我有一个朋友特意在所有 mkdirs 中添加了 -v ,说这样可以使调试更容易。
不过后来他改成了rsync的-v模式,并表示更加清晰。

回到-p,这个选项对于懒人来说绝对是个好消息。
我在编写自动化脚本(例如 mkdir -p tmp/logs/$(date +%Y-%m-%d))时经常使用它。
这将自动创建一个包含今天日期的日志目录,无论以前的 tmp/logs 是否已存在。
但有一个问题。
如果目录存在但里面有文件,-p仍然会报错,所以可能需要先用rm -rf来清除。
当时,我对此很着迷。

当涉及到权限时,请小心使用-m。
Linux 默认是 7 5 5 ,但是你的项目可能有特殊要求,比如使用 mkdir -m 7 00 mybin 创建一个只能由所有者执行的目录。
我有一个从 Windows 转移的项目。
Windows 用户没有权限的概念。
结果Linux运维人员看到这7 00个权限,立马爆料这是“危险权限”。
然后换到7 5 0,风波终于平静了。

我没有亲自运行过SELinux,但是文档说使用-Z实际上可以解决权限分离问题。
例如,如果某个目录在同一用户下设置为只读,则普通用户尝试写入该目录将会失败。
这特别适合审计系统。
然而,配置 SELinux 很复杂。
我通常只建议运维专业人员解决这个问题。
普通开发人员更有可能遇到 SELinux 错误并且不了解上下文设置。

我现在完全忘记了使用mkdir,但有时我忘记添加-p。
比如最近在本地开发的时候,想快速创建一个临时目录放到那里,于是直接运行mkdir temp,却发现里面有临时文件,创建失败。
我当时真的很惊讶。
说实话,这确实是一个令人发指的策略。
很明显是 mkdir但为什么我需要像cp一样检查目标区域呢?可能是我的习惯太依赖服务器端了。