Linux / 命令 / mkdir / 创建目录的命令

在 Linux 中,mkdir 是创建新目录的命令。要一次创建多级路径,请使用 -p,该命令允许在保留现有目录的同时创建任何缺失的父目录。

创建和检查目录

mkdir 是 make directory 的缩写。以下命令会在当前目录下创建一个名为 projects 的目录(如果该目录不存在),并检查结果。为了避免与现有数据混淆,请在空的练习目录中运行它。

pwd
mkdir projects
ls -ld projects

首先,使用 pwd 检查当前工作位置,然后检查 ls -ld 中是否显示了新目录信息。如果成功,mkdir 通常不会显示任何信息。如果已经存在具有相同名称的文件或目录,默认命令会显示错误。

相对路径基于当前位置,绝对路径则以 / 开头,例如 /home/user/projects,是从根目录指定的。请根据您的环境检查实际路径和访问权限。

同时创建父目录

以下命令会在必要的情况下创建所需的父目录。例如,如果在练习位置中不存在 work,它将按顺序创建 work、work/reports 和 work/reports/2024。

mkdir -p work/reports/2024
ls -ld work work/reports work/reports/2024

如果在没有 -p 的情况下运行 mkdir work/reports/2024,当父路径不存在时将会失败。仅仅添加 -p 并不会因为路径已经存在为目录而导致错误。它不会删除现有内容或更改已有目录的权限。

然而,如果路径中间有同名的普通文件,或者你没有父目录的必要权限,即使使用 -p 也可能会失败。请结合错误信息、退出状态和实际路径一起检查以确认成功。

多个目录和包含空格的名称

您可以使用空格分隔的名称来创建多个目录。以下是当当前目录中尚不存在这两个名称时的示例。

mkdir documents images
ls -ld documents images

如果名称本身包含空格,请将整个路径放在引号中,以作为单个名称传递。如果没有引号,shell 会在空格处拆分并将它们作为单独的参数传递。

mkdir "project files"
ls -ld "project files"

以连字符开头的名称可能会被解释为选项。例如,mkdir -- -archive 将名称放在 -- 之后,所以它不会被当作选项处理。

创建时请检查权限和结果

通常,新目录的默认权限受当前 shell 的 umask 和文件系统设置的影响。使用 umask 检查当前掩码,并使用 ls -ld 验证创建目录的实际权限。

你也可以使用 GNU mkdir 的 -m 选项设置新创建目录的权限。下面是一个示例:当 private 尚不存在时,授予所有者读、写和执行权限,并不给组和其他用户任何权限。

mkdir -m 700 private
ls -ld private

即使 -p 和 -m 一起使用,-m 也只会应用于命令行指定的新目录,而不会应用于自动创建的父目录。它也不会对已存在的目录应用新的权限。访问控制列表或文件系统策略可能会影响实际访问,因此请在必要的环境中检查结果。有关选项的详细行为,请参阅 GNU mkdir 手册。

创建失败时

  • 已存在: 使用 ls -ld name 检查现有项是文件还是目录。仅当您希望按原样使用现有目录时,-p 才适用。
  • 未找到父路径: 请检查路径的拼写和您当前的位置,然后决定是否可以使用 -p 创建缺失的父目录。
  • 权限被拒绝: 检查您是否具有父目录所需的写入和访问权限,如果需要,请向管理员申请权限。

在确认目录为空之后,您可以使用 rmdir 删除实践中创建的空目录。rmdir 通常不会删除非空目录。