Using apt upgrade and apt dist-upgrade is quite confusing since the output usually looks something like this. Is there an option or possibility to make the output better readable?

$ sudo apt upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following packages will be upgraded:
  apache2 apache2-bin apache2-data apache2-utils apport apt apt-utils bind9-host bsdutils dnsutils e2fsprogs fdisk grub-common grub-pc grub-pc-bin
  grub2-common irqbalance kmod landscape-common libapt-inst2.0 libapt-pkg5.0 libbind9-160 libblkid1 libcom-err2 libcups2 libcupsimage2
  libdns-export1100 libdns1100 libdrm-common libdrm2 libext2fs2 libfdisk1 libglib2.0-0 libglib2.0-data libirs160 libisc-export169 libisc169
  libisccc160 libisccfg160 libkmod2 libldap-2.4-2 libldap-common liblwres160 liblxc-common liblxc1 libmount1 libnss-systemd libpam-systemd
  libparted2 libpython3-stdlib libpython3.6 libpython3.6-minimal libpython3.6-stdlib libsmartcols1 libss2 libsystemd0 libudev1 libuuid1
  linux-firmware lxcfs lxd lxd-client mount open-iscsi open-vm-tools parted psmisc python-apt-common python3 python3-apport python3-apt
  python3-distupgrade python3-gdbm python3-minimal python3-problem-report python3-software-properties python3-update-manager python3.6
  python3.6-minimal snapd software-properties-common sosreport systemd systemd-sysv tar tmux ubuntu-keyring ubuntu-release-upgrader-core udev
  unattended-upgrades update-manager-core update-notifier-common util-linux uuid-runtime
94 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 115 MB of archives.
After this operation, 14.1 MB of additional disk space will be used.
Do you want to continue? [Y/n]

From that I have to decide if it is safe to upgrade or not. The packagelist is just plain ugly and confusing. I would like to have a better overview about what will be upgraded.

For example, yum (from CentOS) gives a much cleaner view when upgrading. One can easily see which packages will be upgraded, to which version (e.g., if it is a small or major version jump) and also how big the pacakge is to download.

$ sudo yum update
Loaded plugins: changelog, fastestmirror
Setting up Update Process
Loading mirror speeds from cached hostfile
 * base: centos.mirrors.as250.net
 * epel: ftp.plusline.net
 * extras: ftp.hosteurope.de
 * updates: ftp.plusline.net
Resolving Dependencies
--> Running transaction check
---> Package geoipupdate.x86_64 0:2.2.1-2.el6 will be updated
---> Package geoipupdate.x86_64 0:3.1.1-2.el6 will be an update
---> Package gsoap.x86_64 0:2.7.16-6.el6 will be updated
---> Package gsoap.x86_64 0:2.7.16-7.el6 will be an update
--> Finished Dependency Resolution

Dependencies Resolved

 Package                     Arch                   Version                      Repository            Size
 geoipupdate                 x86_64                 3.1.1-2.el6                  epel                  37 k
 gsoap                       x86_64                 2.7.16-7.el6                 epel                 199 k

Transaction Summary
Upgrade       2 Package(s)

Total size: 236 k
Is this ok [y/N]:
  • 1
    Another option, use a narrower terminal window. Humans are not too good at reading more than 70 chars per line.
    – gboffi
    Commented Feb 8, 2019 at 14:06
  • You should always upgrade all packages, period.
    – fkraiem
    Commented Oct 13, 2019 at 23:55
  • @fkraiem You miss the point. Top priority is that the business software runs. Therefore I want to know which packages get an upgrade, since I know which packages are used by the software I will check the changelog of these packages and maybe do a test on a test system before updating the production system
    – masgo
    Commented Oct 21, 2019 at 0:30

5 Answers 5


You can get this better output by asking for more verbose version output (-V, --verbose-versions, see man apt-get):

# apt upgrade -V
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following packages will be upgraded:
   apt (1.6.2 => 1.6.8)
   base-files (10.1ubuntu2 => 10.1ubuntu2.3)
   bsdutils (1:2.31.1-0.4ubuntu3.1 => 1:2.31.1-0.4ubuntu3.3)
   util-linux (2.31.1-0.4ubuntu3.1 => 2.31.1-0.4ubuntu3.3)
