news 2026/9/20 9:41:51

MacBook卸载软件的正确姿势:从废纸篓到命令行彻底清理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MacBook卸载软件的正确姿势:从废纸篓到命令行彻底清理

用MacBook时间一长,总会碰上一件事:想卸掉某个软件,结果发现拖进废纸篓之后,重装时旧设置还在;或者磁盘空间并没有明显减少;更麻烦的是有些软件自带守护进程,删了主程序还一直在后台跑。这篇文章就把MacBook上卸载软件的“正确姿势”从头到尾捋一遍——前两种是日常够用的基础操作,第三种适合想清得更干净的人,最后再聊命令行终极方案。看完你就能根据软件类型自己判断,到底用哪种方式卸载最合适,也不会再怕“卸载残留”。

1. 开始之前:先搞清楚MacBook上的软件是怎么“装”进去的

1.1 一个App其实就是一个文件夹

Windows用户刚切到MacBook时,最难适应的一个点就是:macOS里绝大多数软件没有“安装程序”这个概念。你从官网下载的往往是.dmg镜像,打开后把后缀为.app的图标拖进“应用程序”文件夹,这就装完了。.app看起来是一个图标,本质上是一个文件夹,里面装着可执行文件、资源、图标和各种框架。

这种设计带来的好处是:卸载主程序很简单,把.app删掉就算删掉软件本身,系统不会出现类似Windows注册表那样一堆残留条目。坏处是:软件运行时产生的个人数据、配置、缓存,并不会放在.app文件夹里面,而是散落在系统各处的“Library”目录中。这部分系统不会帮你自动清理,于是就有了“卸载不干净”的说法。

1.2 “卸载不干净”的根源在Library

先说一下我用过的真实场景。之前帮朋友清理一台老MacBook,光是卸载一个聊天软件,就在~/Library/Application Support里发现了将近2GB的聊天记录缓存和头像图片。主程序早就删了,但那些数据还躺在硬盘里,Spotlight搜不到,废纸篓里也没有,结果白占空间。

macOS下软件的数据主要分布在这些位置:

  • ~/Library/Application Support:软件的存档、配置、数据库文件,最容易被忽略。
  • ~/Library/Preferences:偏好设置文件,文件名以.plist结尾,删掉后软件会恢复默认设置。
  • ~/Library/Caches:各类缓存,可以删,但不建议为了“清理”而全盘清空。
  • ~/Library/Logs:日志文件。
  • ~/Library/LaunchAgents/Library/LaunchDaemons:自启动项和后台服务。

还有一些软件会写到系统级的/Library目录,比如驱动、输入法、系统扩展等。普通用户目录下的残留还好办,系统级目录里的文件一旦误删,可能会影响其他软件,所以处理的时候要格外小心。

1.3 为什么MacBook没有一个统一的“卸载入口”

很多新用户会问:Windows有“控制面板—程序和功能”,MacBook怎么没有?严格说,macOS把“卸载”这件事分散到了两种机制里:从App Store下载的软件,可以在“启动台”长按图标直接删;从网页下载的软件,大多需要手动删除.app

部分软件厂商会附带一个Uninstaller工具,位置通常在软件安装目录里,或在.dmg镜像里。但实际上,这些卸载器很多只是把主程序和一部分配置文件删掉,并不能保证清干净。Apple的理念是:软件自己的数据应该由软件自己管理,系统只负责维护App注册信息。问题是很多中小开发者没有精力去做一个完美的卸载器,于是残留就成了普遍现象。

所以,想真正掌握MacBook的卸载技巧,核心不是背命令,而是理解“应用本体 + 用户数据 + 缓存”这三层结构。后面提到的所有方法,都是在处理这三层内容。

2. 第1种姿势:拖进废纸篓,适合大部分普通软件

2.1 最简单的操作步骤

拖进废纸篓是macOS最经典的卸载方式。操作上没什么门槛:打开“访达”,左侧边栏点“应用程序”,找到要卸载的软件图标,直接拖到右下角废纸篓。也可以选中图标后按Command + Delete快捷删除。

有些软件安装在当前用户目录下的~/Applications,路径比较隐蔽。你可以打开“访达”,按Command + Shift + G,输入~/Applications进入。如果是系统级应用,则会在/Applications目录里。我都建议你实际操作前先确认一下软件到底装在哪里,避免拖了以后找不到。

