APT and DPKG Guide (Debian/Ubuntu)
Introduction
apt and dpkg are core tools for package management on Debian and Ubuntu systems. apt update refreshes the package index from configured repositories, ensuring you have the latest package information. dpkg manages .deb packages, allowing direct installation, removal, querying, or identifying file ownership. This guide covers using apt update and dpkg, with use cases like system updates, manual .deb installation, searching for packages, finding file ownership, adding/removing external repositories, and determining which repository provides a package.
What are APT and DPKG?
- APT (Advanced Package Tool): A high-level package manager that simplifies installing, updating, searching, and removing software.
apt updatefetches package lists, while commands likeapt install,apt upgrade, orapt searchhandle package operations. - DPKG: A low-level tool for managing
.debpackages, used for tasks like installing local.debfiles, querying installed packages, removing packages, or identifying file ownership.
Together, they provide robust package management for Debian/Ubuntu systems.
Prerequisites
- Debian/Ubuntu: Version 20.04+.
- Root Access: Use
sudofor most commands. - Internet Access: Required for
apt updateand repository operations. - Tools:
apt,dpkg, andgnupgare pre-installed on Debian/Ubuntu.
Verify tools:
apt --version
dpkg --version
gpg --version
Critical Warning: Backup Before Changes
/etc/) before proceeding.How to Use APT Update and DPKG
1. Update Package Lists with apt update
apt update refreshes the package index from repositories listed in /etc/apt/sources.list and /etc/apt/sources.list.d/. Run this before installing or upgrading packages.
sudo apt update
Example output:
Hit:1 http://deb.debian.org/debian bullseye InRelease
Get:2 http://deb.debian.org/debian-security bullseye-security InRelease [48.4 kB]
Fetched 48.4 kB in 1s (45.2 kB/s)
Reading package lists... Done
Building dependency tree... Done
All packages are up to date.
Note: If you see errors (e.g., 404 Not Found), check /etc/apt/sources.list or /etc/apt/sources.list.d/ for invalid URLs.
2. Add an External Repository
To install software not in default repositories (e.g., Docker), add a third-party repository to /etc/apt/sources.list or /etc/apt/sources.list.d/. Often, you need to add a GPG key for security.
Example (add Docker repository):
# Add Docker's GPG key
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# Add Docker repository
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian bullseye stable" | sudo tee /etc/apt/sources.list.d/docker.list
# Update package lists
sudo apt update
Verify:
cat /etc/apt/sources.list.d/docker.list
Note: Always verify the GPG key and repository URL to avoid security risks.
3. Remove an External Repository
To remove a repository, delete its entry from /etc/apt/sources.list or its file in /etc/apt/sources.list.d/, and optionally remove the GPG key.
Example (remove Docker repository):
# Remove repository file
sudo rm /etc/apt/sources.list.d/docker.list
# Remove GPG key (optional)
sudo rm /usr/share/keyrings/docker-archive-keyring.gpg
# Update package lists
sudo apt update
Verify:
ls /etc/apt/sources.list.d/
Note: Edit /etc/apt/sources.list with sudo nano if the repository is listed there instead.
4. Determine Which Repository Provides a Package
Use apt-cache policy to find which repository provides a package and its available versions.
apt-cache policy <package-name>
Example (check docker-ce):
apt-cache policy docker-ce
Example output:
docker-ce:
Installed: (none)
Candidate: 5:24.0.7-1~debian.11~bullseye
Version table:
5:24.0.7-1~debian.11~bullseye 500
500 https://download.docker.com/linux/debian bullseye/stable amd64 Packages
Note: Run sudo apt update first to ensure the package cache is current.
5. Search for a Package
Use apt search or apt-cache search to find packages by name or description.
Using
apt search(user-friendly, sorted):apt search <keyword>Example (search for
vim):apt search vimExample output:
Sorting... Done Full Text Search... Done vim/bullseye 2:8.2.2434-3+deb11u1 amd64 Vi IMproved - enhanced vi editor vim-tiny/bullseye 2:8.2.2434-3+deb11u1 amd64 Vi IMproved - enhanced vi editor (tiny version)Using
apt-cache search(detailed, unsorted):apt-cache search <keyword>Example (search for
nginx):apt-cache search nginxExample output:
nginx - small, powerful, scalable web/proxy server nginx-common - small, powerful, scalable web/proxy server - common files
Note: Run sudo apt update first.
6. Find the Package Owning a File
Use dpkg -S to identify which package installed a file.
dpkg -S <file-path>
Example (find package for /usr/bin/vim):
dpkg -S /usr/bin/vim
Example output:
vim: /usr/bin/vim
Note: If the file isn’t found, it may not belong to a package.
7. Upgrade Installed Packages
Upgrade installed packages to their latest versions:
- Safe Upgrade (avoids removing packages):
sudo apt upgrade - Full Upgrade (may remove packages):
sudo apt full-upgrade
Example:
sudo apt update
sudo apt upgrade
8. Install a Package with apt
Install a package from repositories:
sudo apt install <package-name>
Example (install vim):
sudo apt install vim
9. Install a Local .deb File with dpkg
Install a downloaded .deb file:
sudo dpkg -i ./package.deb
Example (install google-chrome-stable_current_amd64.deb):
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo dpkg -i google-chrome-stable_current_amd64.deb
Note: If dependencies are missing, fix with:
sudo apt install -f
10. Query Installed Packages with dpkg
Check if a package is installed or get details:
dpkg -l | grep <package-name>
dpkg -s <package-name>
Example (check vim):
dpkg -l | grep vim
dpkg -s vim
List files installed by a package:
dpkg -L <package-name>
Example:
dpkg -L vim
11. Remove or Purge Packages with dpkg
- Remove (keeps configuration files):
sudo dpkg -r <package-name> - Purge (removes configuration files):
sudo dpkg --purge <package-name>
Example (remove vim):
sudo dpkg -r vim
12. Fix Broken Dependencies
If dpkg or apt reports broken dependencies:
sudo apt install -f
Examples
Example 1: Update and Upgrade System
Update package lists and upgrade packages:
# Update package lists
sudo apt update
# Upgrade packages
sudo apt upgrade
Output:
Reading package lists... Done
Building dependency tree... Done
Calculating upgrade... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Example 2: Add an External Repository
Add the Docker repository:
# Add GPG key
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# Add repository
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian bullseye stable" | sudo tee /etc/apt/sources.list.d/docker.list
# Update package lists
sudo apt update
Output (after apt update):
Get:1 https://download.docker.com/linux/debian bullseye/stable amd64 Packages [24.8 kB]
Fetched 24.8 kB in 1s (30.2 kB/s)
Reading package lists... Done
Example 3: Remove an External Repository
Remove the Docker repository:
# Remove repository file
sudo rm /etc/apt/sources.list.d/docker.list
# Remove GPG key
sudo rm /usr/share/keyrings/docker-archive-keyring.gpg
# Update package lists
sudo apt update
Output:
Reading package lists... Done
Building dependency tree... Done
All packages are up to date.
Example 4: Determine Which Repository Provides a Package
Check the repository for docker-ce:
apt-cache policy docker-ce
Output:
docker-ce:
Installed: (none)
Candidate: 5:24.0.7-1~debian.11~bullseye
Version table:
5:24.0.7-1~debian.11~bullseye 500
500 https://download.docker.com/linux/debian bullseye/stable amd64 Packages
Example 5: Search for a Package
Search for a package:
apt search vim
Output:
Sorting... Done
Full Text Search... Done
vim/bullseye 2:8.2.2434-3+deb11u1 amd64
Vi IMproved - enhanced vi editor
vim-tiny/bullseye 2:8.2.2434-3+deb11u1 amd64
Vi IMproved - enhanced vi editor (tiny version)
Example 6: Find Which Package Owns a File
Identify the package for a file:
dpkg -S /usr/bin/vim
Output:
vim: /usr/bin/vim
Example 7: Install a Local .deb File
Install a .deb file and fix dependencies:
# Download a .deb file
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
# Install with dpkg
sudo dpkg -i google-chrome-stable_current_amd64.deb
# Fix dependencies
sudo apt install -f
Output (if dependencies are missing):
dpkg: dependency problems prevent configuration of google-chrome-stable:
google-chrome-stable depends on libatk1.0-0 (>= 2.32.0); however:
Package libatk1.0-0 is not installed.
...
sudo apt install -f
...
Setting up libatk1.0-0 (2.36.0-2) ...
Setting up google-chrome-stable (114.0.5735.198-1) ...
Example 8: Query and Remove a Package
Check and remove a package:
# Check package status
dpkg -l | grep vim
dpkg -s vim
# List package files
dpkg -L vim
# Remove package
sudo dpkg -r vim
Output (query):
ii vim 2:8.2.2434-3+deb11u1 amd64 Vi IMproved - enhanced vi editor
Example 9: Fix Broken Dependencies
If dpkg -i fails:
sudo dpkg -i package.deb
# Errors about missing dependencies
sudo apt install -f
Variants
Adding and Using an External Repository
Add a repository to install specific software (e.g., Docker):
# Add GPG key
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# Add repository
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian bullseye stable" | sudo tee /etc/apt/sources.list.d/docker.list
# Update and install
sudo apt update
sudo apt install docker-ce
Removing an External Repository
Remove a repository and clean up:
# Remove repository file
sudo rm /etc/apt/sources.list.d/docker.list
# Remove GPG key
sudo rm /usr/share/keyrings/docker-archive-keyring.gpg
# Update package lists
sudo apt update
Using dpkg to Reconfigure Packages
Reconfigure a package’s settings:
sudo dpkg-reconfigure <package-name>
Example (reconfigure tzdata):
sudo dpkg-reconfigure tzdata
Command Breakdown
- apt update: Refreshes package index from repositories.
- apt search: Searches for packages by name or description.
- apt-cache search: Detailed package search (unsorted).
- apt-cache policy: Shows which repository provides a package.
- apt upgrade/full-upgrade: Upgrades installed packages.
- apt install: Installs packages or fixes dependencies.
- dpkg -i: Installs a local
.debfile. - dpkg -S: Finds the package owning a file.
- dpkg -r/–purge: Removes or purges packages.
- dpkg -l/-s/-L: Queries installed packages or their files.
- apt install -f: Resolves broken dependencies.
Use Cases
- System Maintenance: Regular
apt update && apt upgradefor updates. - Custom Software: Add external repositories for software like Docker.
- Package Discovery: Use
apt searchorapt-cache policyto find packages and their sources. - File Ownership: Use
dpkg -Sto troubleshoot file origins. - Manual Installation: Use
dpkg -ifor.debfiles not in repositories. - Debugging: Query packages with
dpkg -lordpkg -s.
Pro Tips
- Verify Repository Sources: Check GPG keys and URLs for security when adding repositories.
- Cache Cleaning: Free disk space with
sudo apt autocleanandsudo apt autoremove. - Dry Run: Use
apt upgrade --dry-runto preview changes. - Force Options with dpkg: Use
dpkg -i --force-dependscautiously for missing dependencies. - Backup APT Sources: Save
/etc/apt/sources.listand/etc/apt/sources.list.d/before changes.
Troubleshooting
- 404 Errors in apt update: Check
/etc/apt/sources.listor/etc/apt/sources.list.d/:sudo nano /etc/apt/sources.list ls /etc/apt/sources.list.d/ sudo apt update - Package Not Found in apt search: Run
sudo apt updateand verify repositories. - apt-cache policy Shows No Repository: Ensure the package is available in a configured repository.
- dpkg -S Returns Nothing: The file may not belong to a package.
- Broken Dependencies: Run
sudo apt install -fafterdpkg -i. - Package Conflicts: Remove conflicting packages with
sudo dpkg --purge <package-name>. - Permission Issues: Use
sudoforaptanddpkgcommands. - Check Logs: View
/var/log/dpkg.logor/var/log/apt/history.log.
Resources
Manage packages efficiently with apt update and dpkg for a robust Debian/Ubuntu system!