linux mdir命令

命令简介

mdir 命令用于显示 MS-DOS 格式磁盘的目录内容,它是 mtools 工具集的一部分。mtools 是一组用于访问 MS-DOS 文件系统的工具,允许在 Linux 系统中直接操作 FAT 格式的磁盘、软盘、U盘等。

注意: mdir 不是 Linux 核心命令,需要安装 mtools 软件包才能使用。

语法

mdir [选项] [MS-DOS目录]

常用形式:

# 显示MS-DOS磁盘目录
mdir a:

# 显示特定目录
mdir a:/path/to/dir

# 显示Linux设备上的DOS分区
mdir /dev/fd0

常用选项

选项 说明
-/ 递归显示子目录
-f 快速模式,不计算空闲空间
-w 宽格式输出,只显示文件名
-a 显示所有文件,包括隐藏文件
-b 简明格式,每行一个文件
-Q 用引号括起文件名
-X 只显示文件名(不含路径)
-i 设备 指定磁盘映像文件
-D 同时显示磁盘卷标
-o 旧格式输出(兼容旧版本)

安装方法

1. 安装mtools包
# Ubuntu/Debian
sudo apt update
sudo apt install mtools

# CentOS/RHEL
sudo yum install mtools

# Fedora
sudo dnf install mtools

# Arch Linux
sudo pacman -S mtools

# openSUSE
sudo zypper install mtools

# macOS (Homebrew)
brew install mtools
2. 验证安装
# 检查mdir是否可用
which mdir

# 查看版本信息
mdir --version

# 显示帮助
mdir --help

MS-DOS设备名称

设备名 说明 对应的Linux设备
a: 第一个软盘驱动器 /dev/fd0
b: 第二个软盘驱动器 /dev/fd1
c: 第一个硬盘分区 /dev/hda1/dev/sda1
d: 第二个硬盘分区 /dev/hda2/dev/sda2
z: 自动检测的设备 自动映射

基本用法

1. 查看MS-DOS磁盘内容
# 查看软盘内容(假设软驱为a:)
mdir a:

# 查看U盘内容(通常映射为c:或d:)
mdir c:

# 输出示例:
#  Volume in drive C has no label
#  Volume Serial Number is 2E2F-1901
#  Directory for C:/
#
# LIB       <DIR>     2019-01-15  10:20
# SYSTEM    <DIR>     2019-01-15  10:20
# AUTOEXEC BAT       345 2019-01-15  10:25
# COMMAND  COM     25276 2019-01-15  10:20
# CONFIG   SYS       987 2019-01-15  10:25
#         5 files            265 KB allocated
#                        1 234 KB free
2. 查看特定目录
# 查看DOS磁盘的WINDOWS目录
mdir c:/windows

# 查看子目录
mdir a:/data/documents

# 使用Linux设备路径
mdir /dev/sdb1
3. 递归显示目录
# 递归显示所有子目录
mdir -/ a:/

# 递归显示特定目录
mdir -/ c:/programs

# 输出示例:
# Directory for A:/DATA
# .                   <DIR>     2019-01-15  10:20
# ..                  <DIR>     2019-01-15  10:20
# DOC1     TXT       1234 2019-01-15  10:25
#
# Directory for A:/DATA/ARCHIVE
# .                   <DIR>     2019-01-15  10:20
# ..                  <DIR>     2019-01-15  10:20
# OLD      DOC       5678 2019-01-15  10:25
4. 不同输出格式
# 宽格式输出(只显示文件名)
mdir -w a:

# 简明格式(每行一个文件)
mdir -b a:

# 显示所有文件(包括隐藏文件)
mdir -a a:

# 用引号括起文件名
mdir -Q a:

实际应用场景

场景1:访问旧式软盘
# 挂载并查看3.5英寸软盘
sudo mount /dev/fd0 /mnt/floppy
mdir a:

# 或者直接使用设备文件
mdir /dev/fd0

# 查看软盘中的特定文件类型
mdir -w a: | grep ".DOC"

# 递归查看软盘所有内容
mdir -/ a:/
场景2:处理DOS磁盘映像
# 查看DOS磁盘映像文件内容
mdir -i dosdisk.img

# 查看映像文件中的特定目录
mdir -i disk.img c:/windows/system

# 结合其他工具处理映像
mcopy -i disk.img c:/autoexec.bat ./backup/

# 创建磁盘映像列表
mdir -/ -i old_disk.img > disk_contents.txt
场景3:U盘文件管理
# 查看FAT格式U盘的内容
# 首先找到U盘设备
lsblk

