124

How do I get a list of files that were or will-be installed when I apt-get a package? Conversely, can I find what package(s) caused a particular file to be installed?

2

4 Answers 4

169

Note: in the following commands, a command beginning with 'root#' means it needs to be run as root.

To find which files were installed by a package, use dpkg -L:

$ dpkg -L $package

apt-file can tell you which files will be installed by a package before installing it:

root# apt-get install apt-file
root# apt-file update
$ apt-file list $package

Or if you have the package as a .deb file locally already, you can run dpkg on it:

$ dpkg --contents $package.deb

To find which package provides a file that is already on your system, use:

$ dpkg -S /path/to/file

To find which package provides a file that is not currently on your system, use apt-file again:

$ apt-file search /path/to/file
9
  • 10
    Keep in mind that while this will get you most of what you need it will not give you everything. Several packages create configuration files as part of their setup scripts. These files will not be reported by dpkg.
    – Zoredache
    Dec 23, 2009 at 17:33
  • 2
    The dollar is meant to be understood as a variable, meaning you need to replace $package with the actual name of the package.
    – raphink
    Jan 15, 2017 at 23:37
  • 1
    conffiles of a package (if any) are listed by command dpkg --status $package. For the reverse operation use grep $filename /var/lib/dpkg/info/*.conffiles.
    – Uwe Geuder
    Mar 8, 2018 at 17:38
  • 1
    bit late Q - - what does sudo apt-file update do ??
    – samshers
    Aug 21, 2020 at 10:01
  • 1
    @samshers, apt-file update command populates the db which apt-file uses for searches. Oct 28, 2020 at 19:49
4
dpkg -S /path/to/file/in/question

As far as I'm concerned, dpkg is the low-level tool that apt-get depends on.

2
  • Yes, dpkg is the command that adds and removes software and files from you mcomputer. apt (incl. Apt-get, aptitude, synaptic, etc.) is the programme that calls dpkg May 9, 2010 at 12:06
  • It can be done with some creative piping from apt-get though, see my answer below :)
    – linuxgeek
    Jan 11 at 5:24
3

Here is a function that should do it for you without the need to downloading the package to disk.

apt_list () 
{ 
    local packages=("$@");
    for pkg in $(seq 0 1 $((${#packages[@]}-1)));
    do
        echo -e "\n#### ${packages[$pkg]} ####\n";
        apt-get download -o Dir::Cache::archives="./" --print-uris ${packages[$pkg]} | awk -F\' '{print $2}' | xargs -I '{}' curl -skL '{}' | dpkg-deb -c /dev/stdin | perl -ne 's,(:\d\d )[.]/,$1/,g;print';
        echo;
    done
}

Then use apt_list <package name1> [package name 2]

e.g. apt_list curl wget

As for reverse checking files from packages apt-file would be the best bet.

2

If you have installed dlocate, you can use dlocate -L the same way as dpkg -L. It works exactly the same in this case, but has a number of other options.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.