The apt-file
command can be used to look up which package provides a given file. You need to run apt-file update
so that it can download the file listing, and:
$ apt-file update
apt-file is now using the user's cache directory.
If you want to switch back to the system-wide cache directory,
run 'apt-file purge'
Downloading complete file http://jp.archive.ubuntu.com/ubuntu/dists/xenial/Contents-amd64.gz
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
9 31.7M 9 2927k 0 0 282k 0 0:01:54 0:00:10 0:01:44 481k
So Contents-amd64.gz
is a 31 MB file after compression. Opening it in Vim, I see it has 5400831 lines, with about 30 lines in this header:
This file maps each file available in the Ubuntu
system to the package from which it originates. It includes packages
from the DIST distribution for the ARCH architecture.
You can use this list to determine which package contains a specific
file, or whether or not a specific file is available. The list is
updated weekly, each architecture on a different day.
When a file is contained in more than one package, all packages are
listed. When a directory is contained in more than one package, only
the first is listed.
The best way to search quickly for a file is with the Unix `grep'
utility, as in `grep <regular expression> CONTENTS':
$ grep nose Contents
etc/nosendfile net/sendfile
usr/X11R6/bin/noseguy x11/xscreensaver
usr/X11R6/man/man1/noseguy.1x.gz x11/xscreensaver
usr/doc/examples/ucbmpeg/mpeg_encode/nosearch.param graphics/ucbmpeg
usr/lib/cfengine/bin/noseyparker admin/cfengine
This list contains files in all packages, even though not all of the
packages are installed on an actual system at once. If you want to
find out which packages on an installed Debian system provide a
particular file, you can use `dpkg --search <filename>':
$ dpkg --search /usr/bin/dselect
dpkg: /usr/bin/dselect
FILE LOCATION
So, we have:
5.4 million files, give or take a few.