這個安裝程式在我的 Mac 上放了什麼?
你執行了安裝程式、輸入了密碼,它告訴你「已成功安裝。」但它沒說東西都放到哪裡去了。
簡單說:.pkg 安裝程式會留下一份收據(receipt)。在終端機裡,pkgutil --pkgs 會列出所有收據,pkgutil --files <package-id> 會列出某個套件安裝的每一個檔案。從磁碟映像檔(.dmg)拖進來的 App 不會留下收據:它們加入的東西會在你第一次打開時出現,大多在 ~/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 只會移除收據,每個檔案都還留在原處。如果開發商有提供解除安裝程式,就用它。否則,上面的檔案清單就是你的檢查清單:把清單上的東西移到垃圾桶,最後再讓系統忘掉(forget)這份收據。
從磁碟映像檔或 App Store 安裝的 App 呢?
- 從磁碟映像檔安裝:App 會在第一次執行時寫入它的檔案。要看有哪些新東西,就把資料夾依日期排序:
ls -lt ~/Library/Application\ Support | head,再對~/Library/Caches、~/Library/Preferences和~/Library/LaunchAgents做同樣的事。 - 從 App Store 安裝:App 會把資料存在自己的資料夾
~/Library/Containers/<bundle ID>,有時也會放在~/Library/Group Containers。