macOS 中移除 .pkg 安裝的套件該這麼做!

作者先前為了測試 Mosh (mobile shell), 下載了 mosh-1.3.2.pkg 安裝到 macOS 中, 測試完成之後想要把先前安裝的 mosh-1.3.2.pkg 移除, 才突然發現自己不知道怎麼移除它! 其實, 作者應該在更早之前就已經碰過這個問題, 只是當時都選擇放棄, 就跟那些透過 .pkg 安裝的套件和平共存。 這次, 作者選擇不要再當鴕鳥了, 想知道怎麼把安裝到 macOS 中的 .pkg 套件移除的讀者, 請繼續往下閱讀。

pkgutil 指令

要移除經由 .pkg 檔案安裝到 macOS 系統中的套件, 我們可以使用 pkgutil 這個內建指令。 首先, 我們先使用 --pkgs 參數, 找出 mosh-1.3.2.pkg 安裝的套件 ID:

➜ ~ pkgutil --pkgs | grep mosh
edu.mit.mosh.mosh.pkg

接下來, 我們可以使用 --files 參數列出 mosh-1.3.2.pkg 安裝的檔案清單:

➜ ~ pkgutil --files edu.mit.mosh.mosh.pkg
local
local/bin
local/bin/mosh
local/bin/mosh-client
local/bin/mosh-server
local/share
local/share/man
local/share/man/man1
local/share/man/man1/mosh-client.1
local/share/man/man1/mosh-server.1
local/share/man/man1/mosh.1

由 mosh 指令實際的位置 /usr/local/bin/mosh, 配合以上 pkgutil 輸出的檔案清單來看,可以得知檔案清單中的路徑省略了宗卷 (Volume) / 與其中的目錄 usr, 這個關係可以從 --pkg-info 參數的輸出中得知:

➜ ~ pkgutil --pkg-info edu.mit.mosh.mosh.pkg
package-id: edu.mit.mosh.mosh.pkg
version: 0
volume: /
location: usr
install-time: 1637550053

所以,我們可以使用下列的指令管線 (pipeline), 來將 mosh-1.3.2.pkg 安裝的檔案給刪除:

➜ ~ cd /usr
➜ /usr pkgutil --only-files --files edu.mit.mosh.mosh.pkg | tr '\n' '\0' | xargs -o -n 1 -0 sudo rm -i
Password:
remove local/bin/mosh? y
remove local/bin/mosh-client? y
remove local/bin/mosh-server? y
remove local/share/man/man1/mosh-client.1? y
remove local/share/man/man1/mosh-server.1? y
remove local/share/man/man1/mosh.1? y

最後,我們可以使用 --forget 參數, 將描述 mosh-1.3.2.pkg 安裝資訊的配方 (receipe), 從系統資料庫中移除, 就可以大功告成了:

➜ ~ sudo pkgutil --forget edu.mit.mosh.mosh.pkg
Password:
Forgot package 'edu.mit.mosh.mosh.pkg' on '/'.

以上就是作者將 mosh-1.3.2.pkg 所安裝的套件, 從 macOS 中移除的過程, 讀者可以將 mosh 換成適合自己使用的套件名稱當作參數, 依樣畫葫蘆即可, 或者也可以閱讀參考資料資料中的連結取得更詳細的說明。

參考資料

發佈留言

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料