删除主程序后,废纸篓里的.app还占着空间,需要再右键废纸篓,选择“清倒废纸篓”,或者按Command + Shift + Delete彻底清空。如果你不确定是不是真的不用了,可以先留着废纸篓里几天,等确认没问题再清空。

2.2 拖拽删除的边界在哪

这个方法适合绝大多数普通软件,尤其是没有安装后台服务、没有额外驱动的应用。比如办公软件、图片查看器、一部分工具类软件,拖进废纸篓就够了。但它的局限也很明显:

  • 不会删除~/Library下的偏好设置、缓存、应用支持文件。
  • 不会停止某些软件的后台进程。如果App还在运行,删除时系统会提示“项目正被使用”,需要先退出。
  • 不会清理登录项。有些软件会在系统设置里加入开机自启,主程序删了,自启动项可能还在。

所以我会把“拖进废纸篓”当作日常基础操作,而不是“彻底卸载”的终点。如果你只是嫌软件碍事、想重装一遍,这个方式足够;如果你想把占用空间彻底释放出来,建议配合后面的深度清理步骤。

3. 第2种姿势:启动台长按删除,适合App Store安装的软件

3.1 启动台里的“×

App Store上下载的软件,macOS提供了一种更“系统化”的删除方式:打开启动台,找到图标,用鼠标长按,或者按住键盘上的Option键,图标就会开始抖动,左上角出现一个“×”按钮,点一下即可删除。

这个操作的本质也是删除.app主程序,但因为它由系统统一管理,删除时会更干净一些。App Store应用通常会带上沙盒容器,数据集中在~/Library/Containers目录下。删除启动台应用时,系统会把对应的容器目录一并处理,比手动拖拽更省事。

3.2 哪些软件适用,哪些不适用

启动台长按删除有个前提:软件必须是通过App Store安装的。如果软件是从官网下载的.dmg.pkg安装包安装的,启动台图标下面可能没有“×”,长按也不会出现删除按钮。这时候只能回访达里删。

另外,macOS系统自带的软件,比如Safari、“地图”、“邮件”这些,启动台里是不会显示“×”的,因为系统允许用户重新下载这些App,但不希望你直接通过启动台删除系统组件。这种行为是保护机制,不是bug。

3.3 启动台删不掉的常见原因

我遇到过不少次这种情况:明明已经把应用删了,启动台里的图标却还在,点开没反应。这通常是因为LaunchServices的缓存没有刷新,或者图标所在的位置有另一个同名副本。可以尝试重启一次Dock:

killall Dock

Dock重启后,启动台会重新读取已安装应用列表,纯残留图标一般会消失。如果还不行,可以先在访达里确认/Applications~//Applications下确实没有对应.app,再执行下面的命令重置启动台数据库:

defaults write com.apple.dock ResetLaunchPad -bool true killall Dock

注意这个命令会把启动台的分组、布局恢复成默认状态,相当于把启动台“格式化”一遍。虽然能解决图标残留,但是有代价,我一般先试killall Dock,不行才用重置命令。

4. 第3种姿势:清理关联文件,借助第三方卸载工具或手动清理

4.1 什么时候需要第3种方法

当你发现某个软件特别占空间,或者卸载重装后旧配置还在,又或者软件本身安装了一堆后台服务,那就不要只删主程序了。这时候建议用第三方卸载工具,或者按下面的路径手动清理。

我先给你一个判断表,可以根据软件行为来选:

软件类型例子推荐卸载方式
普通工具类截图软件、PDF阅读器拖进废纸篓就够
App Store应用各种商店下载的App启动台删除
大型办公类文档处理、设计软件拖拽 + 清理缓存
开发工具类编辑器、IDE、命令行工具命令行或官方卸载器
安装包型软件驱动、输入法、系统扩展优先找官方卸载方法

4.2 第三方卸载工具怎么选怎么用

市面上比较常用的有 AppCleaner、CleanMyMac X、PearCleaner 等。我自己的习惯是优先用免费开源的 AppCleaner 或 PearCleaner,因为功能足够,也不会常驻后台。

操作流程一般是:打开工具,把你要卸载的.app拖进工具窗口,它会自动扫描这个软件相关的文件,列出一个清单,你勾选要删除的项目,点删除即可。这个清单通常会包括主程序、偏好设置、缓存、应用支持文件等。

但注意:工具列出的项目不一定全都该删。比如某个缓存文件夹里同时有别的软件在使用,或者某个 plist 文件被其他软件共用,删掉可能会出问题。所以我在删除前会习惯性扫一眼清单,拿不准的项目就先取消勾选。另外,卸载工具自身也是软件,用不到的时候也可以卸载掉,别让它一直占着资源。