26 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 8002 kB of archives.
After this operation, 46.1 kB of additional disk space will be used.
Do you want to continue? [Y/n]

Also see apt list --upgradable (has highlighted output!):

$ apt list --upgradable
Listing... Done
apt/bionic-updates 1.6.8 amd64 [upgradable from: 1.6.2]
base-files/bionic-updates 10.1ubuntu2.3 amd64 [upgradable from: 10.1ubuntu2]
util-linux/bionic-updates 2.31.1-0.4ubuntu3.3 amd64 [upgradable from: 2.31.1-0.4ubuntu3.1]
  • 2
    This is a great solution. yum is still slightly cleaner in it's output, but this is 95% of it. I can live with that. Since this question attracted so may, I will leave it open for another day or two until accepting your answer.
    – masgo
    Commented Feb 8, 2019 at 18:36

I see two solutions:

  1. use simulation in apt/apt-get:

    $ sudo apt dist-upgrade --simulate
    Reading package lists... Done
    Building dependency tree       
    Reading state information... Done
    Calculating upgrade... Done
    The following packages were automatically installed and are no longer required:
      linux-headers-4.15.0-20 linux-headers-4.15.0-20-generic linux-image-4.15.0-20-generic linux-modules-4.15.0-20-generic
    Use 'sudo apt autoremove' to remove them.
    The following NEW packages will be installed:
      libllvm7 libwayland-egl1
    The following packages will be upgraded:
      apt apt-utils bsdutils cups cups-bsd cups-client cups-common cups-core-drivers cups-daemon cups-ipp-utils cups-ppdc cups-server-common
      deja-dup e2fsprogs fdisk gir1.2-nma-1.0 gir1.2-totem-1.0 gjs gnome-shell-extension-ubuntu-dock grub-common grub-pc grub-pc-bin
      grub2-common gvfs gvfs-backends gvfs-bin gvfs-common gvfs-daemons gvfs-fuse gvfs-libs irqbalance kmod libapt-inst2.0 libapt-pkg5.0
      libasound2 libasound2-data libblkid1 libcairo-gobject2 libcairo2 libcom-err2 libcups2 libcupscgi1 libcupsimage2 libcupsmime1 libcupsppdc1
      libdrm-amdgpu1 libdrm-common libdrm-intel1 libdrm-nouveau2 libdrm-radeon1 libdrm2 libegl-mesa0 libegl1-mesa libext2fs2 libfdisk1 libgbm1
      libgjs0g libgl1-mesa-dri libgl1-mesa-glx libglapi-mesa libglx-mesa0 libkmod2 libmount1 libnma0 libnss-myhostname libnss-systemd
      libpam-systemd libsmartcols1 libsmbclient libss2 libsystemd0 libtotem0 libudev1 libuuid1 libwayland-client0 libwayland-cursor0
      libwayland-egl1-mesa libwayland-server0 libwbclient0 libxatracker2 linux-firmware mesa-va-drivers mesa-vdpau-drivers mount
      network-manager-gnome python-apt-common python3-apt python3-distupgrade python3-update-manager rfkill samba-libs snapd systemd
      systemd-sysv tar thermald totem totem-common totem-plugins ubuntu-release-upgrader-core ubuntu-release-upgrader-gtk udev update-manager
      update-manager-core update-notifier update-notifier-common util-linux uuid-runtime
    108 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
    Inst bsdutils [1:2.31.1-0.4ubuntu3.2] (1:2.31.1-0.4ubuntu3.3 Ubuntu:18.04/bionic-updates [amd64])
    Conf bsdutils (1:2.31.1-0.4ubuntu3.3 Ubuntu:18.04/bionic-updates [amd64])
    Inst libext2fs2 [1.44.1-1ubuntu1] (1.44.1-1ubuntu1.1 Ubuntu:18.04/bionic-updates [amd64]) [e2fsprogs:amd64 on libext2fs2:amd64] [e2fsprogs:amd64 ]
    Conf libext2fs2 (1.44.1-1ubuntu1.1 Ubuntu:18.04/bionic-updates [amd64]) [e2fsprogs:amd64 ]
    Inst e2fsprogs [1.44.1-1ubuntu1] (1.44.1-1ubuntu1.1 Ubuntu:18.04/bionic-updates [amd64])
  2. use interactive form of Aptitude instead of plain apt/apt-get


    Note: I have collapsed the Packages to be upgraded section for readability of other sections.

  • Thank you for the suggestions. Aptitude is nice, but I had some problems with it in the past when things got messy (short story: the dependencies where in fact impossible to fulfill. aptitude though it could fulfill them and did the upgrade; which broke the system). But it's still nice to have multiple options on the table.
    – masgo
    Commented Feb 8, 2019 at 18:44
  • If you're going to do a dry run first (simulate), then you can pipe the output into awk or sed, etc. configured to make the output look any way you like.
    – Joe
    Commented Feb 14, 2019 at 18:50

