dpkg Package Manager

dpkg - Low-level package manager for Debian-based systems.


Basic Commands

 1# Install package
 2sudo dpkg -i package.deb
 3
 4# Remove package (keep config)
 5sudo dpkg -r package-name
 6
 7# Purge package (remove config)
 8sudo dpkg -P package-name
 9
10# List installed packages
11dpkg -l
12
13# List specific package
14dpkg -l package-name
15
16# Show package info
17dpkg -s package-name
18
19# List files in package
20dpkg -L package-name
21
22# Find which package owns a file
23dpkg -S /path/to/file
24
25# Extract package contents
26dpkg -x package.deb /output/dir
27
28# Extract control files
29dpkg -e package.deb /output/dir

Query Packages

 1# List all installed packages
 2dpkg -l
 3
 4# List with pattern
 5dpkg -l | grep pattern
 6
 7# Show package status
 8dpkg -s package-name
 9
10# List files installed by package
11dpkg -L package-name
12
13# Search for file owner
14dpkg -S /usr/bin/vim
15
16# List package contents (not installed)
17dpkg -c package.deb
18
19# Show package info (not installed)
20dpkg -I package.deb

Package Status

 1# Check if package is installed
 2dpkg -l package-name | grep ^ii
 3
 4# Show package version
 5dpkg -l package-name | awk '{print $3}'
 6
 7# List configuration files
 8dpkg-query -W -f='${Conffiles}\n' package-name
 9
10# Verify installed files
11dpkg -V package-name

Fix Broken Packages

 1# Reconfigure all packages
 2sudo dpkg --configure -a
 3
 4# Force reconfigure specific package
 5sudo dpkg-reconfigure package-name
 6
 7# Force install (dangerous!)
 8sudo dpkg -i --force-all package.deb
 9
10# Fix dependencies
11sudo apt install -f

Build Packages

 1# Build from source directory
 2dpkg-buildpackage -us -uc
 3
 4# Build binary only
 5dpkg-buildpackage -b -us -uc
 6
 7# Build source only
 8dpkg-buildpackage -S -us -uc
 9
10# Sign package
11dpkg-buildpackage -rfakeroot

Extract and Repack

 1# Extract .deb
 2mkdir package
 3dpkg-deb -x package.deb package/
 4dpkg-deb -e package.deb package/DEBIAN
 5
 6# Modify contents
 7# ... edit files ...
 8
 9# Repack
10dpkg-deb -b package new-package.deb
11
12# Check package
13lintian new-package.deb

Package Information

 1# Show control file
 2dpkg -I package.deb
 3
 4# Show package description
 5dpkg -s package-name | grep Description -A 10
 6
 7# Show dependencies
 8dpkg -s package-name | grep Depends
 9
10# Show package size
11dpkg -s package-name | grep Installed-Size
12
13# Show all package fields
14dpkg -s package-name

Database Management

 1# Database location
 2ls /var/lib/dpkg/
 3
 4# Status file
 5cat /var/lib/dpkg/status
 6
 7# Available packages
 8cat /var/lib/dpkg/available
 9
10# Backup database
11sudo cp -r /var/lib/dpkg /var/lib/dpkg.backup
12
13# Restore database
14sudo cp -r /var/lib/dpkg.backup /var/lib/dpkg

Logs

 1# dpkg log
 2cat /var/log/dpkg.log
 3
 4# Recently installed
 5grep " install " /var/log/dpkg.log | tail -20
 6
 7# Recently removed
 8grep " remove " /var/log/dpkg.log | tail -20
 9
10# Recently upgraded
11grep " upgrade " /var/log/dpkg.log | tail -20

Advanced Usage

 1# Force options
 2--force-depends       # Ignore dependency problems
 3--force-conflicts     # Install conflicting packages
 4--force-overwrite     # Overwrite files from other packages
 5--force-downgrade     # Install older version
 6--force-all           # Force everything (dangerous!)
 7
 8# Example
 9sudo dpkg -i --force-overwrite package.deb
10
11# Dry run
12sudo dpkg --dry-run -i package.deb

dpkg-query

 1# List packages by pattern
 2dpkg-query -l '*python*'
 3
 4# Show package status
 5dpkg-query -W -f='${Status}\n' package-name
 6
 7# Show version
 8dpkg-query -W -f='${Version}\n' package-name
 9
10# Custom format
11dpkg-query -W -f='${Package}\t${Version}\t${Status}\n'
12
13# List all packages with versions
14dpkg-query -W -f='${Package}\t${Version}\n' | column -t

dpkg-deb

 1# Extract package
 2dpkg-deb -x package.deb output-dir
 3
 4# Extract control files
 5dpkg-deb -e package.deb output-dir
 6
 7# Show package info
 8dpkg-deb -I package.deb
 9
10# Show package contents
11dpkg-deb -c package.deb
12
13# Build package
14dpkg-deb -b package-dir output.deb
15
16# Check package
17dpkg-deb --info package.deb

Create Simple Package

 1# Create package structure
 2mkdir -p mypackage/DEBIAN
 3mkdir -p mypackage/usr/local/bin
 4
 5# Create control file
 6cat > mypackage/DEBIAN/control <<EOF
 7Package: mypackage
 8Version: 1.0
 9Section: utils
10Priority: optional
11Architecture: all
12Maintainer: Your Name <email@example.com>
13Description: My custom package
14 Long description here
15EOF
16
17# Add files
18cp myscript.sh mypackage/usr/local/bin/
19chmod +x mypackage/usr/local/bin/myscript.sh
20
21# Build package
22dpkg-deb -b mypackage mypackage_1.0_all.deb
23
24# Install
25sudo dpkg -i mypackage_1.0_all.deb

Troubleshooting

 1# Lock file issues
 2sudo rm /var/lib/dpkg/lock
 3sudo rm /var/lib/dpkg/lock-frontend
 4sudo dpkg --configure -a
 5
 6# Corrupted package database
 7sudo rm /var/lib/dpkg/updates/*
 8sudo dpkg --configure -a
 9
10# Force remove broken package
11sudo dpkg --remove --force-remove-reinstreq package-name
12
13# Reinstall package
14sudo apt install --reinstall package-name

Useful Scripts

 1# List largest installed packages
 2dpkg-query -W -f='${Installed-Size}\t${Package}\n' | sort -rn | head -20
 3
 4# List packages by install date
 5grep " install " /var/log/dpkg.log | tail -50
 6
 7# Find orphaned packages
 8deborphan
 9
10# Clean up old config files
11dpkg -l | grep ^rc | awk '{print $2}' | xargs sudo dpkg --purge

Related Snippets