这个安装器在我的 Mac 上放了什么?
你运行了一个安装器,输入了密码,它告诉你“安装成功。”但它没说东西都装到了哪里。
一句话:.pkg 安装器会留下一份回执(receipt)。在“终端”中,pkgutil --pkgs 列出所有回执,pkgutil --files <package-id> 列出某个安装包安装的每一个文件。从磁盘映像(.dmg)拖进来的应用不会留下回执:它们添加的东西在你第一次打开时才出现,大多在 ~/Library 里。
怎样找到安装器的安装包 ID?
按名称搜索回执:
pkgutil --pkgs | grep -i zoom
或者把最新的回执排在前面,找出今天装了什么:
ls -lt /var/db/receipts | head
每份回执是一对以安装包 ID 命名的文件,例如 com.example.app.plist 和 .bom。一个安装器可能留下好几个安装包。
怎样列出它安装的文件?
pkgutil --pkg-info com.example.app
pkgutil --files com.example.app
第一条显示版本、安装位置和安装时间(自 1970 年起的秒数)。第二条列出的路径从这个位置算起:如果是 location: /,Library/LaunchDaemons/… 就是 /Library/LaunchDaemons/…;如果是 location: Library/Audio/Plug-Ins/HAL,这些路径就在 /Library/Audio/Plug-Ins/HAL 里面。加上 --only-files 可以不列出文件夹。
它有没有添加在后台运行的东西?
pkgutil --files com.example.app | grep -i launch
LaunchAgents 或 LaunchDaemons 里的任何内容都会自行启动。它们也会出现在“系统设置”›“通用”›“登录项与扩展”中,你可以在那里关闭。还要留意 PrivilegedHelperTools:这些辅助程序以管理员权限运行。
pkgutil 能卸载安装包吗?
不能。pkgutil --forget 只移除回执,所有文件都原样留着。如果开发者提供了卸载程序,就用它。否则,上面的文件列表就是你的检查清单:把列出的内容移到废纸篓,然后再让 pkgutil 忘掉这份回执。
从磁盘映像或 App Store 安装的应用呢?
- 从磁盘映像安装:应用在第一次运行时写入自己的文件。要看新增了什么,可以按日期排序某个文件夹:
ls -lt ~/Library/Application\ Support | head,再对~/Library/Caches、~/Library/Preferences和~/Library/LaunchAgents做同样的事。 - 从 App Store 安装:应用把数据放在自己的文件夹
~/Library/Containers/<bundle ID>中,有时也放在~/Library/Group Containers中。