Mac 大扫除🧹

基于 macOS Catalina 版本 10.15.4, 128G固态,8GB内存。

通过以下命令可以查看当前路径下的所有文件及文件夹大小并从大到小排列,以 KB 为单位显示。

1
du -sk *| sort -rn

以下命令就是以K,M,G为单位,提高信息的可读性,但是不能正确按文件大小排序。

1
du -sh *

用户文件清理

我们称~/目录下的文件为用户文件。

  1. 卸载不必要的应用,使用 柠檬清理 或者 AppCleaner 都是免费的。
  2. 通过 柠檬清理,CleanMyMac 等软件清理垃圾,删除无用的大文件,这类软件都只有管理用户文件的能力。
  3. 软件的配置、下载的插件等不能直接删除,应选择性删除:
1
~/Library/Application Support/
  1. 应用的缓存文件可以直接删除,不放心的话使用 trash 将其放入垃圾篓,如有异常还原便可,不用担心开不了机,用户文件也就是 ~/ 目录下的文件,是不会影响系统运行的:
1
2
3
4
rm -rf ~/Library/Caches/*
// or
brew install trash
trash ~/Library/Caches/*

“系统文件”清理

清理文件定位

Catalina中,系统文件从原本的文件系统中分离了,组成独立的文件系统,并且把这个文件系统从设计上设定为只能读取,不能写入。
1586700714.png

而其他文件和数据存储在Macintosh HD - Data卷中,挂载在/System/Volumes/Data目录下,在Finder中和系统卷一样显示为Macintosh HD。
1586754964.png

如何区分数据卷和系统卷呢?
可以说除/System/Volumes/Data目录下的文件,其他都是数据卷文件。

我们还可以发现一个怪异的现象,最明显的是/Users/Applications同样出现在/System/Volumes/Data/Applications/System/Volumes/Data/Users,而且内容相同、检测出来大小都相同,并且没有占用额外的空间。

这里用到的是 “Bi-directional wormhole in path traversal” (路径遍历中的双向虫洞)—— Firmlinks,一种新的文件类型对象,类似于符号链接。通过以下命令可以查看哪些文件创建了Firmlinks:

1
vim /usr/share/firmlinks

1586753548.png

开始清理

系统卷不能修改和写入,所以不会产生额外的垃圾,删除一些不用的系统应用是可以的,比如国际象棋,但是它们都不怎么占空间,所以没大必要。

1
sudo rm -rf /System/Applications/Chess.app/

我们实际上就是对 数据卷 进行清理。暂且把除去/Users用户文件外的文件都称为系统文件吧,因为它们很多都是与系统功能相关的,

通过du -sk *| sort -rn命令,以下六个文件夹占的空间比较大:

1
2
3
4
5
6
30210188	Users
18391484 Applications
6144100 private
4822752 usr
4179388 System
3856812 Library

Users是用户文件我们已经清理过了Applications是用户下载的应用,也清理过了,重点研究后面四个文件夹。

/System/Volumes/Data/private/var/vm 这里面删了又有,我删过,并没有产生什么意外。其中 sleepimage 是用于休眠期间存储主存的内容;swapfile 用于虚拟内存存储,当物理内存满了,系统会自动“调出”未被积极使用的数据,并将其存储于 swapfile。这两个都可以关闭,但是都不建议。

/System/Volumes/Data/System/Library/Speech 占了两个多G空间是语音相关的文件say 你好系统就会说你好

/System/Volumes/Data/usr,usr是Unix System Resource的缩写,也就是Unix操作系统软件资源,很多通过命令行安装的软件都存放在这里,比如mac包管理器brew安装的软件都存放在里面,brew uninstall只会卸载软件本身而不会卸载相关依赖,通过以下命令可以安全的卸载brew安装的软件及其依赖:

1
2
brew tap beeftornado/rmtree
brew rmtree XX

其实基于不同的使用习惯和用途,会产生不同的垃圾,用 du 命令一层层的分析查看,了解其内容含义,再清除是比较好的方法。

参考文献