mattrib(MS-DOS attribute的缩写)命令主要用于:
mattrib是mtools工具集的一部分,需要先安装mtools:
# Ubuntu/Debian
sudo apt-get install mtools
# CentOS/RHEL
sudo yum install mtools
# macOS
brew install mtools
| 属性 | 字母 | 说明 |
|---|---|---|
| 只读 (Read-only) | r | 文件只能读取,不能修改或删除 |
| 隐藏 (Hidden) | h | 文件在普通目录列表中不可见 |
| 系统 (System) | s | 标记为系统文件 |
| 存档 (Archive) | a | 标记文件已被修改,需要备份 |
mattrib [选项] [+-属性] 文件...
| 选项 | 说明 |
|---|---|
| -a | 显示或更改存档属性 |
| -h | 显示或更改隐藏属性 |
| -r | 显示或更改只读属性 |
| -s | 显示或更改系统属性 |
| -p | 不显示结果,只设置退出状态 |
| -X | 以紧凑格式显示属性 |
| -/ | 递归处理目录 |
| -v | 显示版本信息 |
| -D | 调试模式 |
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"
查看DOS文件系统中的文件属性:
mattrib a:autoexec.bat
A SHR AUTOEXEC.BAT
输出说明:
A - 存档属性SHR - 系统、隐藏、只读属性为文件添加只读属性:
mattrib +r c:config.sys
移除文件的隐藏属性:
mattrib -h d:secret.txt
添加多个属性:
mattrib +r +h +s important.exe
移除多个属性:
mattrib -r -h -s normal.txt
显示目录中所有文件的属性:
mattrib a:*.*
递归设置目录及其子目录中所有文件的属性:
mattrib -/ +a c:\data\*.*
以紧凑格式显示属性:
mattrib -X a:*.*
A--- SHR AUTOEXEC.BAT
---- R-- COMMAND.COM
A--- --- DATA.TXT
操作DOS磁盘镜像文件:
# 首先在mtools.conf中配置镜像文件
# drive e: file="/path/to/dos_disk.img"
# 然后操作镜像文件
mattrib e:*.exe
为遗留的DOS应用程序设置正确的文件属性:
# 设置系统文件属性
mattrib +r +h +s c:\dos\*.sys
mattrib +r +h +s c:\dos\*.exe
标记需要备份的文件:
# 设置存档属性(表示文件已修改需要备份)
mattrib +a c:\work\*.*
防止重要文件被意外修改:
# 设置只读属性
mattrib +r c:\important\*.dat
管理虚拟机中的DOS磁盘:
# 配置虚拟机磁盘镜像
echo 'drive v: file="/vm/dos_c.vmdk"' >> ~/.mtoolsrc
# 查看虚拟机磁盘文件属性
mattrib v:*.*
| 命令 | 功能 |
|---|---|
mcopy |
在Unix和DOS系统间复制文件 |
mdir |
显示DOS目录内容 |
mtype |
显示DOS文件内容 |
mdel |
删除DOS文件 |
mformat |
格式化DOS磁盘 |
mlabel |
管理DOS磁盘卷标 |
mmd |
创建DOS目录 |
mrd |
删除DOS目录 |
mren |
重命名DOS文件 |
创建脚本批量管理文件属性:
#!/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
结合Linux命令处理DOS文件:
# 查找DOS磁盘中所有可执行文件并设置属性
mdir c:\ | grep -i "\.exe" | awk '{print $NF}' | while read file; do
mattrib +r "c:\\$file"
done
自动标记新文件用于备份:
#!/bin/bash
# 标记新文件用于备份
# 清除所有存档属性(表示已备份)
mattrib -a c:\data\*.*
# 为新文件设置存档属性(表示需要备份)
mattrib +a c:\data\*.*
| 问题 | 解决方案 |
|---|---|
| "Cannot initialize 'A:'" 错误 | 检查mtools配置文件中驱动器的定义 |
| "File not found" 错误 | 确认文件路径和名称正确,DOS使用8.3文件名格式 |
| 属性修改不生效 | 检查磁盘是否写保护,或使用管理员权限 |
| 无法访问物理设备 | 确保有访问设备文件的权限(如/dev/fd0) |
| 文件名大小写问题 | DOS文件名不区分大小写,但显示为大写 |