# pkgfile (日本語)

pkgfile は特定のファイルを所有しているパッケージはどれか、または特定のパッケージに入っているファイルはどれかを表示するツールです。

公式リポジトリの pkgfile か AUR の pkgfile-git でインストールできます。

インストールしたらファイルデータベースを更新してください:

    # pkgfile --update

#### サンプル:

"makepkg" とう名前のファイルを含んでいるパッケージを検索する例:

    $ pkgfile makepkg

    core/pacman

検索したファイルは [core] リポジトリの pacman パッケージに含まれていることがわかりました。

また、[core] リポジトリの archlinux-keyring パッケージに入っている全てのファイルを表示する例:

    $ pkgfile --list core/archlinux-keyring

    core/archlinux-keyring usr/
    core/archlinux-keyring usr/share/
    core/archlinux-keyring usr/share/pacman/
    core/archlinux-keyring usr/share/pacman/keyrings/
    core/archlinux-keyring usr/share/pacman/keyrings/archlinux-revoked
    core/archlinux-keyring usr/share/pacman/keyrings/archlinux-trusted
    core/archlinux-keyring usr/share/pacman/keyrings/archlinux.gpg

### "Command not found" フック

pkgfile には、不明なコマンドを入力したときに自動で公式リポジトリを検索する "command not found" フックが含まれています。例えば以下のように表示されます:

    $ abiword

    abiword may be found in the following packages:
      extra/abiword 2.8.6-7	usr/bin/abiword

シェルでこのフックを有効にするには、シェルの初期化ファイルにフックを読み込ませる必要があります。

- Bash の例:

    ~/.bashrc

    source /usr/share/doc/pkgfile/command-not-found.bash

- Zsh の例:

    ~/.zshrc

    source /usr/share/doc/pkgfile/command-not-found.zsh

他にも AUR のパッケージ command-not-found によって提供されている "command not found" フックもあり、以下のように出力を生成します:

    $ abiword

    The command 'abiword' is been provided by the following packages:
    abiword (2.8.6-7) from extra
    	[ abiword ]
    abiword (2.8.6-7) from staging
    	[ abiword ]
    abiword (2.8.6-7) from testing
    	[ abiword ]

これを使うには、以下を zshrc に追加して下さい:

    [ -r /etc/profile.d/cnf.sh ] && . /etc/profile.d/cnf.sh

command-not-found パッケージは C++ で書かれているため、pkgfile の Bash スクリプトよりもずっと高速に動作します。

Categories:

- Package development (日本語)
- Package management (日本語)