Im using this

groot@debian:~# apt list --upgradable | column -t | awk '{print $1"\t"$2"\t"$6}' | column -t | tr -d "]"

e2fslibs/stable                    1.44.5-1+deb10u2                     1.44.5-1+deb10u1
e2fsprogs-l10n/stable              1.44.5-1+deb10u2                     1.44.5-1+deb10u1
e2fsprogs/stable                   1.44.5-1+deb10u2                     1.44.5-1+deb10u1
gir1.2-ibus-1.0/stable             1.5.19-4+deb10u1                     1.5.19-4
libcom-err2/stable                 1.44.5-1+deb10u2                     1.44.5-1+deb10u1
libexpat1/stable                   2.2.6-2+deb10u1                      2.2.6-2
libext2fs2/stable                  1.44.5-1+deb10u2                     1.44.5-1+deb10u1
libibus-1.0-5/stable               1.5.19-4+deb10u1                     1.5.19-4
libibus-1.0-dev/stable             1.5.19-4+deb10u1                     1.5.19-4
libss2/stable                      1.44.5-1+deb10u2                     1.44.5-1+deb10u1
libssl1.1/stable                   1.1.1d-0+deb10u2                     1.1.1c-1
linux-image-4.19.0-6-amd64/stable  4.19.67-2+deb10u1                    4.19.67-2
linux-libc-dev/stable              4.19.67-2+deb10u1                    4.19.67-2
openssh-client/stable              1:7.9p1-10+deb10u1                   1:7.9p1-10
openssh-server/stable              1:7.9p1-10+deb10u1                   1:7.9p1-10
openssh-sftp-server/stable         1:7.9p1-10+deb10u1                   1:7.9p1-10
openssl/stable                     1.1.1d-0+deb10u2                     1.1.1c-1
tzdata/stable-updates              2019c-0+deb10u1                      2019b-0+deb10u1
wpasupplicant/stable               2:2.7+git20190128+0c1e29f-6+deb10u1  2:2.7+git20190128+0c1e29f-6
  • I'm using French and the output was messed up for me. I got it to work with by skipping the first line and selecting the last column instead of the 6th: apt list --upgradable | tail -n +2 | column -t | awk '{print $1"\t"$2"\t"$NF}' | column -t | tr -d "]". Or you could switch to English with LANG=C apt list ....
    – wjandrea
    Commented May 1, 2023 at 22:55

For Ubuntu 22.04 and higher, you can install the package manager nala (another front-end for libapt), which currently has an installation interface very similar to yum.