# 使用mdir查看(假设U盘是/dev/sdb1)
mdir /dev/sdb1

# 或者配置mtools使用U盘
# 编辑 /etc/mtools.conf 添加:
# drive e: file="/dev/sdb1"
# 然后使用:
mdir e:

# 快速查看U盘文件列表
mdir -w /dev/sdb1
场景4:数据恢复和取证
# 查看损坏磁盘的内容
mdir -f /dev/sdc1  # 快速模式,跳过错误检查

# 生成磁盘内容清单
mdir -/ -a /dev/sdb1 > disk_inventory.txt

# 检查隐藏文件
mdir -a a: | grep -v "<DIR>"

# 比较两个磁盘的内容
mdir -b a: > disk1.txt
mdir -b b: > disk2.txt
diff disk1.txt disk2.txt

mtools配置

为了正确使用 mdir 和其他 mtools 命令,可能需要配置 /etc/mtools.conf~/.mtoolsrc 文件:

配置文件示例
# /etc/mtools.conf 示例配置

# 软盘驱动器
drive a: file="/dev/fd0" exclusive
drive b: file="/dev/fd1" exclusive

# U盘和移动设备
drive c: file="/dev/sda1"
drive d: file="/dev/sdb1"
drive e: file="/dev/sdc1"

# 默认配置
mtools_skip_check=1
mtools_fat_compatibility=1

# 字符集设置(用于中文文件名)
code_page=936
linestyle=windows
常用配置选项
# 驱动器和设备映射
drive x: file="/dev/device_path"

# 跳过检查(提高速度)
mtools_skip_check=1

# FAT兼容性
mtools_fat_compatibility=1

# 代码页(字符集)
code_page=936    # 简体中文
code_page=950    # 繁体中文
code_page=437    # 美国英语

# 行尾格式
linestyle=unix   # Unix格式
linestyle=dos    # DOS格式
linestyle=windows # Windows格式

高级用法

1. 脚本自动化
#!/bin/bash
# 自动备份DOS磁盘内容

DISK_DEVICE="/dev/fd0"
BACKUP_DIR="/backup/dos_disks"
DATE=$(date +%Y%m%d)

echo "开始备份DOS磁盘: $DISK_DEVICE"

# 创建备份目录
mkdir -p "$BACKUP_DIR/$DATE"

# 生成文件列表
echo "生成文件列表..."
mdir -/ -a "$DISK_DEVICE" > "$BACKUP_DIR/$DATE/filelist.txt"

# 复制所有文件
echo "复制文件..."
mcopy -s "$DISK_DEVICE"/* "$BACKUP_DIR/$DATE/"

echo "备份完成: $BACKUP_DIR/$DATE"
2. 磁盘映像分析
#!/bin/bash
# 分析DOS磁盘映像

IMAGE_FILE=$1

if [ -z "$IMAGE_FILE" ]; then
    echo "用法: $0 磁盘映像文件"
    exit 1
fi

echo "分析磁盘映像: $IMAGE_FILE"
echo "================================"

# 显示磁盘信息
echo "1. 磁盘内容:"
mdir -i "$IMAGE_FILE"

echo ""
echo "2. 文件统计:"
mdir -b -i "$IMAGE_FILE" | grep -v "<DIR>" | wc -l

echo ""
echo "3. 目录结构:"
mdir -/ -i "$IMAGE_FILE" | grep "Directory for"

echo ""
echo "4. 文件类型分布:"
mdir -b -i "$IMAGE_FILE" | grep -v "<DIR>" | \
    awk -F. '{print $NF}' | sort | uniq -c | sort -nr
3. 与其他命令结合
# 查找特定类型的文件
mdir -b a: | grep "\.EXE"

# 统计文件数量
mdir -b a: | grep -v "<DIR>" | wc -l

# 按日期排序文件
mdir -b a: | grep -v "<DIR>" | sort -k3

# 生成文件清单HTML报告
mdir -/ -a a: | \
    awk 'BEGIN {print "<html><body><h1>Disk Contents</h1><pre>"}
         {print}
         END {print "</pre></body></html>"}' > disk_report.html

注意事项

  • mdir 需要 mtools 软件包支持
  • 在使用前确保正确配置了 /etc/mtools.conf
  • 对于现代U盘,通常使用标准的Linux挂载方式更简单
  • mdir 主要用于访问FAT12/FAT16/FAT32文件系统
  • 某些选项可能因mtools版本不同而有所差异
  • 使用设备文件时需要相应的读写权限
  • 在处理重要数据前,建议先备份