Mac 上的 mdutil 命令
mdutil 是 macOS 自带的终端命令,用来管理聚焦(Spotlight)的搜索索引:查看磁盘有没有建立索引,关闭或开启索引,或者清除索引,让聚焦重新建立。
在 macOS Sequoia 15.7 上实际运行过
本页所在的 MDUtil 网站是一套免费的 Markdown 工具,和 Apple 没有关系。mdutil 命令是每台 Mac 自带的。
常用命令
- 查看启动磁盘有没有建立索引
mdutil -s / - 查看所有宗卷的状态
mdutil -sa - 清除并重建启动磁盘的索引
sudo mdutil -E / - 关闭某个磁盘的索引
sudo mdutil -i off "/Volumes/My Drive" - 重新开启索引
sudo mdutil -i on "/Volumes/My Drive"
查看磁盘有没有建立索引
-s 显示指定宗卷的索引状态。/ 是启动磁盘,其他磁盘挂载在 /Volumes 下面。查看状态不需要 sudo。
mdutil -s /
/:
Indexing enabled.
加上 -a 会列出聚焦知道的所有宗卷。从 macOS Catalina 开始,列表里还有存放你的文件的 /System/Volumes/Data,以及 /System/Volumes/Preboot。
mdutil -sa
路径必须是宗卷的挂载位置。如果指定的是普通文件夹,例如你的个人文件夹,会得到 Error: unknown indexing state.
重建聚焦索引
如果聚焦或访达的搜索找不到磁盘上明明存在的文件,或者一直显示早已删除的文件,索引可能已经损坏。-E 会清除宗卷的索引,聚焦随即开始建立新的索引:
sudo mdutil -E /
sudo 会要求输入 Mac 的登录密码,输入时屏幕上不显示任何字符。外接磁盘要使用 /Volumes 下面的路径,名称里有空格时加上引号:
sudo mdutil -E "/Volumes/My Drive"
不需要先关闭索引。根据 Apple 的说明,建立索引可能需要数小时甚至数天,具体取决于磁盘上的数据量;Mac 闲置并接通电源时完成得更快。建立索引期间,在“活动监视器”里可以看到 mds、mds_stores 和 mdworker 正在占用处理器。
只在索引确实出错时重建。macOS 更新以后或者大量文件发生变化时,聚焦本来就会持续建立索引一段时间,这时清除索引只会让它从头开始。
关闭或开启索引
-i off 让聚焦停止为宗卷建立索引,适合只存放备份或临时文件的磁盘。关闭以后,搜索无法再查找这个宗卷里文件的内容。
sudo mdutil -i off "/Volumes/My Drive"
-i on 重新开启索引,聚焦会把这个宗卷的索引更新到最新:
sudo mdutil -i on "/Volumes/My Drive"
-d 还会关闭这个宗卷的搜索,状态随后显示为 Indexing and searching disabled.,同样可以用 -i on 恢复。
一般不建议关闭启动磁盘的索引,因为聚焦要靠这个索引查找 App、文稿、邮件和系统设置。如果只是想让某些文件夹不出现在搜索结果里,把它们加入聚焦设置里的隐私列表就可以。
全部选项
| 选项 | 作用 |
|---|---|
-s | 显示指定宗卷的索引状态。 |
-a | 对所有宗卷执行命令,例如 mdutil -sa。 |
-i on、-i off | 开启或关闭索引。磁盘空间快用完时,索引可能会推迟。 |
-E | 清除索引,让聚焦重新建立。 |
-d | 关闭宗卷的索引和搜索。 |
-v | 有更多信息时显示得更详细,例如 mdutil -sv /。 |
-V 宗卷 | 对这个宗卷上的所有索引执行命令。 |
-t | 根据文件 ID 找到文件,可以附带宗卷路径或设备 ID。 |
-r 插件 | 让聚焦重新导入所列导入插件负责的文件。 |
-L 宗卷 | 列出宗卷索引文件夹里的文件,需要 sudo。 |
-P 宗卷 | 显示宗卷的聚焦设置文件 VolumeConfiguration.plist,需要 sudo。 |
-X 宗卷 | 删除宗卷的索引文件夹,但不关闭索引。重新启动、重新挂载宗卷,或者执行 -i、-E 之后,聚焦会重新建立。需要 sudo。 |
-p | 原本用来把本机缓存的索引写回网络磁盘。在 macOS Sequoia 上会显示 Error: datastore publishing not implemented. |
提示信息的含义
Indexing enabled.
聚焦正常为这个宗卷建立索引。Indexing disabled.
索引已经关闭。用sudo mdutil -i on加上宗卷路径开启。Indexing and searching disabled.
索引和搜索都已关闭,例如执行过-d。用-i on可以恢复两者。Indexing and searching disabled because of ".metadata_never_index" file at root of volume.
宗卷顶层有一个名为.metadata_never_index的空文件,聚焦因此不处理这个宗卷。删除这个文件,再开启索引。Error: unknown indexing state.
路径不是宗卷的挂载位置。请使用/或/Volumes下面的磁盘路径。Error: unexpected indexing state. kMDConfigSearchLevelTransitioning
宗卷还在切换状态,通常出现在刚执行完另一条命令之后。等待几秒钟再执行一次。Error: Index is already changing state. Please try again in a moment.
和上一条相同,稍等片刻再试。Error: unable to perform operation. Try as root. (-1)
这项修改需要管理员权限,在命令前面加上sudo。Must be root to run this command
-L、-P和-X需要sudo。Error: invalid path
这个路径不存在。检查拼写,名称里有空格时加上引号。Spotlight server is disabled.
mdutil 无法连接聚焦的后台服务。重新启动 Mac 后再查看。No index.
这个宗卷还没有聚焦索引。Index is read-only.
聚焦可以用现有的索引搜索,但不会更新它。Server search enabled.
网络宗卷使用服务器自己的索引提供搜索。
不用终端重建索引
Apple 官方的方法是在聚焦设置里重建某个磁盘或文件夹的索引:
- 从苹果菜单中选取“系统设置”,然后点按边栏中的“聚焦”(或“Siri 与聚焦”)。
- 向下滚动,点按窗口底部的“搜索隐私”(或“聚焦隐私”)按钮。
- 把磁盘或文件夹拖进列表,或者点按添加按钮(+)选择它。
- 等待几秒钟,在列表中选择它,然后点按移除按钮(–)。
- 点按“完成”。聚焦会重新为这个磁盘或文件夹建立索引。
Apple 在关于 Apple 设备上的“聚焦”索引和搜索结果里介绍了这些步骤。
相关命令
mdutil 负责维护索引,下面几条同样是 macOS 自带的命令,它们会用到这个索引:
mdfind在终端里搜索索引,搜索方式和聚焦相同,例如mdfind "季度报告";mdfind -name invoice只匹配文件名。加上-onlyin和文件夹路径,可以只搜索那个文件夹。mdls列出聚焦为某个文件记录的元数据,例如mdls ~/Desktop/report.pdf。mdimport -L列出聚焦读取各类文件时使用的导入插件。
常见问题
mdutil 需要 sudo 吗?
-L、-P 和 -X 也需要。缺少 sudo 时,mdutil 会提示 Try as root 或 Must be root to run this command。重建聚焦索引要多久?
怎样知道聚焦正在建立索引?
mds、mds_stores 和 mdworker 会占用处理器。搜索还不能使用时,聚焦窗口顶部也会显示进度条,不过进度条消失以后,索引可能还会继续建立一段时间。清除索引会删除我的文件吗?
-E 只删除聚焦的索引,macOS 会根据你的文件重新建立。新的索引完成以前,搜索结果会不完整。MDUtil 和 Apple 的 mdutil 有关系吗?
mdutil 是 macOS 自带的命令,两者只是名称相同。