dpkg Debian package tool

Version 1.22.22 · source

Start here

sudo dpkg -i <file.deb>
Install a package file
dpkg -l '<pattern>'
List matching packages
dpkg -L <pkg>
Files a package installed
dpkg -S <path>
Which package owns this file
dpkg -s <pkg>
Status and details
sudo dpkg -r <pkg>
Remove, keep config
sudo dpkg -P <pkg>
Purge incl. config
dpkg-deb -I <file.deb>
Inspect a .deb

Concepts

  1. .deb file ar archive
  2. Unpacked files placed
  3. Installed maintainer scripts run
  4. Removed config kept (rc)
  5. Purged config gone

Install and remove

sudo dpkg -i <file.deb>
Install or upgrade from a file
sudo dpkg -i <dir>/*.deb
Install several files at once
sudo dpkg -R <dir>
Install every .deb in a directory
sudo dpkg -r <pkg>
Remove, keep config files
sudo dpkg -P <pkg>
Purge: remove with config files
sudo dpkg --configure -a
Finish interrupted configuration
Run this after an aborted install; then sudo apt -f install fixes missing dependencies.
sudo dpkg-reconfigure <pkg>
Rerun a package's configuration questions
Part of debconf; may need installing.
sudo dpkg --configure <pkg>
Configure one unpacked package
sudo dpkg --unpack <file.deb>
Unpack without configuring
sudo dpkg -i --force-depends <file.deb>
Install despite unmet dependencies
Leaves the system inconsistent; use only to unblock a repair.
sudo dpkg -i -E <file.deb>
Skip if same version is installed
sudo dpkg -i -G <file.deb>
Refuse to downgrade
dpkg --force-help
List all --force- options

Query installed

dpkg -l
List all packages
dpkg -l '<pattern>'
List packages matching a glob
dpkg -s <pkg>
Show status, version, depends
dpkg -L <pkg>
List files owned by a package
dpkg -S <path>
Find the package owning a file
dpkg -l | grep ^ii
Only installed packages
dpkg -l | grep ^rc
Removed packages with config left
dpkg -C
Audit for half-installed packages
dpkg -V [<pkg>]
Verify installed files against the database
dpkg --print-architecture
Native architecture
dpkg --print-foreign-architectures
Enabled extra architectures
dpkg --add-architecture <arch>
Enable a foreign architecture
Run apt update afterwards.
dpkg --compare-versions <a> lt <b>
Test version order (exit code)

dpkg-query

dpkg-query -W <pkg>
Package and version
dpkg-query -W -f='${Package} ${Version}\n'
Custom output for all packages
dpkg-query -W -f='${Installed-Size}\t${Package}\n' | sort -n
Largest packages last
dpkg-query -W -f='${Status}\n' <pkg>
Raw status string
dpkg-query -l '<pattern>'
Same as dpkg -l
dpkg-query --control-list <pkg>
List maintainer scripts
dpkg-query --control-show <pkg> <file>
Print a control file

Holds and selections

echo '<pkg> hold' | sudo dpkg --set-selections
Hold a package at its version
echo '<pkg> install' | sudo dpkg --set-selections
Release a hold
dpkg --get-selections
List selections
dpkg --get-selections | grep hold
Show held packages
dpkg --get-selections > <file>
Save the package list
sudo dpkg --set-selections < <file>
Restore a saved list
Then run sudo apt-get dselect-upgrade to apply it.
apt-mark hold <pkg>
apt's equivalent of a hold

Inspect .deb files

dpkg-deb -I <file.deb>
Show control info
dpkg-deb -c <file.deb>
List contained files
dpkg-deb -W <file.deb>
Name and version only
dpkg-deb -f <file.deb> <field>
Print one control field
dpkg-deb -x <file.deb> <dir>
Extract files without installing
dpkg-deb -e <file.deb> <dir>
Extract control files and scripts
dpkg-deb -R <file.deb> <dir>
Extract files and control together
dpkg-deb -b <dir> <file.deb>
Build a .deb from a tree
The tree needs a DEBIAN/control file.
dpkg --contents <file.deb>
Same as dpkg-deb -c

Divert and override

dpkg-divert --list
List diversions
sudo dpkg-divert --add --rename <path>
Move a file aside for upgrades
sudo dpkg-divert --remove --rename <path>
Undo a diversion
dpkg-statoverride --list
List owner/mode overrides
sudo dpkg-statoverride --update --add <user> <group> <mode> <path>
Set owner and mode persistently

Recipes

Which package owns this command
# resolve symlinks firstdpkg -S "$(readlink -f "$(command -v <cmd>)")"
Clean up removed packages' config
dpkg -l | awk '/^rc/ {print $2}'dpkg -l | awk '/^rc/ {print $2}' | xargs sudo dpkg -P
Look inside a download before installing
dpkg-deb -I <file.deb>dpkg-deb -c <file.deb>dpkg-deb -x <file.deb> /tmp/peek
Recover from a broken install
sudo dpkg --configure -asudo apt -f installdpkg -C