Macでは.pkgファイルからアプリケーションをインストールすることができる。
しかし、中にはインストーラのみでアンインストーラが付属していない.pkgも多いため、pkgutilを用いてインストールした.pkgを削除する方法を紹介する。
環境
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.9.4
BuildVersion: 13E28
CAUTION!!
ここで紹介する方法では、インストールしたパッケージの完全な削除がおこなえるわけではない。例えば、
- /usr/local/bin以下に配置されたコマンド用ファイル
- /usr/local/share/man以下に配置されたのマニュアル用ファイル
- ホームディレクトリに配置されたドットファイル
- /System/Library/LaunchDaemonsに配置された.plistファイル
などがインストール時に自動的に配置されていた場合、これらは手動で削除しなければならない。
あくまでインストールしたパッケージの情報を削除するだけである。
方法
pkgutilコマンドを用いる。
$ pkgutil --pkgs
と打つと、これまでにインストールしたパッケージの一覧が表示される。
次に、対象となるパッケージを検索する。
例として、https://github.com/osxfuse/sshfs/downloads からインストールしたsshfsパッケージを削除したいとする。
$ pkgutil --pkgs | grep -i sshfs
com.github.osxfuse.pkg.SSHFS
すると、目的のパッケージのものと思われるIDが表示される。
ここで、本当にこのIDがsshfs用のものかを調べるため--files
オプションを付けてIDを指定する。
$ pkgutil --files com.github.osxfuse.pkg.SSHFS
usr
usr/local
usr/local/bin
usr/local/bin/sshfs
usr/local/share
usr/local/share/man
usr/local/share/man/man1
usr/local/share/man/man1/sshfs.1
親ディレクトリまでもが表示されてしまうが、ここで該当すると考えられるのは
usr/local/bin/sshfs
usr/local/share/man/man1/sshfs.1
の2つだと考えられるため、このIDは目的のパッケージのものだと分かった。
削除するには、--forget
オプションを使用する。
$ sudo pkgutil --forget com.github.osxfuse.pkg.SSHFS
Forgot package 'com.github.osxfuse.pkg.SSHFS' on '/'.
あらためて$ pkgutil --pkgs
とするとちゃんと削除されていることが分かる。
なお、このままでは
usr/local/bin/sshfs
usr/local/share/man/man1/sshfs.1
は残ったままなので、手動で削除する必要がある。
上にも述べたように、あくまでもインストールしたパッケージの情報を削除するだけであるため、そこに留意して利用されたし。
追記(2014/9/13 16:00)
@satoshia さんから、関連ファイルを全て削除するには以下のようなスクリプトを実行すればよいということを教えて頂いた。
#!/bin/bash
package_id=$1
rm-pkg-files() {
while read line; do
file="/${line}"
if [ -f "$file" ]; then
rm "$file"
elif [ -d "$file" ]; then
rmdir "$file"
fi
done
}
pkgutil --files $package_id | tail -r | rm-pkg-files
pkgutil --forget $package_id
と記述し、
sudo uninstall-pkg.sh package-id
とすることで完全にアンインストールすることができる。