跳到主要內容
Mole
功能 實測 口碑 定價 常見問題 部落格
EnglishEN 简体中文中 繁體中文繁 日本語日 한국어한 FrançaisFR DeutschDE ItalianoIT EspañolES
立即購買購買 下載

    說明、文件、發佈紀錄與文章

    首頁/部落格

    解除安裝用 .pkg 套件安裝的 Mac App

    解除安裝發布 2026年9月6日更新 2026年9月26日7 分鐘閱讀

    用 .pkg 安裝程式裝上的 App,和從磁碟映像檔拖出來的 App 不是同一回事。安裝程式是以 root 身分執行的,套件叫它寫到哪裡,它就能寫到哪裡,裝完還會在「安裝程式」的收據資料庫裡記下裝了什麼。把 App 拖到垃圾桶,只是從這份記錄裡拿走一個資料夾,其餘的東西連同記錄本身都還在。這篇講的就是這種情況,怎麼確認 App 是套件裝的、怎麼看它在磁碟上放了什麼、哪些該移除、哪些該留著。如果 Finder 直接拒絕,或 App 刪了又自己回來,請先看 Mac App 無法解除安裝:七種常見原因與排查方法,自己拖進來的 App,走完整的解除安裝指南裡的一般流程就好。

    為什麼垃圾桶不夠

    套件可以把檔案放在 App 旁邊,不只是 App 裡面。我用官方安裝程式重新裝過一批 App 再移除,Zoom 的官方套件在 zoom.us.app 之外留下三個 launchd 工作和一個特權輔助程式 us.zoom.ZoomDaemon。Logi Options+ 的安裝程式還裝了另一個產品 LogiRightSight,帶著自己的收據和自己的啟動代理程式。DisplayLink Manager 在 /Library/LaunchAgents 裡加了一個啟動代理程式。Microsoft Office 會安裝一個 Word、Excel 和 PowerPoint 都會載入的共用框架套件,Microsoft AutoUpdate 和一個授權輔助程式也會跟著裝上。這些都不會跟著 App 套件一起移走。

    收據也不會移走。它存在「安裝程式」自己的資料庫裡,和它描述的那些檔案是分開的,所以移除 App 之後,pkgutil 仍然回報這個套件還裝著。DisplayLink 的官方解除安裝程式乾乾淨淨跑完一遍,它的兩份收據還在。

    Finder 跳出密碼提示,是另一個代表你碰到套件的跡象。安裝程式以 root 身分執行,所以它留下的 App 套件屬於 root,移動它需要認證。這很正常,解除安裝排查指南裡有說明。

    確認是不是套件裝的

    先看收據列表和 App 自己的路徑:

    pkgutil --pkgs | grep -i zoom
    pkgutil --file-info /Applications/zoom.us.app
    

    pkgutil --pkgs 會列出「安裝程式」在啟動磁碟上記錄過的每個套件 ID。搜尋時用廠商名稱和產品名稱,不要只搜 App 的 bundle 識別碼,因為兩者經常毫無關係。Zoom 的 App 是 us.zoom.xos,收據卻是 us.zoom.pkg.videomeeting,安裝 Cookie.app 的收據是 app.fantasticthing.Bookkeeping。連大小寫都可能不同,愛思助手的 bundle 識別碼是 cn.i4Tools.mac,收據是 cn.i4tools.mac,而 pkgutil 是按 ID 精確比對的,用大小寫混寫的那個去查,它會回答「No receipt」,收據其實就在那裡。所以 ID 要從 --pkgs 的輸出複製,不要自己打。

    pkgutil --file-info 照理會在路徑底下用 pkgid: 行標出是哪個套件安裝了它,但沒有答案不代表「不是套件裝的」。我在 macOS 27 上發現,對大多數路徑它只會印出 volume 和 path,不管檔案已經刪除還是還在,DisplayLink Manager 的 App 就拿到這樣的空答案,而它的兩份收據明明還在 Mac 上。有收據也不代表你親手執行過 .pkg,Mac App Store 也會替某些 App 留下一份,例如 com.apple.pkg.TestFlight。

    收據記錄了什麼

    用兩個指令看一個套件裝了什麼、裝在哪裡:

    pkgutil --pkg-info us.zoom.pkg.videomeeting
    pkgutil --files us.zoom.pkg.videomeeting
    

    --pkg-info 會印出套件 ID、版本、volume、location 和安裝時間。--files 印出的路徑是相對於那個卷宗和位置的,所以真正的路徑要把三段接起來。位置是 Applications 的收據,列出的是 Foo.app/Contents/...,位置為空的收據,列出的則是 Applications/Foo.app/...。先看位置再看列表,不然查的每一條路徑都會錯。

    列表裡除了檔案也有目錄。--only-files 和 --only-dirs 可以把兩者分開,一旦看到收據可能把 Library 和 Library/LaunchAgents 本身也列進去,就知道這很有用。原始記錄放在 /private/var/db/receipts,每個套件一個 .bom 和一個 .plist,但 pkgutil 的使用手冊寫明收據檔案的位置可能會變,一律要透過 pkgutil 查詢。

    收據是地圖,不是刪除清單

    很容易想把 pkgutil --files 的輸出丟進迴圈,全部刪掉。按套件解除安裝會把別的東西弄壞,多半就是這麼來的。這份列表說的是這個套件寫入了什麼,不是只有這個套件在用什麼:

    列表裡有什麼 為什麼不能直接刪
    Applications、Library、Library/LaunchAgents 這類目錄 套件建立或動過它們,但 Mac 上其他所有 App 也都在用
    廠商在多個 App 之間共用的框架和輔助程式 Word、Excel 和 PowerPoint 都會載入 Office 的共用框架,少了它們一打開就當掉
    幾個 App 共用的內容 GarageBand、Logic Pro、MainStage 和 Final Cut Pro 共用 /Library/Application Support/GarageBand、/Library/Application Support/Logic 和 /Library/Audio/Apple Loops,記錄在 com.apple.pkg.MAContent10_* 這批收據底下
    同一個安裝程式順便帶進來的另一個產品 LogiRightSight 跟著 Logi Options+ 一起裝進來,自己也能單獨運作
    啟動代理程式和守護程式的 plist 已載入的工作要先停止,再移走它的 plist,不然 launchd 會留著一個磁碟上已經什麼都沒有的工作

    這份列表也有漏掉的東西。它記錄的是套件的內容物放到磁碟上的東西,而安裝腳本能做的更多,套件裡也確實帶著腳本,例如 Foxit 的套件就有 postinstall 腳本和一個更新服務。App 執行之後還會在你的個人資源庫底下寫入自己的資料,這些都不在任何收據裡。這一側請看解除安裝 Mac App 後,如何清理殘留檔案。

    先用廠商的解除安裝程式

    Apple 的刪除 App 說明講得很直接,如果 App 附有解除安裝程式,「這是刪除該 App 以及它可能儲存在其他位置的登入項目、延伸功能或其他資料的最佳方式」。用套件安裝的軟體常常附一個,因為廠商知道自己的腳本、輔助程式和共用部分在哪裡。可以到套件所在的磁碟映像檔、「應用程式」裡這個 App 的資料夾、/Applications/Utilities、App 自己的選單,以及廠商的支援網站找找。像 Splashtop Personal 就把解除安裝程式和套件放在同一個磁碟映像檔裡。

    如果已經把 App 拖到垃圾桶,用「檔案 › 放回原處」把它拿回來,打開它,從裡面執行解除安裝程式。安全軟體、VPN 用戶端和驅動程式這幾類,廠商的工具不是可有可無,延伸功能和網路過濾器只能透過擁有它們的 App 移除,這部分在怎麼在 Mac 上解除安裝防毒軟體又不弄壞網路裡有說明。

    手動移除

    沒有解除安裝程式時,收據會告訴你去哪裡找。照這個順序處理:

    1. 結束 App,以及它在背景執行的所有東西。
    2. 用 --pkg-info 看位置,再用 --files 看列表,把 App 套件以外的路徑記下來。
    3. 列表裡的每個啟動代理程式或守護程式,先用 launchctl bootout 解除載入工作,再移動它的 plist。排查指南裡 launchd 那一節說明了為什麼順序很重要。
    4. 只把明確屬於這個產品的東西移到垃圾桶,包括 App 套件、以它的 bundle 識別碼或產品名稱命名的資料夾和 plist、/Library/PrivilegedHelperTools 裡它的輔助程式。共用的上層資料夾,以及廠商其他 App 還在用的東西都留著。pkgutil --pkgs | grep -i vendorname 可以看出同一個廠商是否還有其他套件裝著,如果有,它們的共用框架就要留下。
    5. 最後才忘掉收據,前提是它列出的東西都已經不在了:
    sudo pkgutil --forget com.vendor.pkg
    

    --forget 會丟掉收據,用使用手冊的話說,它「不會動到已安裝的檔案」。先執行它,檔案會全部留在原處,卻再也沒有記錄指向它們,接下來的工作只會更難。它需要 sudo,因為 /private/var/db/receipts 屬於 root,而且 ID 要和 --pkgs 的拼寫完全一樣。過時的收據裡沒有任何使用者資料,所以如果拿不準它列出的東西還有沒有在用,留著收據也沒有任何代價。

    檢查結果

    下面這些指令只讀取。把 com.vendor.pkg 和 vendorname 換成你在上面查到的值:

    id=com.vendor.pkg
    loc=$(pkgutil --pkg-info "$id" | sed -n 's/^location: //p')
    pkgutil --files "$id" --only-files | while IFS= read -r f; do
      p="/${loc:+$loc/}$f"
      [ -e "$p" ] && echo "$p"
    done
    pkgutil --pkgs | grep -i vendorname
    ls /Library/LaunchAgents /Library/LaunchDaemons /Library/PrivilegedHelperTools | grep -i vendorname
    launchctl list | grep -i vendorname
    launchctl print system | grep -i vendorname
    

    那個迴圈會把收據裡仍然存在的每個檔案連同完整路徑印出來。沒有輸出,代表內容物已經全部不在,可以放心忘掉收據。輸出落在 App 套件裡,代表 App 還裝著,落在其他地方的,就是移除時漏掉的,或是你因為其他 App 共用而決定留下的。如果 pkgutil 回答「No receipt for ... found」,代表收據已經忘掉了,或 ID 拼法不同。ls 和 launchctl 那幾行用來抓收據從來沒列過的輔助程式。launchctl list 看的是你自己的啟動代理程式,launchctl print system 看的是守護程式,只要印出一行就代表工作還載入著,第一欄是非零數字的正在執行。

    Mole 怎麼處理套件安裝的 App

    在 Mole 裡移除一個 App 時,它會讀取名稱和這個 App 的 bundle 識別碼或產品名稱相符的收據,列出其中仍然存在的路徑,但只限一個很窄的範圍,也就是「應用程式」裡的 App 套件,以及 /Library 底下以這個 bundle 識別碼精確命名的 Application Support、Caches、Logs、PrivilegedHelperTools、WebKit 和 HTTPStorages 資料夾,再加上 Preferences、LaunchAgents 和 LaunchDaemons 的 plist。這些列預設都不勾選,你讀過之後再一個一個勾。/Users、/opt、/usr 和 /private 底下的路徑,永遠不會因為收據變成一列,收據檔案本身也不會。

    App 移除之後,Mole 會用 pkgutil 在磁碟上的拼法,忘掉以它的 bundle 識別碼命名的收據,也會忘掉透過 pkgutil --file-info 找到的廠商收據,後者只有在那份收據列出的檔案一個都不存在時才會忘掉。這一步只在管理者輔助程式已經為這次移除取得授權時才做,所以它從不會為了一份收據多跳一次密碼提示。查找廠商收據時,會略過 Apple 的 com.apple.* 收據。

    限制就是上面說的那個。因為 pkgutil --file-info 在 macOS 27 上很少給出答案,ID 和 App 毫無關係的收據,在 Mole 移除 App 之後可能還會留著,DisplayLink 的兩份和 Zoom 的那份都是這樣。它們只是記錄,sudo pkgutil --forget 就能清掉。驅動程式、VPN 用戶端和安全軟體這幾類,Mole 不能取代廠商的解除安裝程式。

    常見問題

    pkgutil --forget 會解除安裝 App 嗎?

    不會。使用手冊寫明,它會丟掉這個套件的所有收據資料,但不會動到已安裝的檔案。要在檔案都移除之後再執行,絕對不能拿它代替移除檔案。

    pkgutil --files 列出的檔案可以全部刪掉嗎?

    不行。列表裡有 Library 和 Applications 這類系統目錄、廠商其他 App 會載入的框架,以及可能仍在執行的工作的 plist。用它找出要檢查的東西,再移除只屬於這個產品的部分。

    App 已經不在了,pkgutil --pkgs 卻還列著它,是不是還裝著?

    不一定。刪除檔案從來不會更新收據,所以收據會一直留到有人把它忘掉。跑一次上面的檢查迴圈,如果收據列出的東西都不在了,剩下的就只是記錄,sudo pkgutil --forget 就能把它移除。

    Mole 清理快取和 App 殘留檔案,不少使用者一次就清出了上百 GB。

    下載試用 Mole

    繼續閱讀

    • 解除安裝如何徹底解除安裝 Mac App(保留文件與訂閱)5 分鐘閱讀
    • 解除安裝Mac App 解除安裝前,先看清楚殘留清單5 分鐘閱讀
    • 解除安裝解除安裝 Mac 上的 Steam,又不弄丟遊戲和存檔4 分鐘閱讀

    Mole · 鼴

    清理 Mac,管理 App,查看運作狀態

    v1.15.0 (291) · 發佈紀錄

    產品

    Mac 清理 App 解除安裝 Mac 最佳化 磁碟分析 系統監控

    支援

    說明 功能文件 發佈紀錄 部落格

    法律

    服務條款 隱私權政策 退款政策

    資源

    命令列工具 推廣聯盟

    聯絡

    Twitter hi@mole.fit

    Mole 唯一官網 mole.fit · 請勿下載來源不明的安裝檔

    命令列版會繼續免費開源。