APT Package Manager (Debian/Ubuntu)

APT (Advanced Package Tool) for Debian and Ubuntu-based systems.


Basic Commands

 1# Update package list
 2sudo apt update
 3
 4# Upgrade all packages
 5sudo apt upgrade
 6
 7# Full upgrade (may remove packages)
 8sudo apt full-upgrade
 9sudo apt dist-upgrade  # Older command
10
11# Install package
12sudo apt install package-name
13
14# Install specific version
15sudo apt install package-name=version
16
17# Install multiple packages
18sudo apt install package1 package2 package3
19
20# Install without prompts
21sudo apt install -y package-name
22
23# Remove package
24sudo apt remove package-name
25
26# Remove package and config files
27sudo apt purge package-name
28
29# Remove unused dependencies
30sudo apt autoremove
31
32# Clean package cache
33sudo apt clean
34sudo apt autoclean

Search and Information

 1# Search for package
 2apt search package-name
 3apt-cache search package-name
 4
 5# Show package info
 6apt show package-name
 7apt-cache show package-name
 8
 9# List installed packages
10apt list --installed
11
12# List upgradable packages
13apt list --upgradable
14
15# Show package dependencies
16apt-cache depends package-name
17
18# Show reverse dependencies
19apt-cache rdepends package-name
20
21# Check if package is installed
22dpkg -l | grep package-name
23apt list --installed | grep package-name

Package Sources

Add Repository

 1# Add PPA (Ubuntu)
 2sudo add-apt-repository ppa:user/ppa-name
 3sudo apt update
 4
 5# Remove PPA
 6sudo add-apt-repository --remove ppa:user/ppa-name
 7
 8# Add repository manually
 9echo "deb http://repository.url/ distribution component" | sudo tee /etc/apt/sources.list.d/repo.list
10
11# Add GPG key
12wget -qO - https://repository.url/key.gpg | sudo apt-key add -
13
14# Or with newer method
15wget -qO - https://repository.url/key.gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/repo.gpg

sources.list

1# Edit sources
2sudo nano /etc/apt/sources.list
3
4# Example entry:
5# deb http://archive.ubuntu.com/ubuntu/ jammy main restricted
6# deb-src http://archive.ubuntu.com/ubuntu/ jammy main restricted
7
8# List repositories
9grep -r --include '*.list' '^deb ' /etc/apt/sources.list /etc/apt/sources.list.d/

Hold/Unhold Packages

1# Hold package (prevent upgrade)
2sudo apt-mark hold package-name
3
4# Unhold package
5sudo apt-mark unhold package-name
6
7# List held packages
8apt-mark showhold

Download Packages

 1# Download package without installing
 2apt download package-name
 3
 4# Download source package
 5apt source package-name
 6
 7# Download and extract source
 8apt source --compile package-name
 9
10# Show download URLs
11apt-get --print-uris install package-name

Fix Broken Packages

 1# Fix broken dependencies
 2sudo apt --fix-broken install
 3sudo apt -f install
 4
 5# Reconfigure packages
 6sudo dpkg --configure -a
 7
 8# Force reinstall
 9sudo apt install --reinstall package-name
10
11# Clean and update
12sudo apt clean
13sudo apt update
14sudo apt upgrade

APT vs APT-GET

 1# Modern (apt)
 2sudo apt update
 3sudo apt install package-name
 4sudo apt remove package-name
 5sudo apt search package-name
 6
 7# Traditional (apt-get)
 8sudo apt-get update
 9sudo apt-get install package-name
10sudo apt-get remove package-name
11apt-cache search package-name
12
13# apt is recommended for interactive use
14# apt-get is more stable for scripts

Install from .deb File

 1# Install .deb package
 2sudo dpkg -i package.deb
 3
 4# Fix dependencies after dpkg
 5sudo apt install -f
 6
 7# Or use apt directly (recommended)
 8sudo apt install ./package.deb
 9
10# Remove package installed from .deb
11sudo apt remove package-name

Build from Source

 1# Install build dependencies
 2sudo apt build-dep package-name
 3
 4# Or manually install common build tools
 5sudo apt install build-essential
 6
 7# Download source
 8apt source package-name
 9cd package-name-version
10
11# Build
12dpkg-buildpackage -us -uc
13
14# Install built package
15sudo dpkg -i ../package-name_version_arch.deb

Unattended Upgrades

 1# Install
 2sudo apt install unattended-upgrades
 3
 4# Configure
 5sudo dpkg-reconfigure unattended-upgrades
 6
 7# Edit config
 8sudo nano /etc/apt/apt.conf.d/50unattended-upgrades
 9
10# Test
11sudo unattended-upgrades --dry-run --debug

APT Configuration

 1# Configuration file
 2sudo nano /etc/apt/apt.conf
 3
 4# Example configurations:
 5# APT::Get::Assume-Yes "true";
 6# APT::Install-Recommends "false";
 7# APT::Install-Suggests "false";
 8
 9# Per-command config
10sudo apt -o APT::Install-Recommends=false install package-name

Cache Management

 1# Show cache statistics
 2apt-cache stats
 3
 4# Cache location
 5ls /var/cache/apt/archives/
 6
 7# Clean cache (remove downloaded packages)
 8sudo apt clean
 9
10# Clean old packages only
11sudo apt autoclean
12
13# Show cache size
14du -sh /var/cache/apt/archives/

Logs

 1# View installation history
 2cat /var/log/apt/history.log
 3
 4# View detailed logs
 5cat /var/log/apt/term.log
 6
 7# View dpkg log
 8cat /var/log/dpkg.log
 9
10# Recently installed packages
11grep " install " /var/log/dpkg.log | tail -20

