LinuxCommandLibrary

pkgfile

Tool for searching files from packages in the official repositories on arch-based systems.

TLDR

Synchronize the pkgfile database

$ sudo pkgfile --update
copy


Search for a package that owns a specific file
$ pkgfile [filename]
copy


List all files provided by a package
$ pkgfile --list [package]
copy


List executables provided by a package
$ pkgfile --list --binaries [package]
copy


Search for a package that owns a specific file using case-insensitive matching
$ pkgfile --ignorecase [filename]
copy


Search for a package that owns a specific file in the bin or sbin directory
$ pkgfile --binaries [filename]
copy


Search for a package that owns a specific file, displaying the package version
$ pkgfile --verbose [filename]
copy


Search for a package that owns a specific file in a specific repository
$ pkgfile --repo [repository_name] [filename]
copy

SYNOPSIS

Usage: pkgfile [operation] [options] target

DESCRIPTION

pkgfile searches the .files metadata created by repo-add(8) to retrieve file information about packages. By default, the provided target is considered to be a filename and pkgfile will return the package(s) which contain this file. The repos which pkgfile searches is determined by those enabled in /etc/pacman.conf.

OPERATIONS

-l, --list

The target is considered to be a package name rather than a filename, and the contents of the named package are returned. This allows for repo/package style syntax (such as core/pacman) to limit the breadth of the search, but only when --list is used without the --glob or --regex options.

-s, --search

Search for packages containing the provided target. This is the default mode of operation.

-u, --update

Update the stored metadata files. It is recommended to create a daily cron job with this command to ensure accurate results. By default, only repos which are found to be newer on the mirror will be downloaded. Pass this option twice to force all repos to be downloaded.

MATCHING

-b, --binaries

Return only files which are contained within a bin or sbin directory.

-d, --directories

Match directories in search results.

-g, --glob

Enable shell-style glob pattern matching. See glob(7). Note that the shell wildcards * and ? will never match path separators. Thus, this kind of matching is useful for searching for entries within directories, e.g. /usr/bin/*.

-i, --ignorecase

Disable case sensitivity in matching.

-r, --regex

Enable regular expression matching. See pcre(3).

-R REPO, --repo=REPO

Search only the specific repo.

OUTPUT

-0, --null

Delimit output with null bytes rather than newline characters.

-q, --quiet

Output less. This applies to the --list operation.

-v, --verbose

Output more. This applies to the --search operation.

-w, --raw

Avoid justification of 2 column output.

DOWNLOADING

-z, --compress[=COMPRESSION]

Repack downloaded repos with the optionally supplied compression method, which may be one of none, gzip, bzip2, lzop, lz4, lzma, or xz. If this flag is passed without a compression method, this defaults to gzip. If this flag is not passed at all, no compression will be applied. Applying any form of compression will decrease performance, but may be desirable for disk space concerns.

GENERAL OPTIONS

-C FILE, --config=FILE

Use a config file other than the default of /etc/pacman.conf.

-D DIRECTORY, --cachedir=DIRECTORY

Use a cache path other than the compile-time default.

-h, --help

Print help and exit.

-V, --version

Print the version and exit.

MATCHING HEURISTICS

In --search mode and without the --regex or --glob option, pkgfile will attempt to match the provided target as an exact filename. If the target contains a '/' character, a full path match will be attempted. With --regex and --glob enabled searching, pkgfile will always match against the full pathname.

In --list mode and without the --regex or --glob option, pkgfile will attempt to match the provided target as an exact package name. If the target contains a '/' character, the text before the slash will be assumed to be a repository and the search will be restricted.

COMMAND NOT FOUND HOOKS

/usr/share/doc/pkgfile/command-not-found.bash
/usr/share/doc/pkgfile/command-not-found.zsh
/usr/share/doc/pkgfile/command-not-found.fish

zsh, bash and fish compatible functions which can be included in shell initalization to run pkgfile when an executed command is not found. If the environment variable PKGFILE_PROMPT_INSTALL_MISSING is set, and only one package is found, a prompt to install the package will be shown. NOTE: this feature requires the sudo(8) program, and is currently only supported by the bash implementation.

AUTOMATING UPDATES

pkgfile includes systemd timer and service units to automate periodic updates to the .files DBs. Assuming that pkgfile was built with systemd support, this can be enabled with:

systemctl enable --now pkgfile-update.timer

SEE ALSO

repo-add(8), pcre(3), glob(7), pacman.conf(5)

AUTHOR

Dave Reisner <dreisner@archlinux.org>

Copied to clipboard