• Get application security done the right way! Detect, Protect, Monitor, Accelerate, and more…
  • APT or Advanced Package Tool is the Command Line utility for package management in Debian/Ubuntu-based distributions.

    It is one of the available package managers along with apt-get but like others it allows you to install, modify or remove different packages without building them from source code. It can do much more actions related to package management which we’re going to cover in the next sections.

    The general syntax of using apt command follows:

    $ apt [COMMAND] [PACKAGE]

    Remember to use sudo with apt, as many of its sub-commands would require the privilege to make system-level changes.

    Here we’ll be covering different sub-commands that you can use with apt and their use.

    Update Package Database

    apt needs a repository of packages with a database of all available packages that can be installed on a Debian/Ubuntu system. This repository database should be updated before you begin to install a package as apt should know the details about the package, its version, architecture, and remote location.

    Updating the repository database is easy and can be done with:

    $ sudo apt update

    Example:

    [email protected]:~$ sudo apt update
    Get:1 http://security.ubuntu.com/ubuntu focal-security InRelease [114 kB]
    Hit:2 http://azure.archive.ubuntu.com/ubuntu focal InRelease
    Get:3 http://azure.archive.ubuntu.com/ubuntu focal-updates InRelease [114 kB]
    Get:4 http://azure.archive.ubuntu.com/ubuntu focal-backports InRelease [101 kB]
    Get:5 http://azure.archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages [1086 kB]
    Get:6 http://azure.archive.ubuntu.com/ubuntu focal-updates/universe amd64 Packages [841 kB]
    Fetched 2255 kB in 1s (2677 kB/s)
    Reading package lists... Done
    Building dependency tree
    Reading state information... Done
    14 packages can be upgraded. Run 'apt list --upgradable' to see them.
    [email protected]:~$

    Upgrade Installed Packages

    Installed packages on a system can be upgraded to the latest available version using:

    $ sudo apt upgrade

    With upgrade command, packages will be installed if required to satisfy dependencies, but existing packages will never be removed. If an upgrade for a package requires the removal of an installed package then an upgrade for this package isn’t performed.

    Example:

    [email protected]:~$ sudo apt update
    Get:1 http://security.ubuntu.com/ubuntu focal-security InRelease [114 kB]
    Hit:2 http://azure.archive.ubuntu.com/ubuntu focal InRelease
    Get:3 http://azure.archive.ubuntu.com/ubuntu focal-updates InRelease [114 kB]
    Get:4 http://azure.archive.ubuntu.com/ubuntu focal-backports InRelease [101 kB]
    Get:5 http://azure.archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages [1086 kB]
    Get:6 http://azure.archive.ubuntu.com/ubuntu focal-updates/universe amd64 Packages [841 kB]
    Fetched 2255 kB in 1s (2677 kB/s)
    Reading package lists... Done
    Building dependency tree
    Reading state information... Done
    14 packages can be upgraded. Run 'apt list --upgradable' to see them.
    [email protected]:~$ sudo apt upgrade
    Reading package lists... Done
    Building dependency tree
    Reading state information... Done
    Calculating upgrade... Done
    The following packages will be upgraded:
      apt apt-utils libapt-pkg6.0 libpython3.8 libpython3.8-minimal libpython3.8-stdlib libuv1 linux-base linux-base-sgx open-vm-tools python3-distupgrade python3.8
      python3.8-minimal ubuntu-release-upgrader-core
    14 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
    Need to get 9485 kB of archives.
    After this operation, 603 kB of additional disk space will be used.
    Do you want to continue? [Y/n] Y
    Get:1 http://azure.archive.ubuntu.com/ubuntu focal-updates/main amd64 libapt-pkg6.0 amd64 2.0.6 [835 kB]
    Get:2 http://azure.archive.ubuntu.com/ubuntu focal-updates/main amd64 apt amd64 2.0.6 [1296 kB]
    Get:3 http://azure.archive.ubuntu.com/ubuntu focal-updates/main amd64 apt-utils amd64 2.0.6 [216 kB]
    Get:4 http://azure.archive.ubuntu.com/ubuntu focal-updates/main amd64 libpython3.8 amd64 3.8.10-0ubuntu1~20.04 [1625 kB]
    Get:5 http://azure.archive.ubuntu.com/ubuntu focal-updates/main amd64 python3.8 amd64 3.8.10-0ubuntu1~20.04 [387 kB]
    Get:6 http://azure.archive.ubuntu.com/ubuntu focal-updates/main amd64 libpython3.8-stdlib amd64 3.8.10-0ubuntu1~20.04 [1675 kB]
    Get:7 http://azure.archive.ubuntu.com/ubuntu focal-updates/main amd64 python3.8-minimal amd64 3.8.10-0ubuntu1~20.04 [1898 kB]
    Get:8 http://azure.archive.ubuntu.com/ubuntu focal-updates/main amd64 libpython3.8-minimal amd64 3.8.10-0ubuntu1~20.04 [717 kB]
    Get:9 http://azure.archive.ubuntu.com/ubuntu focal-updates/main amd64 libuv1 amd64 1.34.2-1ubuntu1.3 [80.8 kB]
    Get:10 http://azure.archive.ubuntu.com/ubuntu focal-updates/main amd64 ubuntu-release-upgrader-core all 1:20.04.35 [23.9 kB]
    Get:11 http://azure.archive.ubuntu.com/ubuntu focal-updates/main amd64 python3-distupgrade all 1:20.04.35 [104 kB]
    Get:12 http://azure.archive.ubuntu.com/ubuntu focal-updates/main amd64 linux-base all 4.5ubuntu3.6 [17.8 kB]
    Get:13 http://azure.archive.ubuntu.com/ubuntu focal-updates/main amd64 linux-base-sgx all 4.5ubuntu3.6 [4660 B]
    Get:14 http://azure.archive.ubuntu.com/ubuntu focal-updates/universe amd64 open-vm-tools amd64 2:11.2.5-2ubuntu1~ubuntu20.04.1 [604 kB]
    Fetched 9485 kB in 0s (54.4 MB/s)
    Preconfiguring packages ...
    (Reading database ... 59511 files and directories currently installed.)
    Preparing to unpack .../libapt-pkg6.0_2.0.6_amd64.deb ...
    Unpacking libapt-pkg6.0:amd64 (2.0.6) over (2.0.5) ...
    Setting up libapt-pkg6.0:amd64 (2.0.6) ...
    (Reading database ... 59511 files and directories currently installed.)
    Preparing to unpack .../archives/apt_2.0.6_amd64.deb ...
    Unpacking apt (2.0.6) over (2.0.5) ...
    Setting up apt (2.0.6) ...
    (Reading database ... 59511 files and directories currently installed.)
    Preparing to unpack .../00-apt-utils_2.0.6_amd64.deb ...
    Unpacking apt-utils (2.0.6) over (2.0.5) ...
    Preparing to unpack .../01-libpython3.8_3.8.10-0ubuntu1~20.04_amd64.deb ...
    Unpacking libpython3.8:amd64 (3.8.10-0ubuntu1~20.04) over (3.8.5-1~20.04.3) ...
    Preparing to unpack .../02-python3.8_3.8.10-0ubuntu1~20.04_amd64.deb ...
    Unpacking python3.8 (3.8.10-0ubuntu1~20.04) over (3.8.5-1~20.04.3) ...
    Preparing to unpack .../03-libpython3.8-stdlib_3.8.10-0ubuntu1~20.04_amd64.deb ...
    Unpacking libpython3.8-stdlib:amd64 (3.8.10-0ubuntu1~20.04) over (3.8.5-1~20.04.3) ...
    Preparing to unpack .../04-python3.8-minimal_3.8.10-0ubuntu1~20.04_amd64.deb ...
    Unpacking python3.8-minimal (3.8.10-0ubuntu1~20.04) over (3.8.5-1~20.04.3) ...
    Preparing to unpack .../05-libpython3.8-minimal_3.8.10-0ubuntu1~20.04_amd64.deb ...
    Unpacking libpython3.8-minimal:amd64 (3.8.10-0ubuntu1~20.04) over (3.8.5-1~20.04.3) ...
    Preparing to unpack .../06-libuv1_1.34.2-1ubuntu1.3_amd64.deb ...
    Unpacking libuv1:amd64 (1.34.2-1ubuntu1.3) over (1.34.2-1ubuntu1.1) ...
    Preparing to unpack .../07-ubuntu-release-upgrader-core_1%3a20.04.35_all.deb ...
    Unpacking ubuntu-release-upgrader-core (1:20.04.35) over (1:20.04.33) ...
    Preparing to unpack .../08-python3-distupgrade_1%3a20.04.35_all.deb ...
    Unpacking python3-distupgrade (1:20.04.35) over (1:20.04.33) ...
    Preparing to unpack .../09-linux-base_4.5ubuntu3.6_all.deb ...
    Unpacking linux-base (4.5ubuntu3.6) over (4.5ubuntu3.1) ...
    Preparing to unpack .../10-linux-base-sgx_4.5ubuntu3.6_all.deb ...
    Unpacking linux-base-sgx (4.5ubuntu3.6) over (4.5ubuntu3.1) ...
    Preparing to unpack .../11-open-vm-tools_2%3a11.2.5-2ubuntu1~ubuntu20.04.1_amd64.deb ...
    Unpacking open-vm-tools (2:11.2.5-2ubuntu1~ubuntu20.04.1) over (2:11.0.5-4) ...
    Setting up libpython3.8-minimal:amd64 (3.8.10-0ubuntu1~20.04) ...
    Setting up apt-utils (2.0.6) ...
    Setting up linux-base (4.5ubuntu3.6) ...
    Setting up python3-distupgrade (1:20.04.35) ...
    Setting up libuv1:amd64 (1.34.2-1ubuntu1.3) ...
    Setting up linux-base-sgx (4.5ubuntu3.6) ...
    Setting up ubuntu-release-upgrader-core (1:20.04.35) ...
    Setting up python3.8-minimal (3.8.10-0ubuntu1~20.04) ...
    Setting up open-vm-tools (2:11.2.5-2ubuntu1~ubuntu20.04.1) ...
    Installing new version of config file /etc/vmware-tools/tools.conf.example ...
    Installing new version of config file /etc/vmware-tools/vgauth.conf ...
    Setting up libpython3.8-stdlib:amd64 (3.8.10-0ubuntu1~20.04) ...
    Setting up python3.8 (3.8.10-0ubuntu1~20.04) ...
    Setting up libpython3.8:amd64 (3.8.10-0ubuntu1~20.04) ...
    Processing triggers for libc-bin (2.31-0ubuntu9.2) ...
    Processing triggers for systemd (245.4-4ubuntu3.7) ...
    Processing triggers for man-db (2.9.1-1) ...
    Processing triggers for mime-support (3.64ubuntu1) ...
    [email protected]:~$

    Make sure you’ve executed sudo apt update before you upgrade your packages to avoid issues during the upgrade as well as to ensure you get the latest available packages from the repository. If you want, you can run these commands in a single line as:

    $ sudo apt update && sudo apt upgrade -y

    Full-Upgrade Packages

    apt also offers a full-upgrade command. It differs from upgrade command as it will remove currently installed packages if this is needed to upgrade the system as a whole. As such be careful with this command and if possible, go with the upgrade command instead.

    $ sudo apt full-upgrade

    Install Single Package

    Installing a new package can be done with apt by using the below syntax:

    $ sudo apt install [package-name]

    Example:

    [email protected]:~$ sudo apt install unzip
    Reading package lists... Done
    Building dependency tree
    Reading state information... Done
    Suggested packages:
      zip
    The following NEW packages will be installed:
      unzip
    0 upgraded, 1 newly installed, 0 to remove and 14 not upgraded.
    Need to get 169 kB of archives.
    After this operation, 593 kB of additional disk space will be used.
    Get:1 http://azure.archive.ubuntu.com/ubuntu focal/main amd64 unzip amd64 6.0-25ubuntu1 [169 kB]
    Fetched 169 kB in 0s (4040 kB/s)
    Selecting previously unselected package unzip.
    (Reading database ... 59511 files and directories currently installed.)
    Preparing to unpack .../unzip_6.0-25ubuntu1_amd64.deb ...
    Unpacking unzip (6.0-25ubuntu1) ...
    Setting up unzip (6.0-25ubuntu1) ...
    Processing triggers for mime-support (3.64ubuntu1) ...
    Processing triggers for man-db (2.9.1-1) ...
    [email protected]:~$

    Install Multiple Packages

    You can install multiple packages on a system with apt. It follows a similar syntax as in the previous example:

    $ sudo apt install [package-name-1] [package-name-2] ... [package-name-n]

    Example:

    [email protected]:~$ sudo apt install zip unzip
    Reading package lists... Done
    Building dependency tree
    Reading state information... Done
    The following NEW packages will be installed:
      unzip zip
    0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
    Need to get 336 kB of archives.
    After this operation, 1231 kB of additional disk space will be used.
    Get:1 http://azure.archive.ubuntu.com/ubuntu focal/main amd64 unzip amd64 6.0-25ubuntu1 [169 kB]
    Get:2 http://azure.archive.ubuntu.com/ubuntu focal/main amd64 zip amd64 3.0-11build1 [167 kB]
    Fetched 336 kB in 0s (7749 kB/s)
    Selecting previously unselected package unzip.
    (Reading database ... 59527 files and directories currently installed.)
    Preparing to unpack .../unzip_6.0-25ubuntu1_amd64.deb ...
    Unpacking unzip (6.0-25ubuntu1) ...
    Selecting previously unselected package zip.
    Preparing to unpack .../zip_3.0-11build1_amd64.deb ...
    Unpacking zip (3.0-11build1) ...
    Setting up unzip (6.0-25ubuntu1) ...
    Setting up zip (3.0-11build1) ...
    Processing triggers for man-db (2.9.1-1) ...
    Processing triggers for mime-support (3.64ubuntu1) ...
    [email protected]:~$

    If one of the specified packages is already installed on the system, apt will look for an update in a repository and if available will upgrade the package or else will keep the installed version as it is.

    Install Specific Version

    Often you need to install a specific version of a package especially while on enterprise systems. apt allows you to install a given version of a package assuming its available in the repository using:

    $ sudo apt install [package-name]=[version]

    Example:

    [email protected]:~$ sudo apt install unzip=6.0-25ubuntu1
    Reading package lists... Done
    Building dependency tree
    Reading state information... Done
    The following NEW packages will be installed:
      unzip
    0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
    Need to get 169 kB of archives.
    After this operation, 593 kB of additional disk space will be used.
    Get:1 http://azure.archive.ubuntu.com/ubuntu focal/main amd64 unzip amd64 6.0-25ubuntu1 [169 kB]
    Fetched 169 kB in 0s (2767 kB/s)
    Selecting previously unselected package unzip.
    (Reading database ... 59541 files and directories currently installed.)
    Preparing to unpack .../unzip_6.0-25ubuntu1_amd64.deb ...
    Unpacking unzip (6.0-25ubuntu1) ...
    Setting up unzip (6.0-25ubuntu1) ...
    Processing triggers for mime-support (3.64ubuntu1) ...
    Processing triggers for man-db (2.9.1-1) ...
    [email protected]:~$

    Remove a Package

    Like installing a package, apt can be used to remove a package from a system with the below command:

    $ sudo apt remove [package-name]

    Example:

    [email protected]:~$ sudo apt remove unzip
    Reading package lists... Done
    Building dependency tree
    Reading state information... Done
    The following packages will be REMOVED:
      unzip
    0 upgraded, 0 newly installed, 1 to remove and 14 not upgraded.
    After this operation, 593 kB disk space will be freed.
    Do you want to continue? [Y/n] Y
    (Reading database ... 59529 files and directories currently installed.)
    Removing unzip (6.0-25ubuntu1) ...
    Processing triggers for man-db (2.9.1-1) ...
    Processing triggers for mime-support (3.64ubuntu1) ...
    [email protected]:~$

    Purge a Package

    Like removing a package, purging a package also does the same task but while with remove command apt just removes the binaries of a package leaving the configuration files as it is. On the other hand, purge command ensures that everything related to the package including its binaries and configuration files is removed from the system. Leaving the configuration files allows you to reuse the same configuration files again if you plan to reinstall the application.

    To purge a package, use:

    $ sudo apt purge [package-name]

    Example:

    [email protected]:~$ sudo apt purge unzip
    Reading package lists... Done
    Building dependency tree
    Reading state information... Done
    The following packages will be REMOVED:
      unzip*
    0 upgraded, 0 newly installed, 1 to remove and 14 not upgraded.
    After this operation, 593 kB disk space will be freed.
    Do you want to continue? [Y/n] Y
    (Reading database ... 59529 files and directories currently installed.)
    Removing unzip (6.0-25ubuntu1) ...
    Processing triggers for man-db (2.9.1-1) ...
    Processing triggers for mime-support (3.64ubuntu1) ...
    (Reading database ... 59511 files and directories currently installed.)
    Purging configuration files for unzip (6.0-25ubuntu1) ...
    [email protected]:~$

    Search for Packages

    apt can not only serve as the utility to install and remove packages. It can also search the required package in the repository with search command as:

    $ apt search [search-text]

    Example:

    [email protected]:~$ apt search netstat
    Sorting... Done
    Full Text Search... Done
    bwm-ng/focal 0.6.2-1 amd64
      small and simple console-based bandwidth monitor
    
    gnome-nettool/focal 3.8.1-3 amd64
      network information tool for GNOME
    
    golang-github-aelsabbahy-gonetstat-dev/focal 0.0~git20160428.0.edf89f7-3 all
      Netstat implementation in Go
    
    golang-github-mwitkow-go-conntrack-dev/focal 0.0~git20190716.2f06839-1 all
      Go middleware for net.Conn tracking
    
    libparse-netstat-perl/focal 0.14-1 all
      module to parse the output of the "netstat" command
    
    net-tools/focal 1.60+git20180626.aebd88e-1ubuntu1 amd64
      NET-3 networking toolkit
    
    netstat-nat/focal 1.4.10-3build1 amd64
      tool that display NAT connections
    
    nicstat/focal 1.95-1build1 amd64
      print network traffic statistics
    
    qnetstatview/focal 1.5.6-1 amd64
      Shows detailed listings of all TCP and UDP endpoints
    
    unhide/focal 20130526-4 amd64
      Forensic tool to find hidden processes and ports
    
    whichman/focal 2.4-9 amd64
      Fault tolerant search utilities: whichman, ftff, ftwhich
    
    [email protected]:~$

    View Package Content

    To get details about a package, whether it is installed or to be installed, you can use show command as given below:

    $ apt show [package-name]

    Example:

    [email protected]:~$ apt show firefox
    Package: firefox
    Version: 90.0+build1-0ubuntu0.20.04.1
    Priority: optional
    Section: web
    Origin: Ubuntu
    Maintainer: Ubuntu Mozilla Team <[email protected]>
    Bugs: https://bugs.launchpad.net/ubuntu/+filebug
    Installed-Size: 226 MB
    Provides: gnome-www-browser, iceweasel, www-browser
    Depends: lsb-release, libatk1.0-0 (>= 1.12.4), libc6 (>= 2.30), libcairo-gobject2 (>= 1.10.0), libcairo2 (>= 1.10.0), libdbus-1-3 (>= 1.9.14), libdbus-glib-1-2 (>= 0.78), libfontconfig1 (>= 2.12.6), libfreetype6 (>= 2.10.1), libgcc-s1 (>= 3.3), libgdk-pixbuf2.0-0 (>= 2.22.0), libglib2.0-0 (>= 2.42), libgtk-3-0 (>= 3.14), libharfbuzz0b (>= 0.6.0), libpango-1.0-0 (>= 1.14.0), libpangocairo-1.0-0 (>= 1.14.0), libpangoft2-1.0-0 (>= 1.14.0), libstdc++6 (>= 9), libx11-6, libx11-xcb1 (>= 2:1.6.9), libxcb-shm0, libxcb1, libxcomposite1 (>= 1:0.4.5), libxcursor1 (>> 1.1.2), libxdamage1 (>= 1:1.1), libxext6, libxfixes3, libxi6, libxrender1, libxt6
    Recommends: xul-ext-ubufox, libcanberra0, libdbusmenu-glib4, libdbusmenu-gtk3-4
    Suggests: fonts-lyx
    Replaces: kubuntu-firefox-installer
    Task: ubuntu-desktop-minimal, ubuntu-desktop, kubuntu-desktop, kubuntu-full, xubuntu-desktop, lubuntu-desktop, ubuntustudio-desktop, ubuntukylin-desktop, ubuntu-mate-core, ubuntu-mate-desktop, ubuntu-budgie-desktop
    Xul-Appid: {ec8030f7-c20a-464f-9b0e-13a3a9e97384}
    Download-Size: 57.0 MB
    APT-Sources: http://azure.archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages
    Description: Safe and easy web browser from Mozilla
     Firefox delivers safe, easy web browsing. A familiar user interface,
     enhanced security features including protection from online identity theft,
     and integrated search let you get the most out of the web.
    
    N: There is 1 additional record. Please use the '-a' switch to see it
    [email protected]:~$

    List Installed Packages

    We often need to list installed packages on a system for different purposes. apt allows you to get the list of installed packages simply with:

    $ apt list --installed

    List All Packages

    To list all packages available for your system, use list command with --all-versions keyword as:

    $ apt list --all-versions

    List Upgradable Packages

    Packages need to be kept up-to-date as new versions keep releasing with improved or additional features and bug fixes including critical security loopholes. apt ensures you can patch your Debian/Ubuntu system easily with upgrade command as suggested earlier in the article. To list all available upgrades for installed packages on your system, run:

    $ apt list --upgradable

    Example:

    [email protected]:~$ apt list --upgradable
    Listing... Done
    apt-utils/focal-updates 2.0.6 amd64 [upgradable from: 2.0.5]
    apt/focal-updates 2.0.6 amd64 [upgradable from: 2.0.5]
    libapt-pkg6.0/focal-updates 2.0.6 amd64 [upgradable from: 2.0.5]
    libpython3.8-minimal/focal-updates,focal-security 3.8.10-0ubuntu1~20.04 amd64 [upgradable from: 3.8.5-1~20.04.3]
    libpython3.8-stdlib/focal-updates,focal-security 3.8.10-0ubuntu1~20.04 amd64 [upgradable from: 3.8.5-1~20.04.3]
    libpython3.8/focal-updates,focal-security 3.8.10-0ubuntu1~20.04 amd64 [upgradable from: 3.8.5-1~20.04.3]
    libuv1/focal-updates,focal-security 1.34.2-1ubuntu1.3 amd64 [upgradable from: 1.34.2-1ubuntu1.1]
    linux-base-sgx/focal-updates 4.5ubuntu3.6 all [upgradable from: 4.5ubuntu3.1]
    linux-base/focal-updates 4.5ubuntu3.6 all [upgradable from: 4.5ubuntu3.1]
    open-vm-tools/focal-updates 2:11.2.5-2ubuntu1~ubuntu20.04.1 amd64 [upgradable from: 2:11.0.5-4]
    python3-distupgrade/focal-updates 1:20.04.35 all [upgradable from: 1:20.04.33]
    python3.8-minimal/focal-updates,focal-security 3.8.10-0ubuntu1~20.04 amd64 [upgradable from: 3.8.5-1~20.04.3]
    python3.8/focal-updates,focal-security 3.8.10-0ubuntu1~20.04 amd64 [upgradable from: 3.8.5-1~20.04.3]
    ubuntu-release-upgrader-core/focal-updates 1:20.04.35 all [upgradable from: 1:20.04.33]
    [email protected]:~$

    Clean Unused Packages

    With normal usage, sometimes your system may have packages installed that are no longer required. It may happen as these packages were installed as part of the dependency of another package which has already been removed later though the dependencies are left lingering on the system. To clean such packages and free up some disk space you can use:

    $ sudo apt autoremove

    Example:

    [email protected]:~$ sudo apt autoremove
    Reading package lists... Done
    Building dependency tree
    Reading state information... Done
    0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
    [email protected]:~$

    My system didn’t have any leftover packages, so the output reported no changes.

    Check Package Dependencies

    A package may have one or more dependencies that must be installed on a system for the package to work correctly. apt ensures required dependencies are installed as part of package installation. If you want to check dependencies of a package, use:

    $ apt depends [package-name]

    Example:

    [email protected]:~$ apt depends zip
    zip
      Depends: libbz2-1.0
      Depends: libc6 (>= 2.14)
      Recommends: unzip
    [email protected]:~$

    Reinstall a Package

    A package may get corrupted or you may need to reinstall it to ensure all package files are in the right order. To install a package again without removing it first you can use:

    $ sudo apt reinstall [package-name]

    Example:

    [email protected]:~$ sudo apt reinstall unzip
    Reading package lists... Done
    Building dependency tree
    Reading state information... Done
    0 upgraded, 0 newly installed, 1 reinstalled, 0 to remove and 0 not upgraded.
    Need to get 169 kB of archives.
    After this operation, 0 B of additional disk space will be used.
    Get:1 http://azure.archive.ubuntu.com/ubuntu focal/main amd64 unzip amd64 6.0-25ubuntu1 [169 kB]
    Fetched 169 kB in 0s (5695 kB/s)
    (Reading database ... 59559 files and directories currently installed.)
    Preparing to unpack .../unzip_6.0-25ubuntu1_amd64.deb ...
    Unpacking unzip (6.0-25ubuntu1) over (6.0-25ubuntu1) ...
    Setting up unzip (6.0-25ubuntu1) ...
    Processing triggers for mime-support (3.64ubuntu1) ...
    Processing triggers for man-db (2.9.1-1) ...
    [email protected]:~$

    Download a Package

    Package files can be downloaded to the local filesystem without installing them. To download a package with apt, use:

    $ apt download [package-name]

    Example:

    [email protected]:~$ apt download unzip
    Get:1 http://azure.archive.ubuntu.com/ubuntu focal/main amd64 unzip amd64 6.0-25ubuntu1 [169 kB]
    Fetched 169 kB in 0s (1405 kB/s)
    [email protected]:~$
    
    [email protected]:~$ ls -l unzip_6.0-25ubuntu1_amd64.deb
    -rw-r--r-- 1 abhisheknair abhisheknair 168956 Aug 16 2019 unzip_6.0-25ubuntu1_amd64.deb
    [email protected]:~$

    Check Package Changelog

    We can easily check the changelog about any package with apt by using:

    $ apt changelog [package-name]

    Edit Sources

    apt‘s edit-sources command lets you edit your sources.list files while also providing sanity checks to ensure the changes are consistent and valid. This is a work-in-progress command and hence should be used with care. You can edit sources.list as :

    $ sudo apt edit-sources

    Get APT Help

    To get more help about apt command, use:

    $ apt help

    Example:

    [email protected]:~$ apt help
    apt 2.0.6 (amd64)
    Usage: apt [options] command
    
    apt is a commandline package manager and provides commands for
    searching and managing as well as querying information about packages.
    It provides the same functionality as the specialized APT tools,
    like apt-get and apt-cache, but enables options more suitable for
    interactive use by default.
    
    Most used commands:
      list - list packages based on package names
      search - search in package descriptions
      show - show package details
      install - install packages
      reinstall - reinstall packages
      remove - remove packages
      autoremove - Remove automatically all unused packages
      update - update list of available packages
      upgrade - upgrade the system by installing/upgrading packages
      full-upgrade - upgrade the system by removing/installing/upgrading packages
      edit-sources - edit the source information file
      satisfy - satisfy dependency strings
    
    See apt(8) for more information about the available commands.
    Configuration options and syntax is detailed in apt.conf(5).
    Information about how to configure sources can be found in sources.list(5).
    Package and version choices can be expressed via apt_preferences(5).
    Security details are available in apt-secure(8).
                                            This APT has Super Cow Powers.
    [email protected]:~$

    Summary

    apt tool is a handy and powerful CLI-based package management utility for Debian/Ubuntu-based systems. A system administrator’s normal day-to-day job involves managing packages on a system and knowing apt and its common usage commands make this task easy.

    For further help on apt, refer to its man page.

    $ man apt