Linux mattrib命令 详解

mattrib命令 是mtools工具集的一部分,用于在Linux系统中操作MS-DOS文件系统的文件属性。

命令简介

mattrib(MS-DOS attribute的缩写)命令主要用于:

  • 查看和修改MS-DOS文件系统中的文件属性
  • 操作FAT12、FAT16、FAT32文件系统
  • 管理DOS文件属性(只读、隐藏、系统、存档)
  • 在Linux环境中处理DOS磁盘和镜像文件

安装mtools

mattrib是mtools工具集的一部分,需要先安装mtools:

# Ubuntu/Debian
sudo apt-get install mtools

# CentOS/RHEL
sudo yum install mtools

# macOS
brew install mtools

MS-DOS文件属性

属性 字母 说明
只读 (Read-only) r 文件只能读取,不能修改或删除
隐藏 (Hidden) h 文件在普通目录列表中不可见
系统 (System) s 标记为系统文件
存档 (Archive) a 标记文件已被修改,需要备份

命令语法

mattrib [选项] [+-属性] 文件...

常用选项

选项 说明
-a 显示或更改存档属性
-h 显示或更改隐藏属性
-r 显示或更改只读属性
-s 显示或更改系统属性
-p 不显示结果,只设置退出状态
-X 以紧凑格式显示属性
-/ 递归处理目录
-v 显示版本信息
-D 调试模式

mtools驱动器配置

mtools使用配置文件定义DOS驱动器到Linux设备的映射:

# 查看或编辑mtools配置文件
cat ~/.mtoolsrc
# 或
cat /etc/mtools.conf

# 典型配置示例
drive a: file="/dev/fd0"
drive c: file="/dev/sda1"
drive d: file="/path/to/dos.img"

使用示例

1. 查看文件属性

查看DOS文件系统中的文件属性:

mattrib a:autoexec.bat
A        SHR     AUTOEXEC.BAT

输出说明:

  • A - 存档属性
  • SHR - 系统、隐藏、只读属性

2. 添加文件属性

为文件添加只读属性:

mattrib +r c:config.sys

3. 移除文件属性

移除文件的隐藏属性:

mattrib -h d:secret.txt

4. 同时操作多个属性

添加多个属性:

mattrib +r +h +s important.exe

移除多个属性:

mattrib -r -h -s normal.txt

5. 查看目录中所有文件属性

显示目录中所有文件的属性:

mattrib a:*.*

6. 递归处理目录

递归设置目录及其子目录中所有文件的属性:

mattrib -/ +a c:\data\*.*

7. 使用紧凑格式

以紧凑格式显示属性:

mattrib -X a:*.*
A--- SHR AUTOEXEC.BAT
---- R-- COMMAND.COM
A--- --- DATA.TXT

8. 操作磁盘镜像文件

操作DOS磁盘镜像文件:

# 首先在mtools.conf中配置镜像文件
# drive e: file="/path/to/dos_disk.img"

# 然后操作镜像文件
mattrib e:*.exe

实际应用场景

1. 处理旧版DOS软件

为遗留的DOS应用程序设置正确的文件属性:

# 设置系统文件属性
mattrib +r +h +s c:\dos\*.sys
mattrib +r +h +s c:\dos\*.exe

2. 准备备份文件

标记需要备份的文件:

# 设置存档属性(表示文件已修改需要备份)
mattrib +a c:\work\*.*

3. 保护重要文件

防止重要文件被意外修改:

# 设置只读属性
mattrib +r c:\important\*.dat

4. 虚拟机磁盘管理

管理虚拟机中的DOS磁盘:

# 配置虚拟机磁盘镜像
echo 'drive v: file="/vm/dos_c.vmdk"' >> ~/.mtoolsrc

# 查看虚拟机磁盘文件属性
mattrib v:*.*

mtools工具集其他命令

命令 功能
mcopy 在Unix和DOS系统间复制文件
mdir 显示DOS目录内容
mtype 显示DOS文件内容
mdel 删除DOS文件
mformat 格式化DOS磁盘
mlabel 管理DOS磁盘卷标
mmd 创建DOS目录
mrd 删除DOS目录
mren 重命名DOS文件

高级用法

1. 批量属性管理脚本

创建脚本批量管理文件属性:

#!/bin/bash
# dos_attr_manager.sh - DOS文件属性管理脚本

DRIVE=$1
ACTION=$2
ATTRIB=$3

case $ACTION in
    "set")
        mattrib +$ATTRIB $DRIVE\*.*
        echo "已设置属性: $ATTRIB"
        ;;
    "unset")
        mattrib -$ATTRIB $DRIVE\*.*
        echo "已移除属性: $ATTRIB"
        ;;
    "show")
        mattrib $DRIVE\*.*
        ;;
    *)
        echo "用法: $0 驱动器 动作 属性"
        echo "动作: set|unset|show"
        echo "属性: r|h|s|a"
        ;;
esac

2. 与Linux命令结合

结合Linux命令处理DOS文件:

# 查找DOS磁盘中所有可执行文件并设置属性
mdir c:\ | grep -i "\.exe" | awk '{print $NF}' | while read file; do
    mattrib +r "c:\\$file"
done

3. 自动化备份标记

自动标记新文件用于备份:

#!/bin/bash
# 标记新文件用于备份

# 清除所有存档属性(表示已备份)
mattrib -a c:\data\*.*

# 为新文件设置存档属性(表示需要备份)
mattrib +a c:\data\*.*

常见问题与解决方案

问题 解决方案
"Cannot initialize 'A:'" 错误 检查mtools配置文件中驱动器的定义
"File not found" 错误 确认文件路径和名称正确,DOS使用8.3文件名格式
属性修改不生效 检查磁盘是否写保护,或使用管理员权限
无法访问物理设备 确保有访问设备文件的权限(如/dev/fd0)
文件名大小写问题 DOS文件名不区分大小写,但显示为大写

注意事项

  • mattrib只能用于MS-DOS文件系统(FAT12/16/32)
  • 操作物理设备时需要相应的权限
  • DOS文件名遵循8.3格式(主名8字符,扩展名3字符)
  • 修改系统文件属性可能影响DOS系统启动
  • 在修改重要文件属性前建议先备份
  • mtools配置需要正确设置才能访问DOS驱动器

相关命令

  • chmod - Linux文件权限管理
  • chattr - Linux扩展文件属性
  • attr - 文件系统扩展属性
  • mount - 挂载文件系统
  • umount - 卸载文件系统
  • fdisk - 磁盘分区工具