6.4. The apt-file Command

Sometimes we refer to a file or a command and you might wonder, in which package it will be found. Fortunately the Debian repositories not only contain information about all the binary packages provided, but also all the files shipped with them. This information is stored in files named Contents-*arch*.gz and Contents-udeb-*arch*.gz. This information is not automatically downloaded by APT. Instead it needs the apt-file update command (from the similar named package) to retrieve the contents of all package sources mentioned in /etc/apt/sources.list. To update the database on a weekly base, the following entry can be added to /etc/crontab if convenient.

  1. @weekly root test -x /usr/bin/apt-file && /usr/bin/apt-file update >> /dev/null 2>&1

After the database has been updated, the command apt-file search *pattern* will list all packages, which contain a filename or path containing the pattern.

  1. $

The command apt-file list *package* will list all files shipped with the package instead.

TIP Listing a package contents and finding a file’s package

Similar to apt-file list the command dpkg -L *package* lists all files, but only for an installed package. To find the package, a local file belongs to, use dpkg -S *file* (see 第 5.4.3 节 “查询 dpkg 的数据库,并检查 .deb 文件”). To list all local files not belonging to any installed package, you might want to take a look at the cruft or the cruft-ng package.