☰
ZeroTermux 内置命令手册精讲:mkdir 命令的语法、选项与实战应用
2026/10/15 18:23:54 网站建设 项目流程
  • 移动开发
  • 开发工具

【免费下载链接】ZeroTermux

项目地址:https://gitcode.com/GitHub_Trending/ze/ZeroTermux
点击查看免费下载

导读

mkdir(make directory)是 Linux 中最常用的目录创建命令,也是 ZeroTermux 内置 Linux 命令手册(app/src/main/assets/cmd/mkdir.md)收录的核心命令之一。本文以该手册为主体,系统讲解 mkdir 的语法、选项、参数与典型实例,并结合 ZeroTermux 源码中的 FTP 服务器与 Workstation 文件管理模块,揭示"创建目录"这一操作在移动端终端环境中的底层实现。读完本文,你将掌握 mkdir 的完整用法,并能理解它在 ZeroTermux 各类文件操作场景中的实际落地方式。

一、mkdir 命令概述

mkdir命令用来创建目录。该命令创建由 dirname 命名的目录。如果在目录名的前面没有加任何路径名,则在当前目录下创建由 dirname 指定的目录;如果给出了一个已经存在的路径,将会在该目录下创建一个指定的目录。在创建目录时,应保证新建的目录与它所在目录下的文件没有重名。

在 ZeroTermux 中,该手册文件位于 app/src/main/assets/cmd/mkdir.md,与ls、cd、cp、rm等数百份命令手册一同随应用打包,供用户在移动端终端环境随时查询命令用法,是 ZeroTermux 内置 Linux 命令行知识库(app/src/main/assets/cmd/目录,共收录数百个命令)的组成部分。

目录组织与命名建议

  • 不要把所有文件都存放在主目录中:可以创建子目录,通过它们来更有效地组织文件。最好采用前后一致的命名方式来区分文件和目录。例如,目录名可以以大写字母开头,这样在目录列表中目录名就出现在前面。
  • 按用途分类存放:在一个子目录中应包含类型相似或用途相近的文件。例如,应建立一个子目录包含所有的数据库文件,另有一个子目录包含电子表格文件,还有一个子目录包含文字处理文档,等等。
  • 目录也是文件:目录与普通文件一样遵循相同的命名规则,并且利用全路径可以唯一地指定一个目录。

二、语法

mkdir (选项)(参数)

(选项)控制创建行为与属性,(参数)为要创建的目录列表。多个目录之间用空格隔开,可一次创建多个目录。

三、选项详解

选项长选项作用
-Z—设置安全上下文,当使用 SELinux 时有效
-m<目标属性>--mode<目标属性>建立目录的同时设置目录的权限
-p--parents若所要建立目录的上层目录目前尚未建立,则会一并建立上层目录
—--version显示版本信息

3.1-p/--parents:递归创建父目录

这是日常使用频率最高的选项。当要创建的目录的父目录尚不存在时,-p会连同父目录一并创建;同时,若目标目录已经存在,-p也不会报错(非-p模式下创建已存在目录会提示File exists)。

mkdir -p /usr/meng/test/deep

当/usr/meng不存在时,该命令会依次创建/usr/meng、/usr/meng/test、/usr/meng/test/deep三级目录。

3.2-m/--mode:创建时直接指定权限

权限值通常以八进制数字表示(如700、750、755),也可以使用符号模式(如u=rwx,g=rx)。注意:-m指定的权限是"最终权限",不受当前进程umask的影响;而不加-m时,新目录权限 =777减去umask的屏蔽位(常见umask 022下默认得到755)。

mkdir -m 700 /usr/meng/test

在目录/usr/meng下建立子目录test,并且只有文件主有读、写和执行权限,其他人无权访问(即rwx------)。

3.3-Z:设置 SELinux 安全上下文

仅在系统启用 SELinux 时有效,用于为新目录指定安全上下文标签。在 Android / ZeroTermux 环境中,终端运行在非 SELinux 强制策略下时该选项通常不适用。

3.4 其他常见选项(补充)

在较新的 coreutils 版本中,mkdir 还支持以下常用选项,可在 ZeroTermux 终端中通过mkdir --help验证:

  • -v/--verbose:创建每个目录后输出其名称(打印创建的目录路径);
  • -d/--directory:以目录方式处理所有参数(与install -d语义类似);
  • --help:显示帮助信息并退出。

四、参数

目录:指定要创建的目录列表,多个目录之间用空格隔开。

mkdir dir1 dir2 dir3

该命令在当前目录下一次性创建dir1、dir2、dir3三个目录。注意:当一次创建多个目录时,-m、-p等选项同样作用于全部目录。

五、实战实例

实例一:创建仅文件主可读写执行的私有目录

在目录/usr/meng下建立子目录test,并且只有文件主有读、写和执行权限,其他人无权访问:

mkdir -m 700 /usr/meng/test

创建完成后可用ls -ld /usr/meng/test验证,输出权限位应为drwx------。