Common Packages

 1# Development tools
 2sudo apt install build-essential git curl wget
 3
 4# Python development
 5sudo apt install python3 python3-pip python3-venv
 6
 7# Node.js
 8sudo apt install nodejs npm
 9
10# Docker
11sudo apt install docker.io docker-compose
12
13# System tools
14sudo apt install htop tmux vim neovim
15
16# Network tools
17sudo apt install net-tools dnsutils curl wget

Troubleshooting

 1# Lock file issues
 2sudo rm /var/lib/apt/lists/lock
 3sudo rm /var/cache/apt/archives/lock
 4sudo rm /var/lib/dpkg/lock*
 5sudo dpkg --configure -a
 6sudo apt update
 7
 8# Hash sum mismatch
 9sudo rm -rf /var/lib/apt/lists/*
10sudo apt clean
11sudo apt update
12
13# Broken packages
14sudo apt --fix-broken install
15sudo dpkg --configure -a
16sudo apt autoremove
17
18# Check for errors
19sudo apt check

Security Updates

1# List security updates
2sudo apt list --upgradable | grep -i security
3
4# Install security updates only
5sudo apt upgrade -s | grep -i security
6
7# Automatic security updates
8sudo apt install unattended-upgrades apt-listchanges

Useful Aliases

1# Add to ~/.bashrc
2alias update='sudo apt update && sudo apt upgrade'
3alias install='sudo apt install'
4alias remove='sudo apt remove'
5alias search='apt search'
6alias clean='sudo apt autoremove && sudo apt clean'

Create and Publish Debian Package

Package Structure

 1mypackage-1.0/
 2β”œβ”€β”€ DEBIAN/
 3β”‚   β”œβ”€β”€ control
 4β”‚   β”œβ”€β”€ postinst
 5β”‚   β”œβ”€β”€ prerm
 6β”‚   └── copyright
 7β”œβ”€β”€ usr/
 8β”‚   β”œβ”€β”€ bin/
 9β”‚   β”‚   └── myapp
10β”‚   β”œβ”€β”€ share/
11β”‚   β”‚   β”œβ”€β”€ doc/
12β”‚   β”‚   β”‚   └── mypackage/
13β”‚   β”‚   β”‚       └── README.md
14β”‚   β”‚   └── man/
15β”‚   β”‚       └── man1/
16β”‚   β”‚           └── myapp.1.gz
17β”‚   └── lib/
18β”‚       └── mypackage/
19└── etc/
20    └── mypackage/
21        └── config.conf

DEBIAN/control

 1Package: mypackage
 2Version: 1.0.0
 3Section: utils
 4Priority: optional
 5Architecture: amd64
 6Depends: libc6 (>= 2.34), python3 (>= 3.8)
 7Maintainer: Your Name <email@example.com>
 8Description: Short description
 9 Long description goes here.
10 It can span multiple lines.
11 Each line should start with a space.
12Homepage: https://github.com/username/mypackage

Build Package

 1# Create package structure
 2mkdir -p mypackage-1.0/DEBIAN
 3mkdir -p mypackage-1.0/usr/bin
 4
 5# Add files
 6cp myapp mypackage-1.0/usr/bin/
 7chmod 755 mypackage-1.0/usr/bin/myapp
 8
 9# Create control file
10cat > mypackage-1.0/DEBIAN/control <<EOF
11Package: mypackage
12Version: 1.0.0
13Section: utils
14Priority: optional
15Architecture: amd64
16Maintainer: Your Name <email@example.com>
17Description: My package
18 Long description
19EOF
20
21# Build package
22dpkg-deb --build mypackage-1.0
23
24# This creates: mypackage-1.0.deb
25
26# Check package
27lintian mypackage-1.0.deb

Post-install Script

 1# DEBIAN/postinst
 2#!/bin/bash
 3set -e
 4
 5# Create user
 6if ! id myapp >/dev/null 2>&1; then
 7    useradd -r -s /bin/false myapp
 8fi
 9
10# Create directories
11mkdir -p /var/log/mypackage
12chown myapp:myapp /var/log/mypackage
13
14# Enable service
15systemctl enable mypackage.service
16systemctl start mypackage.service
17
18exit 0
1# Make executable
2chmod 755 DEBIAN/postinst

Publish to PPA (Ubuntu)

 1# Install tools
 2sudo apt install devscripts dput
 3
 4# Create source package
 5cd mypackage-1.0
 6debuild -S -sa
 7
 8# Sign with GPG
 9debsign -k YOUR_GPG_KEY mypackage_1.0.0_source.changes
10
11# Upload to PPA
12dput ppa:username/ppa-name mypackage_1.0.0_source.changes

Publish to Custom Repository

 1# Install reprepro
 2sudo apt install reprepro
 3
 4# Create repository structure
 5mkdir -p /var/www/apt/{conf,dists,pool}
 6
 7# Create conf/distributions
 8cat > /var/www/apt/conf/distributions <<EOF
 9Origin: Your Name
10Label: Your Repository
11Codename: jammy
12Architectures: amd64 arm64
13Components: main
14Description: My custom repository
15SignWith: YOUR_GPG_KEY
16EOF
17
18# Add package to repository
19reprepro -b /var/www/apt includedeb jammy mypackage-1.0.deb
20
21# Serve with nginx
22sudo apt install nginx
23# Configure nginx to serve /var/www/apt
24
25# Users add repository:
26# echo "deb https://apt.example.com jammy main" | sudo tee /etc/apt/sources.list.d/myrepo.list
27# wget -qO - https://apt.example.com/key.gpg | sudo apt-key add -
28# sudo apt update
29# sudo apt install mypackage

Related Snippets