Qiita初投稿です
コマンドまとめ
pkgutil: *.pkgで入れたものに関するユーティリティ
installer: システムソフトウェア/パッケージインストーラツール
pkgutil
データベース系
-
--pkgs: 今入っているパッケージのIDリスト-
--pkgs=REGEXP: 正規表現にマッチしたものの出力- cf:
man 7 re_format
- cf:
-
--pkgs-plist: plist形式での出力
-
-
--files PKGID: インストールしたファイルのリストを出力 -
--export-plist: 全情報をplist形式で出力 -
--verify PKGID: パッケージのファイルシステムのパーミッションやフラグの確認- cf:
man 8 repair_packages
- cf:
-
--repair PKGID:--verifyの修復版- cf:
man 8 repair_packages
- cf:
-
--pkg-info PKGID: パッケージ情報を出力する-
--pkg-info-plist PKGID: plist形式での出力
-
-
--forget PKGID: 管理データベースからPKGIDに関して消す -
--file-info PATH: PATHの情報を表示-
--file-info-plist: plist形式での出力 - pkgから入れたものであればpkgidとか出てくる
-
ファイル系
-
--expand PKG-PATH DIR-PATH: PKG-PATHの中身をDIR-PATHに展開する- DIR-PATHは新しく作られるので
.は指定できない
- DIR-PATHは新しく作られるので
-
--flatten DIR-PATH PKG-PATH:--expandの逆 DIR-PATHの中身をPKG-PATHにまとめる -
--bom PKG-PATH: PKG-PATHからBOMファイルを/tmpの下に展開する- BOMファイルは
lsbomで中身を見れる - cf:
man lsbomman 5 bom
- BOMファイルは
-
--payload-files: インストールされるファイルの出力
installer
-
-dominfo: インストール先のドメインの表示- この場合のドメインはローカルシステムかユーザのホームディレクトリかなど
-
-volinfo: インストール出来るボリュームの表示 -
-pkginfo: インストールされるパッケージのリスト- メタパッケージならサブパッケージの出力
アンインストールについて
消したいファイルがわかっている場合
-
pkgutil --file-info file_pathでpkg-idを取得- バージョンによっては古いパッケージのものが出てくるかもしれない
- 似たようなパッケージ名が無いか調べる
- 重複しているのがあるかもしれない
- ファイルを消す
- 長いので以下のコマンド節のものを参考に
- パッケージ情報を消す
pkgutil --forget PKG-ID
pkgファイルがあるとき
- pkgファイルを展開する
pkgutil --expand PKG-PATH DIR-PATH
- DistributionとかPackageInfoとか見てpkg-idを取得
- Distribution :
pkg-refタグのidプロパティを見るのが良さそう - PackageInfo : ルートタグの
identifierプロパティがそれっぽい
- Distribution :
- 消したいファイルがわかっている時の2に行く
コマンド
- インストールされているディレクトリを取得
-
pkgutil --pkg-info PKG-ID |grep -e "volume:" -e "location:" | grep -v "(null)" | cut -d' ' -f 2 | paste -s -d "\0" --
pkgutilでPKG-IDに関する情報を取得 -
volume:とlocation:コマンドが入っている行だけ抽出 -
volume: /みたいな形式になっているのでcutコマンドで2個目の値だけ取る- フォーマットが崩れると死ぬ
-
pasteで区切り無しで連結
-
-
- パッケージからインストールしたファイルの内存在するファイルかシンボリックリンクを取得
root=$( pkgutil --pkg-info $PKG_ID |grep -e "volume:" -e "location:"| grep -v "(null)" | cut -d' ' -f 2 | paste -s -d "\0" -) ;pkgutil --files $PKG_ID | while read f ; do file=${root%/}/$f ; [[ -e $file || -L $file ]] && echo $file ; done
- パッケージからインストールしたファイルの削除
root=$(pkgutil --pkg-info $PKG_ID | grep -e "volume:" -e "location:" | grep -v "(null)" | cut -d ' ' -f 2 | paste -s -d "\0" -); pkgutil --files $PKG_ID | sort -r | while read f; do file=${root%/}/$f ; [[ -L $file ]] && { [[ ! -e $file ]] && sudo unlink $file } || { [[ -f $file ]] && sudo rm $file ; [[ -d $file ]] && sudo rmdir $file ; } done
参考文献
- blog.niw.at Mac OSXのパッケージファイルを操作する
man pkgutil-
man 5 plist: plist形式について -
man 7 re\_format: 使われている正規表現について man 8 installer-
man zshmisc- conditional expressions の節