When yo installed a .pkg file on your mac, the question is how to remove it again.
Here's how to do it (using Go as an example).
We start with listing the installed packages:
$ pkgutil --pkgs
For Go, the package name is
Then we can inspect which files the package installed by executing:
$ pkgutil --files org.golang.go etc etc/paths.d etc/paths.d/go usr usr/local usr/local/go ... usr/local/go/test/varinit.go usr/local/go/test/winbatch.go usr/local/go/test/writebarrier.go usr/local/go/test/zerodivide.go
As you can see, these paths are relative, not absolute. They are relative to the install location of the package. To get the install location of the package, you can execute:
$ pkgutil --pkg-info org.golang.go package-id: org.golang.go version: go1.16beta1 volume: / location: / install-time: 1608468554
As they are installed in the root, we first need to go to that directory. This is important as the remaining commands use the relative paths to this location.
$ cd /
Beware! Modifying the filesystem with root privileges can be hazardous.
We can then start with removing the actual files:
$ pkgutil --only-files --files org.golang.go | tr '\n' '\0' | xargs -n 1 -0 sudo rm -f
Then, we can also remove all empty directories with:
$ pkgutil --only-dirs --files org.golang.go | tail -r | tr '\n' '\0' | xargs -n 1 -0 sudo rmdir
Note that we are using the
rmdir command here instead of
rm -r. The
rmdir command only removes the folders if they are empty. We want to keep the non-empty folders as there are folders in the list which are shared between different applications (e.g. the
/usr/local folder which you don't want to remove).
The last step is to make the system forget that the package was installed:
$ sudo pkgutil --forget org.golang.go
Before you execute this, please be aware that if you don't use the commands correctly, you might bring your system into an unusable state, so proceed with caution.
If this post was enjoyable or useful for you, please share it! If you have comments, questions, or feedback, you can email my personal email. To get new posts, subscribe use the RSS feed.