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 lsbom
man 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 の節