Linux mmd 命令 - MS-DOS目录创建

mmd 命令是mtools工具集的一部分,用于在MS-DOS文件系统中创建新目录。它与Linux系统中的mkdir命令功能相似,但是专门用于操作MS-DOS格式的存储设备(如软盘、U盘等),并且不需要挂载设备即可直接操作。

提示:mmd命令是mtools工具集的一部分,不是所有Linux系统默认安装。在某些系统中,可能需要手动安装mtools包。
mmd 与 Linux mkdir 的区别
  • 文件系统: mmd专门用于MS-DOS文件系统(FAT12/FAT16/FAT32),mkdir用于Linux文件系统
  • 访问方式: mmd直接操作设备文件,无需挂载;mkdir需要访问已挂载的文件系统
  • 路径格式: mmd使用MS-DOS路径格式(如a:\directory),mkdir使用Linux路径格式
  • 权限选项: mmd不支持设置目录权限,mkdir支持-m选项设置权限
  • 递归创建: mmd不支持递归创建多级目录(需要逐级创建),mkdir支持-p选项递归创建

语法格式

mmd [选项] MS-DOS目录路径 [MS-DOS目录路径2 ...]

可以同时创建多个目录,目录路径使用MS-DOS格式。如果不指定驱动器,将使用默认驱动器。

常用选项

选项 说明
-v--verbose 详细模式,显示创建的目录信息
--help 显示帮助信息
--version 显示版本信息

安装mtools工具集

# 在Debian/Ubuntu系统中安装
sudo apt-get install mtools

# 在CentOS/RHEL系统中安装
sudo yum install mtools

# 在Fedora系统中安装
sudo dnf install mtools

# 在Arch Linux中安装
sudo pacman -S mtools

# 验证安装
mmd --version

基本示例

示例1:创建单个目录

# 在A:驱动器根目录创建名为"documents"的目录
mmd a:\documents

# 在C:驱动器创建目录
mmd c:\windows\temp

# 创建多个目录
mmd a:\dir1 a:\dir2 a:\dir3

示例2:使用当前驱动器创建目录

# 首先设置当前MS-DOS工作目录
mcd a:\

# 在当前驱动器创建目录(相对路径)
mmd backup

# 这会在A:驱动器根目录创建backup目录

如果不指定驱动器,mmd会使用当前MS-DOS工作目录(由mcd命令设置)。

示例3:使用详细模式

# 显示创建的目录信息
mmd -v a:\temp

# 输出: Creating directory a:\temp

# 详细模式下创建多个目录
mmd -v a:\dir1 a:\dir2 a:\dir3

示例4:创建带空格和特殊字符的目录

# 创建带空格的目录名(使用引号)
mmd "a:\my documents"

# 创建带下划线的目录
mmd a:\my_project

# 创建带连字符的目录
mmd a:\my-project

# 创建以点开头的目录(MS-DOS通常不支持,但可以尝试)
mmd a:\.config

# 注意:MS-DOS有文件名限制,某些特殊字符可能不允许使用

创建多级目录的方法

重要限制

与Linux的mkdir -p不同,mmd不支持递归创建多级目录。如果父目录不存在,mmd会报错。必须逐级创建目录。

示例5:逐级创建多级目录

# 错误的方式:直接创建多级目录会失败
mmd a:\level1\level2\level3
# 错误信息:Cannot initialize 'A:' (没有那个文件或目录) 或类似

# 正确的方式:逐级创建
mmd a:\level1
mmd a:\level1\level2
mmd a:\level1\level2\level3

# 或者使用脚本批量创建
for dir in level1 level1/level2 level1/level2/level3; do
    mmd "a:\\$dir"
done

示例6:批量创建项目目录结构

#!/bin/bash
# create_project_structure.sh - 在MS-DOS磁盘上创建项目目录结构

DRIVE="a:"
BASE_DIR="$DRIVE\project"

# 创建基础目录
mmd "$BASE_DIR"

# 创建子目录
mmd "$BASE_DIR\src"
mmd "$BASE_DIR\src\main"
mmd "$BASE_DIR\src\test"
mmd "$BASE_DIR\docs"
mmd "$BASE_DIR\lib"
mmd "$BASE_DIR\data"
mmd "$BASE_DIR\backup"

echo "项目目录结构创建完成"
echo "使用 mdir $BASE_DIR 查看目录内容"

实际应用场景

场景1:为软盘备份创建目录结构
# 准备软盘进行数据备份
mmd a:\backup
mmd a:\backup\documents
mmd a:\backup\photos
mmd a:\backup\music
mmd a:\backup\system

# 查看创建的目录
mdir a:\
场景2:创建DOS可启动磁盘的目录
# 创建DOS启动盘的标准目录结构
mmd a:\DOS
mmd a:\WINDOWS
mmd a:\WINDOWS\SYSTEM
mmd a:\TEMP
mmd a:\PROGRAMS
mmd a:\GAMES

# 创建配置文件目录
mmd a:\CONFIG
场景3:自动化创建多个磁盘的目录
#!/bin/bash
# create_dirs_on_multiple_disks.sh - 在多个磁盘上创建相同目录结构

# 驱动器列表
DRIVES="a: b: c:"

# 要创建的目录列表
DIRS="data temp backup logs"

