Macでインストールしたパッケージを削除する

  • 39
    Like
  • 2
    Comment
More than 1 year has passed since last update.

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

とすることで完全にアンインストールすることができる。