4.3 不装工具,手动清理也完全可以

如果你不想安装额外软件,手动清理其实也不难。先把主程序拖进废纸篓或者在终端删除,然后打开“访达”,按Command + Shift + G,依次输入下面这些路径,找到和目标软件名字相关的文件,删掉:

  • ~/Library/Application Support/软件名
  • ~/Library/Caches/软件名~/Library/Caches/包名
  • ~/Library/Preferences/软件名.plist
  • ~/Library/Logs/软件名
  • ~/Library/LaunchAgents/
  • /Library/LaunchAgents/
  • /Library/LaunchDaemons/

手动清理的关键是知道软件真正的名字或包名,很多软件的文件夹名并不是显示出来那个“软件名”,而是类似com.jetbrains.intellij这样的反向域名格式。你可以在终端里输入下面的命令来查看某个App的包名:

mdls -name kMDItemCFBundleIdentifier "/Applications/你的软件.app"

把路径替换成真实路径,输出结果就是它的bundle identifier。然后按这个包名去Library目录里搜索,能找出很多隐藏的残留文件。

5. 命令行终极方案:从查路径到清理残留一次讲清

5.1 为什么要用命令行

如果你想要的不是“卸载个大概”,而是“把这个软件从系统里彻底请出去”,那命令行是最直接、最可控的方式。它能精确查看文件列表,不会像图形工具那样隐藏细节;还能处理一些普通方式处理不了的情况,比如软件由.pkg安装包安装、有系统级守护进程等。

先说清楚:命令行删除不会进废纸篓,删了就没了。所以我建议在复制命令之前,先把命令里的“Example”替换成真实软件名,多看一眼路径对不对,再回车执行。终端本身不需要有很强的技术背景,会用几条基础命令就行。

5.2 先确认软件安装路径

删除之前,先看看软件到底在/Applications还是~/Applications。列出应用程序目录很简单:

ls /Applications

如果软件安装在当前用户目录下:

ls ~/Applications

也可以用 Spotlight的命令行接口查找:

mdfind "kMDItemFSName == '你的软件.app'"

这个命令会搜索整个 Spotlight 索引,输出所有匹配的路径。它的好处是能找出不在常规目录里的软件,比如安装在某个子目录里的版本。

5.3 退出App并删除主程序

先退出正在运行的软件,否则文件被占用会删不掉。可以用AppleScript自然退出:

osascript -e 'quit app "你的软件名"'

如果软件卡住了,可以用killall强制结束进程,注意这个命令很强硬,未保存的文件可能会丢失:

killall 你的软件名

确认退出后,再删除主程序。普通用户目录下的软件不需要sudo

rm -rf ~/Applications/你的软件.app

系统应用程序目录下的软件,通常会需要管理员权限:

sudo rm -rf "/Applications/你的软件.app"

rm -rf的含义是递归强制删除,威力很大。使用前最好先用ls -ld看看路径是否存在、是否正确:

ls -ld "/Applications/你的软件.app"

看到输出属于你要删的App之后,再执行删除命令。路径里如果有空格,记得用引号包住。

5.4 查找并清理Library残留

接下来是关键部分。先按软件名搜索残留:

mdfind "kMDItemFSName == '*你的软件名*'c" ~/Library

这个命令会在用户Library目录里查找名字中包含软件名的文件。顺便也搜一下系统级Library,但要注意别误删:

sudo mdfind "kMDItemFSName == '*你的软件名*'c" /Library

如果搜到的结果很多,不要急着一股脑全删。先看看路径,重点是下面几个目录里的内容:

rm -rf ~/Library/"Application Support"/你的软件名 rm -rf ~/Library/Caches/你的软件名 rm -rf ~/Library/Preferences/你的软件名.plist rm -rf ~/Library/Logs/你的软件名 rm -rf ~/Library/HTTPStorages/你的软件名 rm -rf ~/Library/WebKit/你的软件名 rm -rf ~/Library/"Saved Application State"/你的软件名.savedState

有些软件的文件名不是软件名,而是包名,比如com.example.app。可以配合mdls查出来的bundle identifier,把上面的“你的软件名”换成包名再执行一轮:

rm -rf ~/Library/"Application Support"/com.example.app rm -rf ~/Library/Caches/com.example.app rm -rf ~/Library/Preferences/com.example.app.plist

