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
- Bazel Build System
Bazel - Fast, scalable, multi-language build system from Google. Installation 1# β¦ - dpkg Package Manager
dpkg - Low-level package manager for Debian-based systems. Basic Commands 1# β¦ - emerge Package Manager (Gentoo)
emerge (Portage) - Source-based package manager for Gentoo Linux. Basic Commands β¦ - Go Modules & Workspaces
Go modules and workspaces for dependency management. Essential commands for Go β¦ - npm - Node Package Manager
Essential npm commands for Node.js package management. Quick reference for daily β¦ - pacman Package Manager (Arch Linux)
pacman - Package manager for Arch Linux and derivatives (Manjaro, EndeavourOS). β¦ - pip Package Manager (Python)
pip - Package installer for Python. Basic Commands 1# Install package 2pip β¦ - pkg Package Manager (FreeBSD)
pkg - Binary package manager for FreeBSD. Basic Commands 1# Update repository β¦ - Scoop Package Manager (Windows)
Scoop - Command-line installer for Windows. Installation 1# Set execution policy β¦ - Yarn Package Manager
Yarn package manager for JavaScript/Node.js projects. Installation 1# Via npm β¦ - yum/dnf Package Manager (RHEL/Fedora)
yum (Yellowdog Updater Modified) and dnf (Dandified Yum) for RHEL, Fedora, β¦