It can be installed with these steps (for the latest version of nala).

  1. Download key packages and install:

    $ wget https://gitlab.com/volian/volian-archive/uploads/b20bd8237a9b20f5a82f461ed0704ad4/volian-archive-keyring_0.1.0_all.deb https://gitlab.com/volian/volian-archive/uploads/d6b3a118de5384a0be2462905f7e4301/volian-archive-nala_0.1.0_all.deb
    $ sudo apt install ./volian-archive*.deb
  2. Add nala repository:

    $ echo "deb-src https://deb.volian.org/volian/ nala main" | sudo tee -a /etc/apt/sources.list.d/volian-archive-nala-unstable.list
  3. Install nala:

    $ sudo apt update && sudo apt install nala
  4. Afterwards REMOVE the nala repo again (since this will as of May 8th 2024 perform Python upgrades that could invalidate the system.

    $ sudo mv /etc/apt/sources.list.d/volian-archive-nala-unstable.list /etc/apt/sources.list.d/volian-archive-nala-unstable.list.disabled
  5. If you wish to upgrade nala at a later point, re-enable the repository, upgrade nala (and only nala), and disable the repo again.

Here is an example of the installation output of sudo nala upgrade:

╭─ Updating Package List ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│No Change: http://in.archive.ubuntu.com/ubuntu jammy InRelease                                                                                  │
│Updated:   https://download.docker.com/linux/ubuntu jammy InRelease [48.9 kB]                                                                   │
│No Change: http://in.archive.ubuntu.com/ubuntu jammy-updates InRelease                                                                          │
│No Change: http://in.archive.ubuntu.com/ubuntu jammy-backports InRelease                                                                        │
│Updated:   http://security.ubuntu.com/ubuntu jammy-security InRelease [110 kB]                                                                  │
│No Change: http://deb.volian.org/volian scar InRelease                                                                                          │
│No Change: https://ppa.launchpadcontent.net/flexiondotorg/quickemu/ubuntu jammy InRelease                                                       │
│No Change: https://ppa.launchpadcontent.net/yannick-mauray/quickgui/ubuntu jammy InRelease                                                      │
│Fetched 159 kB in 0s (0 B/s)                                                                                                                    │
  Package:                                        Old Version:                    New Version:                                             Size:  
  libfreetype6                                    2.11.1+dfsg-1build1             2.11.1+dfsg-1ubuntu0.1                                  389 kB  
 Upgrade 1 Packages                                                                                                                               
Do you want to continue? [Y/n] y
╭─ Updating Packages ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│Unpacking:  libfreetype6:amd64 (2.11.1+dfsg-1ubuntu0.1) over (2.11.1+dfsg-1build1)                                                              │
│Setting up: libfreetype6:amd64 (2.11.1+dfsg-1ubuntu0.1)                                                                                         │
│Processing: triggers for libc-bin (2.35-0ubuntu3)                                                                                               │
││✔ Running dpkg … ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100.0% • 0:00:00 • 3/3││
Finished Successfully
  • Steps 1 and 2 are not necessary.
    – abhishek47
    Commented May 8 at 12:34
  • @abhishek47 you're right, and I just realized that this could lead to problems.. Editing. Commented May 8 at 12:54

While I like a lot of the answers better than my own solution, I made an update command years ago that modifies the package text (and any other indented text, which is not much usually) blue via terminal escape codes and some pipes:

function update() {
    sudo apt update 2> >(sed 's/^WARNING.*//' | tr -d '\n' >&2) | tail -n1 && sudo apt upgrade -y 2>/dev/null | sed 's/^ \(.*\)/\x1b\[38;5;81m \1\x1b\[0m/' && sudo -k


  • The sed ... WARNING part is because otherwise you'll see "WARNING: apt does not have a stable CLI interface. Use with caution in scripts." in the output. You might prefer keeping this warning. I do not. Take away any of the >2 [dest] lines if you don't want stderr suppressed or rerouted.
  • apt update | tail -n1 just shows the summary and not all of the "Hit:X ftps://mirror.wherever/ubuntu miasmic-backports InRelease" and "Doing the next set of background tasks... Done" lines, the latter which are going to repeat during apt upgrade anyway
  • You can modify the sed command to split every package onto its own line by replacing spaces with newlines or use one of the other answers here (e.g. change verbosity, which should put each package on its own line)
  • \x1b\[38;5;81m \1\x1b\[0m is where the magic (color change) happens. If you don't know much about regular expressions, \1 pastes the text that was cut earlier (s/^ \(.*\)/). The stuff before \1 is an ANSI code for color. You might need a different escape code (MacOS? Legacy colorspace?) and can customize the color and format by using different numbers here.
  • The sudo -k will clear your sudo authorization, so remove if you don't like this.
  • -y skips verification. OP would probably prefer to remove this as the stated goal was to selectively update packages.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .