LoginSignup
5
6

More than 5 years have passed since last update.

MacOSXパッケージ関連コマンドまとめ

Last updated at Posted at 2016-05-04

Qiita初投稿です

コマンドまとめ

pkgutil: *.pkgで入れたものに関するユーティリティ
installer: システムソフトウェア/パッケージインストーラツール

pkgutil

データベース系

  • --pkgs : 今入っているパッケージのIDリスト
    • --pkgs=REGEXP : 正規表現にマッチしたものの出力
      • cf: man 7 re_format
    • --pkgs-plist : plist形式での出力
  • --files PKGID : インストールしたファイルのリストを出力
  • --export-plist : 全情報をplist形式で出力
  • --verify PKGID : パッケージのファイルシステムのパーミッションやフラグの確認
    • cf: man 8 repair_packages
  • --repair PKGID : --verifyの修復版
    • cf: man 8 repair_packages
  • --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は新しく作られるので.は指定できない
  • --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
  • --payload-files : インストールされるファイルの出力

installer

  • -dominfo : インストール先のドメインの表示
    • この場合のドメインはローカルシステムかユーザのホームディレクトリかなど
  • -volinfo : インストール出来るボリュームの表示
  • -pkginfo : インストールされるパッケージのリスト
    • メタパッケージならサブパッケージの出力

アンインストールについて

消したいファイルがわかっている場合

  1. pkgutil --file-info file_pathでpkg-idを取得
    • バージョンによっては古いパッケージのものが出てくるかもしれない
  2. 似たようなパッケージ名が無いか調べる
    • 重複しているのがあるかもしれない
  3. ファイルを消す
    • 長いので以下のコマンド節のものを参考に
  4. パッケージ情報を消す
    • pkgutil --forget PKG-ID

pkgファイルがあるとき

  1. pkgファイルを展開する
    • pkgutil --expand PKG-PATH DIR-PATH
  2. DistributionとかPackageInfoとか見てpkg-idを取得
    • Distribution : pkg-refタグのidプロパティを見るのが良さそう
    • PackageInfo : ルートタグのidentifier プロパティがそれっぽい
  3. 消したいファイルがわかっている時の2に行く

コマンド

  • インストールされているディレクトリを取得
    • pkgutil --pkg-info PKG-ID |grep -e "volume:" -e "location:" | grep -v "(null)" | cut -d' ' -f 2 | paste -s -d "\0" -
      1. pkgutilでPKG-IDに関する情報を取得
      2. volume:location: コマンドが入っている行だけ抽出
      3. volume: /みたいな形式になっているのでcutコマンドで2個目の値だけ取る
        • フォーマットが崩れると死ぬ
      4. 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

参考文献

5
6
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6