Difference between revisions of "Pkgfile"

From ArchWiki
Jump to: navigation, search
("Command not found" hook: merged a sentence about speed from https://wiki.archlinux.org/index.php?title=Bash from "command not found hook" section, added link to official repositories)
m (See also: rm section - Bash#The_"command_not_found"_hook just links here now)
Line 69: Line 69:
Written in [[wikipedia:C++|C++]], the ''command-not-found'' package is also much faster then ''pkgfile''<nowiki>'</nowiki>s Bash scripts.
Written in [[wikipedia:C++|C++]], the ''command-not-found'' package is also much faster then ''pkgfile''<nowiki>'</nowiki>s Bash scripts.
==See also==
* [[Bash#The_"command_not_found"_hook]] - Section comparing {{Pkg|pkgfile}} and {{AUR|command-not-found}}

Revision as of 07:35, 23 February 2014

zh-CN:Pkgfile pkgfile is a tool that tells you which package owns a specified file or which files a given package provides.

You can install pkgfile from the official repositories, or pkgfile-gitAUR from the AUR.

Then update the file database:

# pkgfile --update


Example to search for a package that contains a file named "makepkg":

$ pkgfile makepkg

So your searched file is in the pacman package from the [core] repository.

Another example to list all files provided by the archlinux-keyring package from the [core] repository:

$ 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" hook

pkgfile includes a "command not found" hook that will automatically search the official repositories, if you enter an unrecognized command. Then it will display something like this:

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

To enable it in all children shells, you need to source the hook from one of your shell initialization files.

source /usr/share/doc/pkgfile/command-not-found.bash
  • Example for Zsh:
source /usr/share/doc/pkgfile/command-not-found.zsh

An alternative "command not found" hook is also provided by the AUR package command-not-foundAUR, which will generate an output like the following:

$ 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 ]

for it to work, add the following to a zshrc:

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

Written in C++, the command-not-found package is also much faster then pkgfile's Bash scripts.