for drive in $DRIVES; do
    echo "在驱动器 $drive 上创建目录..."

    # 检查驱动器是否可用
    if mcd "$drive" 2>/dev/null; then
        for dir in $DIRS; do
            mmd "$drive\\$dir"
        done
        echo "驱动器 $drive 目录创建完成"
    else
        echo "驱动器 $drive 不可用,跳过"
    fi
done

与mcd命令的配合使用

# 1. 先切换到目标驱动器
mcd a:\

# 2. 使用相对路径创建目录
mmd newdir

# 3. 创建子目录
mmd newdir\subdir

# 4. 查看当前工作目录
mcd
# 输出: A:\

# 5. 查看创建的目录
mdir a:\newdir

mcd命令设置当前MS-DOS工作目录,这样mmd就可以使用相对路径创建目录。

错误处理与常见问题

示例7:处理目录已存在的错误

# 如果目录已存在,mmd会报错
mmd a:\existing_dir
# 错误信息:File exists

# 在脚本中处理这种情况
DIR_NAME="a:\temp"
if ! mmd "$DIR_NAME" 2>/dev/null; then
    echo "目录已存在: $DIR_NAME"
    # 可以选择跳过或删除后重新创建
fi

示例8:检查目录是否创建成功

#!/bin/bash
# check_directory_creation.sh - 检查目录是否创建成功

DIR_PATH="a:\test_dir"

echo "正在创建目录: $DIR_PATH"
mmd -v "$DIR_PATH"

# 检查mmd命令的退出状态
if [ $? -eq 0 ]; then
    echo "目录创建成功"

    # 验证目录是否存在
    if mdir "$DIR_PATH" 2>/dev/null; then
        echo "目录验证成功"
    else
        echo "警告:目录创建成功但无法访问"
    fi
else
    echo "目录创建失败"
    exit 1
fi

现代替代方案

使用挂载方法和Linux mkdir命令

在现代Linux系统中,更常见的做法是挂载MS-DOS文件系统后使用标准的mkdir命令:

# 挂载软盘或U盘
sudo mount -t vfat /dev/sdb1 /mnt/dos

# 使用mkdir命令创建目录
mkdir /mnt/dos/newdir
mkdir -p /mnt/dos/path/to/multilevel/dir  # 支持递归创建

# 卸载
sudo umount /mnt/dos

优点:可以使用mkdir命令的所有丰富选项,包括递归创建、设置权限等。

注意事项

  • 递归创建限制: mmd不支持递归创建多级目录,必须逐级创建
  • 权限设置: mmd不能设置目录权限,目录权限由文件系统默认设置
  • 文件名限制: MS-DOS有8.3文件名限制(或VFAT的255字符),目录名需遵守这些限制
  • 特殊字符: 避免使用MS-DOS不允许的特殊字符
  • 驱动器访问: 需要确保驱动器已准备好(软盘已插入等)
  • 权限要求: 需要写入权限才能创建目录
  • 与mcd配合: 使用相对路径前,需要用mcd设置当前工作目录
  • 路径格式: 必须使用MS-DOS路径格式,注意反斜杠转义

相关命令

  • mkdir: Linux系统目录创建命令
  • mcd: 切换MS-DOS工作目录
  • mdir: 列出MS-DOS目录内容
  • mrd: 删除MS-DOS目录
  • mcopy: 在Linux和MS-DOS系统间复制文件
  • mmove: 移动或重命名MS-DOS文件
  • mformat: 格式化MS-DOS磁盘
  • rmdir: Linux系统删除空目录命令

常见问题与故障排除

# 1. 命令未找到错误
# 检查是否安装了mtools
which mtools
# 如果未安装,请安装mtools
sudo apt install mtools

# 2. "无法初始化驱动器"错误
# 检查设备是否存在且可访问
ls -l /dev/fd0
# 确保软盘已插入或设备已连接

# 3. "权限被拒绝"错误
# 使用sudo或以正确用户身份运行
sudo mmd a:\newdir

# 4. "文件已存在"错误
# 检查目录是否已存在
mdir a:\ | grep newdir
# 如果存在,选择其他名称或先删除

# 5. "没有那个文件或目录"错误(创建多级目录时)
# mmd不支持递归创建,必须逐级创建
mmd a:\parent
mmd a:\parent\child

# 6. 驱动器未配置错误
# 检查mtools配置文件
cat ~/.mtoolsrc
# 确保驱动器已正确配置

# 7. 磁盘空间不足
# 检查磁盘空间(使用其他工具,如mdu)
# 清理空间后重试

MS-DOS目录命名规则

文件系统 目录名长度 允许字符 禁止字符
FAT12/FAT16 8个字符(主名)+ 3个字符(扩展名) A-Z, 0-9, 少数特殊字符(如_、-、$、~等) * ? . , ; : / \ | + = < > [ ] ( ) 空格
VFAT/FAT32 最多255个字符(包括路径) 大多数字符(支持长文件名) / \ : * ? " < > |
历史背景与适用场景

mmd命令是mtools工具集的一部分,最初是为了在Unix系统上访问MS-DOS软盘而开发的。在早期,直接挂载DOS文件系统可能会遇到兼容性问题,mtools提供了无需挂载的直接访问方式。

现代适用场景:

  • 操作旧的DOS软盘或磁盘镜像
  • 批量脚本处理多个MS-DOS格式存储设备
  • 嵌入式系统或资源受限环境
  • 无需root权限访问可移动媒体
  • 恢复或分析旧的MS-DOS存储介质