如果你担心漏掉文件,可以用find直接搜索整个目录:

find ~/Library -iname "*你的软件名*" -maxdepth 5 2>/dev/null

2>/dev/null是忽略权限错误,不然屏幕上会刷出一堆“Permission denied”。把输出结果看清楚,确认哪个是你的软件相关文件,再手动删除。

5.5 处理自启动项和后台守护进程

很多软件会把自己注册成开机启动项,位置通常在~/Library/LaunchAgents/Library/LaunchAgents/Library/LaunchDaemons。在这些目录里找到软件名或包名开头的.plist文件,删除它:

rm -rf ~/Library/LaunchAgents/com.example.app.plist

系统级目录则需要sudo

sudo rm -rf /Library/LaunchAgents/com.example.app.plist sudo rm -rf /Library/LaunchDaemons/com.example.app.plist

删除后最好重启一次电脑,确保后台服务不会继续运行。如果你不想重启,也可以在“系统设置—通用—登录项”里检查并移除残留条目,这个操作更直观,小白也可以做。

5.6 处理pkg安装的软件

.pkg安装包安装的软件通常没有“卸载程序”,这时候命令行反而是最靠谱的方式。先查看系统记录的包信息:

pkgutil --pkgs | grep -i 软件名

输出结果是一串包名,比如com.example.pkg.Software。然后查看这个包安装了哪些文件:

pkgutil --files com.example.pkg.Software

输出的是安装时的完整文件列表。如果文件很多,建议先把列表保存到桌面,方便一条条核对:

pkgutil --files com.example.pkg.Software > ~/Desktop/pkg-files.txt

然后根据列表,用rm删除对应的文件。这里要特别注意:列表里可能会包含/usr/bin下的命令、/Library/Extensions下的驱动、/Library/Frameworks下的框架,删除时要确认这是软件自己的文件,不要误删系统关键文件。

最后清除包记录,让系统不再以为这个软件还装着:

sudo pkgutil --forget com.example.pkg.Software

pkgutil --forget只是移除包记录,不是卸载软件,不能替代前面的删文件操作。命令行执行完之后,最稳妥的做法是重启一次,确认没有异常。

5.7 处理Homebrew安装的软件

很多开发者习惯用Homebrew安装软件。如果你也是用Homebrew装的,卸载就不要手动删了,直接用命令卸载更干净。比如桌面软件是通过Cask方式安装的:

brew uninstall --cask 软件名

如果想连配置数据一起清理,可以加--zap

brew uninstall --zap --cask 软件名

--zap的清理力度比较大,会删除应用的用户数据。如果只是临时不想要了,以后可能还要装回旧版本,可以不加这个参数。

如果是命令行工具,用以下命令:

brew uninstall 软件名

卸载完以后,还可以顺手清理不再需要的依赖和旧版本缓存:

brew autoremove brew cleanup

5.8 一个真实案例的完整命令流程

我拿卸载一个叫“Example”的软件为例,把命令行流程串起来。实际使用中,把“Example”替换成你的软件名即可:

# 1. 查看软件安装路径 ls /Applications/Example.app # 2. 查看包名 mdls -name kMDItemCFBundleIdentifier /Applications/Example.app # 3. 退出软件 osascript -e 'quit app "Example"' # 4. 删除主程序 sudo rm -rf /Applications/Example.app # 5. 搜索并检查Library下的残留 mdfind "kMDItemFSName == '*Example*'c" ~/Library # 6. 删除常见残留文件 rm -rf ~/Library/"Application Support"/Example rm -rf ~/Library/Caches/Example rm -rf ~/Library/Preferences/Example.plist rm -rf ~/Library/Logs/Example # 7. 如果软件有自启动项,一并删除 rm -rf ~/Library/LaunchAgents/com.example.plist

每一步执行后看输出,没报错再继续。这个流程足够应付绝大多数桌面软件。

6. 常见问题与避坑实录

6.1 启动台图标删不掉

启动台里图标还在但软件已经删了,多半是Dock或LaunchServices缓存问题。先试killall Dock,不行再重置启动台数据库。重置命令之前提过,注意它会改变你的启动台布局。如果不是特别介意布局,可以放心用。

6.2 提示“文件正在使用”无法删除

这个提示说明App还在运行,或者有后台进程占用了文件。用活动监视器搜索软件名,强制退出相关进程;也可以在终端用lsof查看占用:

lsof | grep Example

