Linux mcd 命令 - MS-DOS文件系统目录切换

mcd 命令是mtools工具集的一部分,用于在MS-DOS文件系统中改变当前工作目录。与Linux系统中的cd命令类似,但是专门用于操作MS-DOS格式的存储设备(如软盘、U盘等)。

注意:mcd命令不是标准Linux核心命令,它是mtools工具包的一部分,通常需要额外安装。
什么是mtools?

mtools是一组用于访问MS-DOS文件系统的工具集,允许在类Unix系统(如Linux)中直接操作MS-DOS格式的存储设备,无需挂载。常用命令包括:

  • mcd:切换MS-DOS文件系统中的目录
  • mdir:列出MS-DOS目录内容(类似ls)
  • mcopy:在Linux和MS-DOS文件系统间复制文件
  • mdel:删除MS-DOS文件
  • mmd:创建MS-DOS目录
  • mformat:格式化MS-DOS磁盘

安装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

# 验证安装
mtools --version

语法格式

mcd [MS-DOS目录路径]

如果不指定目录路径,mcd会显示当前的MS-DOS工作目录。

MS-DOS驱动器表示法

驱动器代号 对应Linux设备 说明
a: /dev/fd0 第一个软盘驱动器(A:)
b: /dev/fd1 第二个软盘驱动器(B:)
c: /dev/hda/dev/sda 第一个硬盘驱动器(C:)
d: /dev/hdb/dev/sdb 第二个硬盘驱动器(D:)
e:z: 对应其他块设备 其他驱动器(可配置)

mtools配置文件

# 配置文件位置
~/.mtoolsrc      # 用户配置文件
/etc/mtools.conf # 系统配置文件

# 配置示例:添加USB驱动器映射
# 编辑 ~/.mtoolsrc
drive e: file="/dev/sdb1"
drive f: file="/dev/sdc1"

# 配置驱动器参数
drive c: file="/dev/hda1" fat_bits=16
drive d: file="/dev/hdb1" nodelay

基本示例

示例1:显示当前MS-DOS工作目录

# 显示当前MS-DOS文件系统中的工作目录
mcd

执行结果会显示类似:A:\C:\WINDOWS

示例2:切换到MS-DOS驱动器根目录

# 切换到A:驱动器根目录
mcd a:

# 切换到C:驱动器根目录
mcd c:

驱动器字母后跟冒号表示切换到该驱动器的根目录。

示例3:切换到指定目录

# 切换到A:驱动器的DOS目录
mcd a:\dos

# 切换到C:驱动器的Windows系统目录
mcd c:\windows\system32

# 使用相对路径(基于当前MS-DOS目录)
mcd temp
mcd ..\backup

示例4:切换驱动器并同时切换目录

# 切换到D:驱动器的documents目录
mcd d:\documents

# 路径中允许使用正斜杠(/)或反斜杠(\)
mcd d:/users/john/documents

与mtools其他命令配合使用

示例5:配合mdir列出目录内容

# 切换到A:驱动器根目录
mcd a:

# 列出当前目录内容
mdir

# 列出指定目录内容
mdir a:\documents

# 列出C:驱动器Windows目录内容
mdir c:\windows

示例6:配合mcopy复制文件

# 切换到目标目录
mcd a:\backup

# 从Linux系统复制文件到MS-DOS设备
mcopy /home/user/document.txt a:

# 从MS-DOS设备复制文件到Linux系统
mcopy a:\data\file.txt /tmp/

# 使用通配符复制多个文件
mcopy a:\*.txt /home/user/documents/

示例7:配合mmd创建目录

# 确保在正确的驱动器
mcd c:

# 在C:驱动器创建新目录
mmd newfolder

# 创建多级目录
mmd c:\projects\2024\january

实际应用场景

场景1:操作软盘
# 检查软盘驱动器
ls /dev/fd*

# 切换到软盘驱动器并操作
mcd a:
mdir                    # 查看软盘内容
mcopy report.txt a:     # 复制文件到软盘
mcd a:\data            # 切换到软盘上的data目录
场景2:从DOS格式的U盘读取数据
# 首先配置U盘驱动器(假设U盘是/dev/sdb1)
# 编辑~/.mtoolsrc添加:
# drive u: file="/dev/sdb1"

# 使用U盘驱动器
mcd u:
mdir
mcopy u:\important.doc ~/backup/

# 切换到U盘的特定目录
mcd u:\photos\vacation
场景3:批量处理DOS磁盘文件
#!/bin/bash
# 批量复制软盘内容到Linux系统

for drive in a: b:; do
    echo "处理驱动器 $drive"

    # 切换到驱动器
    mcd $drive

    # 列出所有.txt文件并复制
    for file in $(mdir | grep "\.txt$" | awk '{print $NF}'); do
        echo "复制文件: $file"
        mcopy "$drive\\$file" "/backup/dos_files/"
    done

    echo "驱动器 $drive 处理完成"
    echo "------------------------"
done

MS-DOS路径规则

MS-DOS路径语法
  • 驱动器符:必须后跟冒号,如 a:, c:
  • 根目录:使用反斜杠 \ 表示,如 c:\
  • 目录分隔符:可以是反斜杠 \ 或正斜杠 /
  • 特殊目录
    • . - 当前目录
    • .. - 父目录
  • 不区分大小写:DOS路径通常不区分大小写
  • 8.3文件名规则:传统DOS使用8个字符主名+3个字符扩展名

注意事项

  • 区分大小写:mtools命令本身区分大小写,但DOS路径不区分
  • 配置文件:使用前可能需要正确配置~/.mtoolsrc文件
  • 设备访问权限:需要适当的权限访问设备文件(如/dev/fd0
  • 文件系统格式:目标设备必须是MS-DOS(FAT12/FAT16/FAT32)格式
  • 字符编码:DOS使用ASCII编码,处理非ASCII字符可能需要额外注意
  • 软盘驱动器:现代系统可能没有软驱,需要额外硬件支持
  • 与Linux cd的区别:mcd只影响mtools命令的当前目录,不影响Linux shell的当前目录

相关命令

  • cd:Linux系统目录切换命令
  • mdir:列出MS-DOS目录内容(类似ls)
  • mcopy:在Linux和MS-DOS系统间复制文件
  • mdel:删除MS-DOS文件
  • mmd:创建MS-DOS目录
  • mrd:删除MS-DOS目录
  • mformat:格式化MS-DOS磁盘
  • mlabel:显示或修改MS-DOS卷标
  • mount:挂载文件系统(替代方法)

现代替代方案

使用mount挂载DOS文件系统

在现代Linux系统中,更常见的做法是直接挂载MS-DOS/FAT文件系统:

# 挂载软盘
sudo mount -t msdos /dev/fd0 /mnt/floppy

# 挂载U盘(FAT32格式)
sudo mount -t vfat /dev/sdb1 /mnt/usb

# 挂载后使用标准Linux命令操作
cd /mnt/usb
ls -la
cp file.txt ~/

挂载方法的优点:可以使用所有标准的Linux命令,无需学习mtools的特殊语法。

历史背景与兼容性

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

虽然现在已不如过去常用,但在以下场景仍然有用:

  • 操作旧的DOS软盘或磁盘镜像
  • 不需要root权限访问可移动媒体
  • 脚本化批量处理DOS格式存储设备
  • 嵌入式系统或资源受限环境