实例二:递归创建多级目录并设置权限

在当前目录中建立bin和bin下的os_1目录,权限设置为文件主可读、写、执行,同组用户可读和执行,其他用户无权访问:

mkdir -p -m 750 bin/os_1

说明:原手册中写作mkdir -p-m 750 bin/os_1,该写法容易与-p、-m两个独立选项混淆,实际等价于将-p与-m 750分开书写。规范写法为mkdir -p -m 750 bin/os_1(也可写作mkdir -pm 750 bin/os_1,短选项可合并)。执行后bin与bin/os_1的权限均为drwxr-x---(750)。

实例三:常见组合用法

mkdir -p ~/projects/{docs,src,test} # 递归创建三个并列子目录 mkdir -v tmp # 创建目录并输出过程信息 mkdir -m 755 -p app/src/main # 递归创建并统一设置权限

其中{docs,src,test}是 shell 的花括号展开语法,等价于分别执行三次mkdir -p。

六、ZeroTermux 中的 mkdir 应用:从命令到手写实现

mkdir 的概念不仅体现在命令行手册中,ZeroTermux 的多个功能模块也实现了"创建目录"的底层逻辑,可以相互印证。

6.1 FTP 服务器:MKD 命令的完整处理链路

ZeroTermux 内置 FTP 服务器实现了 FTP 协议中的 MKD(创建目录)命令,对应源码 app/src/main/java/com/termux/zerocore/ftp/server/CmdMKD.java。其处理流程与 mkdir 命令的语义高度一致:

  1. 参数校验:通过getParameter(input)提取目录名,参数为空时返回550 Invalid name;
  2. 路径解析:使用inputPathToChrootedFile()将相对路径拼接到当前工作目录,绝对路径则直接使用;
  3. 越界检查:通过violatesChroot()判断目标是否超出 FTP 根目录(chroot)范围,防止越权创建目录;
  4. 重名检查:若toCreate.exists()已存在,返回550 Already exists——与 mkdir 不加-p时"目录已存在则报错"的行为一致;
  5. 递归创建:调用 FileUtil.mkdirs 完成创建,成功返回250 Directory created,失败返回550 Error making directory (permissions?)。

值得注意的是,Android 应用在外部存储(如/storage/emulated/0)创建目录时受分区存储限制,FileUtil.mkdirs 内部会先尝试File.mkdirs(),失败时再通过MediaStoreHack等媒体库兼容方案写入,这正是 mkdir 在 Android 权限模型下的特殊之处。

6.2 Workstation 网页文件管理器:mkdir API

ZeroTermux 的 Workstation 模块(app/src/main/assets/workstation/index.html)提供了浏览器端的文件管理界面。前端在"新建文件夹"时通过 app/src/main/assets/workstation/files.js 发送POST /api/files/mkdir请求,携带 JSON 格式的{ "path": "..." }:

await fbApi('/api/files/mkdir', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ path }) });

服务端在 ZtWorkstationHttpServer.kt 中路由到ZtWorkstationFileHelper.mkdir()(见 ZtWorkstationFileHelper.kt):

fun mkdir(path: String): String { val dir = resolveSafePath(path) ?: return errorJson(INVALID_PATH_HINT, path) return if (dir.exists() || dir.mkdirs()) { gson.toJson(mapOf("ok" to true, "path" to dir.absolutePath)) } else { errorJson("mkdir failed", dir.absolutePath) } }

这段实现与 mkdir 命令的-p语义完全对应:先通过resolveSafePath做路径合法性校验(防止越权访问),再调用 Java 的File.mkdirs()递归创建缺失的父目录;若目录已存在(dir.exists())也视为成功,不返回错误——这正是mkdir -p的"存在即成功"行为。

七、小结与最佳实践

  1. 日常建目录优先-p:多级目录一次建好,且目标已存在时不报错,脚本更健壮;
  2. 敏感目录记得-m:存放私密数据的目录建议mkdir -m 700,避免受默认umask影响而过度开放权限;
  3. 善用空格分隔批量创建:mkdir dir1 dir2 dir3一次创建多个,配合 shell 花括号展开效率更高;
  4. 在 ZeroTermux 中查询手册:任何时刻可在 ZeroTermux 终端内查看app/src/main/assets/cmd/mkdir.md对应的命令帮助,或在 Workstation 文件管理器中通过"新建文件夹"体验 mkdir 的图形化落地。

通过本文,你既掌握了 mkdir 命令本身的语法、选项与实例,也了解了它在 ZeroTermux FTP 服务器(MKD 命令)与 Workstation 文件管理器(/api/files/mkdir接口)中的底层实现——两者殊途同归,核心都是"递归创建 + 存在性检查 + 权限/越界校验"。

  • 移动开发
  • 开发工具

【免费下载链接】ZeroTermux

项目地址:https://gitcode.com/GitHub_Trending/ze/ZeroTermux
点击查看免费下载

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询