输出里会包含占用文件的进程名和进程ID。确认占用的进程是目标软件,再执行killallkill 进程ID。如果进程是系统守护进程,建议不要乱杀,先去网上查一下这个软件是否有官方卸载方法。

6.3 卸载重装后旧设置还在

因为偏好设置文件没删。MacBook的软件偏好设置大多在~/Library/Preferences下面,文件名是“包名.plist”。删除前先查包名,然后删掉对应的plist文件。如果不确定,可以先用defaults read 包名看看这个软件是否设置了默认参数,确认后再删除。

我这里再说一个反常识的点:如果只是想让某个软件恢复出厂状态,其实不用卸载,直接删~/Library/Preferences/包名.plist,重启一次软件就能达到效果。别每次都把整个软件卸了又装。

6.4 到底哪些文件该删,哪些不用管

我个人的判断标准很简单:优先删“软件自己专属的数据”,不要为了清理去动“系统共用数据”。软件在~/Library/Application Support下的专属文件夹、~/Library/Preferences下的专属plist、~/Library/Caches下的专属缓存文件夹,都是可以删的。但有些路径,比如~/Library/Application Support/com.apple.*/Library/Frameworks里的系统框架,无论如何不要碰。

也不要一味追求“零残留”。一些软件的日志和缓存只有几MB,留在那也不会影响性能,为了这几MB去翻遍整个硬盘反而浪费时间,还有误删风险。真正需要深度清理的场景是:软件体积很大、明显异常占空间、重装后出现配置冲突,或者是你有洁癖。对普通软件,“删主程序 + 删明显同名文件夹”已经是八十分了。

6.5 如何防止误删系统自带App

macOS的系统区域有SIP(System Integrity Protection,系统完整性保护)机制,会对核心系统目录和一些系统App进行保护。即使你在终端用了sudo rm -rf,也可能遇到“Operation not permitted”的提示。这是系统的安全设计,不建议强行关闭SIP去删系统自带应用。

真遇到想删的系统App,比如“地图”“家庭”,你可以在App Store里找它,但下载后还是会进系统目录。最好的结果是:如果只是不想看到,把它们移出启动台,拖到访达的“应用程序”文件夹里也不碍事,但没必要冒险去删除系统组件。为了“卸载软件”这点事去折腾系统保护,不值得。

6.6 我的卸载习惯

用了这么多年MacBook,我的最终习惯其实挺简单:普通软件直接拖进废纸篓,删完顺手看一眼~/Library/Caches~/Library/Preferences里有没有同名残留,有就删掉,没有就算了;大型开发工具或安装包型软件,我会优先用命令行查包名、查文件列表,再精确删除;App Store应用直接用启动台长按删除。如果是Homebrew安装的软件,一定用brew uninstall

只要你理解了“一个App其实就是文件夹 + 散落的数据”这个核心逻辑,就不会再被卸载问题困扰。非要给小白一句提醒的话:用命令行删除前,多花五秒钟看清楚路径,比事后折腾恢复工具划算得多。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/20 9:41:49

OpenResearch:打造可追踪、可复现的研究过程管理方法

1. 为什么我决定把研究过程做成一个“开放项目”1.1 一个让我尴尬了三天的真实问题事情发生在我整理上季度研究材料的时候。当时我准备把一份“结论”写进总结报告,为了严谨,我想回看一下当初是怎么验证的。结果是什么呢?笔记里只有一句“实验…

作者头像 李华
网站建设 2026/9/20 9:39:36

OpenRouter:Kimi K2.7 Code 用 TaoToken 取 Key 后跑补全延迟

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/20 9:38:41

从PyTorch到OM:Atlas 300V部署YOLO全流程解析

很多第一次接触昇腾生态的人,拿到一张Atlas 300V 24G板卡时都会愣一下——这东西长得像显卡,插在服务器里也像显卡,但它的定位、驱动方式、甚至调优思路,和CUDA那一套完全不是一回事。网上搜"atlas部署yolo"&#xff0c…

作者头像 李华
网站建设 2026/9/20 9:34:39

Jetson eFuse 量产烧录实战:Secure Boot 密钥配置与避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/20 9:33:57

手机编程工具全解析:从本地终端到云端开发环境

我先说个特别真实的场景:深夜航班落地,客户线上环境出了个小问题,身边只有手机。那会儿要是没有一套顺手的移动开发工具,我就只能干等回酒店开电脑,故障至少多挂两小时。从那之后,手机编程这件事就不是&quo…

作者头像 李华