Ubuntu/Debian Linux apt-get package management cheat sheet

Both Debian and Ubuntu Linux provides a number of package management tools. This article summaries package management command along with it usage and examples for you.

  • apt-get : APT is acronym for Advanced Package Tool. It supports installing packages over internet using ftp or http protocols. You can also upgrade all packages in a single operations, which makes it even more attractive. For scripting purpose apt-get is perfect tool.
  • dpkg : Debian packaging tool which can be use to install, query, uninstall packages.
  • apt : Interactive and recommended command for all users.
  • Gui tools: You can also try GUI based or high level interface to the Debian GNU/Linux package system. Following list summaries them:
    • aptitude: It is a text-based interface to the Debian GNU/Linux package system.
    • synaptic: GUI front end for APT

Understanding .deb file

Red hat Linux package names generally end in .rpm, similarly Debian package names end in .deb, for example:



  1. apache : Package name
  2. 1.3.31-6 : Version number
  3. i386 : Hardware Platform on which this package will run (i386 == intel x86 based system)
  4. .deb : Extension that suggest it is a Debian package

Remember, whenever I refer .deb file it signifies complete file name, and whenever I refer package name it must be first part of .deb file. For example, when I refer to a package sudo it means sudo only and not the .deb file i.e. sudo_1.6.7p5-2_i386.deb. You can find out debian package name with the following command:
apt-cache search {package-name}
apt-cache search apache

Finally, most of the actions listed in this post are written with the assumption that they will be executed by the root user running the bash or any other modern shell. Otherwise add sudo command before apt-get:
$ sudo apt-get ....
Ok, let us see some examples.

apt-get add a new package

The syntax is:
apt-get install {package-name}
To install a package called samba, run:
# apt-get install samba
$ sudo apt-get install samba

How do I search for package names?

To find software packages use the apt-cache command:
$ apt-cache search {package-name}
To find vim package list, enter:
$ apt-cache search vim
$ apt-cache search vim | more
$ apt-cache search vim | grep 'word'
You can limit search with regex too. For example, show all vim packages starting with vim word only:
$ apt-cache search ^vim
Sample outputs:

vim - Vi IMproved - enhanced vi editor
vim-common - Vi IMproved - Common files
vim-doc - Vi IMproved - HTML documentation
vim-gnome - Vi IMproved - enhanced vi editor (dummy package)
vim-gtk3 - Vi IMproved - enhanced vi editor - with GTK3 GUI
vim-gui-common - Vi IMproved - Common GUI files
vim-vimerl - Erlang plugin for Vim
vim-vimerl-syntax - Erlang syntax for Vim
vim-vimoutliner - script for building an outline editor on top of Vim
vim-voom - Vim two-pane outliner
vim-youcompleteme - fast, as-you-type, fuzzy-search code completion engine for Vim

apt-get remove the package called samba but keep the configuration files

The syntax is:
apt-get remove {package-name}
For example to remove a package named samba, run:
# apt-get remove samba

apt-get remove (erase) package and configuration files too

The syntax is:
apt-get --purge remove {package-name}
For example, delete a package named samba including config files stored in /etc/ directory:
# apt-get --purge remove samba

How do I remove packages that were automatically installed to satisfy dependencies for other packages and are now no longer needed?

Run the following command:
$ sudo apt-get autoremove
$ sudo apt-get --purge autoremove
The above command is quite useful to remove unwanted kernel on a Debian or Ubuntu Linux.

How do I update my system?

The syntax is:
# apt-get update
# apt-get upgrade

To upgrade individual package called sudo or bash, enter:
# apt-get install sudo
# apt-get install bash

Sample outputs:

Reading package lists... Done
Building dependency tree       
Reading state information... Done
Suggested packages:
Recommended packages:
The following packages will be upgraded:
1 upgraded, 0 newly installed, 0 to remove and 7 not upgraded.
Need to get 1427 kB of archives.
After this operation, 0 B of additional disk space will be used.
Get:1 http://cdn-fastly.deb.debian.org/debian stretch/main amd64 bash amd64 4.4-4+b2 [1427 kB]
Fetched 1427 kB in 2s (661 kB/s)
debconf: delaying package configuration, since apt-utils is not installed
(Reading database ... 8417 files and directories currently installed.)
Preparing to unpack .../bash_4.4-4+b2_amd64.deb ...
Unpacking bash (4.4-4+b2) over (4.4-4+b1) ...
Setting up bash (4.4-4+b2) ...

apt-get display available software updates

Type the following command to display the list of all available upgrades (updates) using -u option
# apt-get update
# apt-get -u upgrade

Sample outputs:

Reading package lists... Done
Building dependency tree       
Reading state information... Done
Calculating upgrade... Done
The following packages will be upgraded:
  apt bash gcc-6-base init init-system-helpers libapt-pkg5.0 libgcc1 libstdc++6
8 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 4244 kB of archives.
After this operation, 0 B of additional disk space will be used.
Do you want to continue? [Y/n]

If you decided to upgrade all of the shown packages just hit ‘y’ key. If you just want to see a list, enter:
# apt-get -u upgrade --assume-no
However, if you just wish to upgrade individual package then use apt-get command and it will take care of rest of your worries:
# apt-get install {package-name}

How do I upgrade my Debian or Ubuntu Linux distro?

From the man page:

The dist-upgrade option to apt-get in addition to performing the function of upgrade, also intelligently handles changing dependencies with new versions of packages; apt-get has a “smart” conflict resolution system, and it will attempt to upgrade the most important packages at the expense of less important ones if necessary. The dist-upgrade command may therefore remove some packages.

This is useful to upgrade your distro including kernel:
$ sudo apt-get update
$ sudo apt-get dist-upgrade

dpkg command to get package information such as description of package, version etc.

The syntax is:
dpkg --info {.deb-package-name}
For example:
$ dpkg --info sudo_1.6.7p5-2_i386.deb | less

List all installed packages

The syntax is:
dpkg -l
$ dpkg -l

How do I list individual package such as apache or sudo

$ dpkg -l apache
Sample outputs:

| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                                  Version                 Architecture            Description
ii  sudo                                  1.8.19p1-1ubuntu1       amd64                   Provide limited super user privileges to specific users

You can also use this command to see (verify) if package sudo is installed or not (note that if package is installed then it displays package name along with small description):
$ dpkg -l | grep -i 'sudo'
To list packages related to the apache:
$ dpkg -l '*apache*'
List files provided (or owned) by the installed package (for example what files are provided by the installed samba package). The syntax is:
dpkg -L {package-name}
For example:
$ dpkg -L samba
$ dpkg -L sudo

Sample outputs:


To list files provided (or owned) by the package (for example what files are provided by the uninstalled sudo package). The syntax is:
dpkg --contents {.deb-package-name}
For example:
# dpkg --contents sudo_1.6.7p5-2_i386.deb

Find out what package owns the file /bin/netstat?

The syntax is:
dpkg -S {/path/to/file}
For example:
$ dpkg -S /bin/netstat
Sample outputs:

net-tools: /bin/netstat

So net-tools package provided /bin/netstat command.

How do I search for package or package description?

Some times you don’t know package name but aware of some keywords to search the package. Once you got package name you can install it using apt-get -i {package-name} command:
apt-cache search "Text-to-search"
apt-cache search "httpd"
apt-cache search "web server"
apt-cache search "web server"| grep something

Find out all the Debian package which can be used for intrusion detection

Type the following command:
code>$ apt-cache search "Intrusion Detection"

Find out all sniffer packages, run:

$ apt-cache search sniffer

Find out if Debian package is installed or not (status)

The syntax is:
dpkg -s {package-name} | grep Status
For example:
$ dpkg -s samba| grep Status

How do I list each dependency a package has…

Display a listing of each dependency a package has and all the possible other packages that can fulfill that dependency. You hardly use this command as apt-get does decent job fulfill all package dependencies. The syntax is:
apt-cache depends package
To display dependencies for lsof and mysql-server packages:
$ apt-cache depends mysql-server
$ apt-cache depends lsof

Sample outputs:

  Depends: libc6
  Depends: libselinux1
  Suggests: perl
Further reading

🐧 Get the latest tutorials on Linux, Open Source & DevOps via RSS feed or Weekly email newsletter.

🐧 24 comments so far... add one
CategoryList of Unix and Linux commands
Disk space analyzersdf ncdu pydf
File Managementcat tree
FirewallAlpine Awall CentOS 8 OpenSUSE RHEL 8 Ubuntu 16.04 Ubuntu 18.04 Ubuntu 20.04
Network UtilitiesNetHogs dig host ip nmap
OpenVPNCentOS 7 CentOS 8 Debian 10 Debian 8/9 Ubuntu 18.04 Ubuntu 20.04
Package Managerapk apt
Processes Managementbg chroot cron disown fg jobs killall kill pidof pstree pwdx time
Searchinggrep whereis which
User Informationgroups id lastcomm last lid/libuser-lid logname members users whoami who w
WireGuard VPNAlpine CentOS 8 Debian 10 Firewall Ubuntu 20.04
24 comments… add one
  • Anonymous May 14, 2005 @ 11:25

    What is wrong with command?
    dpkg -S /etc/passwd

    It should give me hint about the .deb file that what package owns the file /etc/passwd file…

  • LinuxTitli May 14, 2005 @ 18:15

    Because file /etc/passwd created by the script which was executed by apt-get install pkg.deb command …

  • Anonymous Jul 21, 2005 @ 10:03

    slight typo, para 5 above…
    Redhat packages end with ‘.rpm’ and NOT ‘.rmp’ as stated.

  • Rock Da Linux Jul 21, 2005 @ 13:36

    >slight typo, para 5 above…
    Redhat packages end with ‘.rpm’ and NOT ‘.rmp’ as stated.

    Thanks for pointing it out. Typo is corrected.

  • Jissouille Dec 19, 2008 @ 19:51

    Be careful when using this command :
    dpkg -l | grep -i 'sudo'

    because dpkg’s output depends on the width of the terminal. For example compare :
    dpkg -l '*excel-perl*'
    dpkg -l |grep '*excel-perl*'

    To obtain the “wide” listing (and thus be able to safely use pipes) you can use :
    COLUMNS=200 dpkg -l '*excel-perl*'

  • Ryan Apr 16, 2009 @ 16:51

    Why use apt-get, dpkg, etc. when aptitude does all this and more?

  • kneekoo Aug 16, 2009 @ 23:19

    Because it’s way easier to type: apt-get install apache2 php5 mysql than enter aptitude and select the packages then install. When you know how… it’s easier with apt-get.

    • klm Aug 18, 2010 @ 8:44

      i find that aptitude and apt-get uses the same command-line syntax. i believe the only difference is that aptitude does better logging and search-formats are better.

  • muhammad zia ul haq Oct 22, 2009 @ 1:01

    how to install a new package downloaded and stored in the flash disk, the package. deb

    ….^_^ thank’s

  • kneekoo Oct 22, 2009 @ 8:21

    dpkg -i package_name.deb

    Or if you have more deb files and you want to install them all at once:

    dpkg -i *.deb

  • J Story Nov 12, 2009 @ 21:19

    Is there no way to upgrade an installed package to a downloaded .deb file?

    This is kindergarten stuff for .rpm systems, but google gives me no joy here.

  • debmonkey Dec 30, 2009 @ 14:43

    Aptitude has command line mode as well as gui.

    aptitude install apache

    does exactly that. About the only time to use apt-get these days is to install aptitude. 😉

  • gwern Mar 1, 2010 @ 22:19

    J Story: does ‘sudo dpkg -i foo.deb’ not work or something?

  • narendra sisodiya Dec 6, 2010 @ 18:57

    I want to include this article in School OS Distro – http://schoolos.org , may I ?

  • Jimmy Apr 12, 2011 @ 20:56

    **J Story November 12, 2009
    Is there no way to upgrade an installed package to a downloaded .deb file?

    This is kindergarten stuff for .rpm systems, but google gives me no joy here.**

    I know that you can do a dpkg -i –force-overwrite (packagename.deb) and that will overwrite an existing installation.

  • ROBERT WATKINS Aug 8, 2011 @ 20:19

    please tell me where do i find the url to type :sudo apt -get install afce4? THANK YOU,,,BOB WATKINS,,,watkinsbob5@yahoo.com

  • Lee Apr 12, 2012 @ 20:30

    aptitude install apache2 php5 mysql
    Same syntax.

    From a message by Joey Hess on a Debian User List entry:

    Seven reasons why you should be using aptitude instead of apt-get.

    1. aptitude can look just like apt-get

    If you run ‘aptitude update’ or ‘aptitude upgrade’ or ‘aptitude
    install’, it looks and works just like apt-get, with a few enhancements.
    So there is no learning curve.

    2. aptitude sanely handles recommends

    A long-standing failure of apt-get has been its lack of support for
    the Recommends relationship. Which is a problem because many packages
    in Debian rely on Recommends to pull in software that the average user
    generally uses with the package. This is a not uncommon cause of
    trouble, even though apt-get recently became able to at least mention
    recommended packages, it’s easy to miss its warnings.

    Aptitude supports Recommends by default, and can be confgigured to
    support Suggests too. It even supports installing recommended packages
    when used in command-line mode.

    3. aptitude tracks automatically installed packages

    Stop worrying about pruning unused libraries and support packages from
    your system. If you use aptitude to install everything, it will keep
    track of what packages are pulled in by dependencies alone, and remove
    those packages when they are no longer needed.

    4. use aptitude as a normal user and avoid hosing your system

    Maybe you didn’t know that you can run aptitude in gui mode as a regular
    user. Make any changes you’d like to try out. If you get into a real
    mess, you can hit ‘q’ and exit, your changes will not be saved.
    (aptitude also lets you use ctrl-u to undo changes). Since it’s running
    as a normal user, you cannot hose your system until you tell aptitude to
    do something, at which point it will prompt you for your root password.

    5. aptitude has a powerful UI and searching capabilities

    Between aptitude’s categorical browser and its great support for
    mutt-style filtering and searching of packages by name, description,
    maintainer, dependencies, etc, you should be able to find packages
    faster than ever before using aptitude.

    6. aptitude makes it easy to keep track of obsolete software

    If Debian stops distributing a package, apt will leave it on your system
    indefinitly, with no warnings, and no upgrades. Aptitude lists such
    packages in its “Obsolete and Locally Created Packages” section, so you
    can be informed of the problem and do something about it.

    7. aptitude has an interface to the Debian task system

    Aptitude lets you use Debian’s task system as it was designed to be
    used. You can browse the available tasks, select a task for install, and
    then dig into it and de-select parts of the task that you don’t want.
    apt-get has no support for tasks, and aptitude is better even than
    special purpose tools like tasksel.

  • bruno & bronko Jul 30, 2012 @ 13:33

    what about:
    apt-get -s upgrade
    -s option simulates and apt-get action
    can be handy at times

  • zipizap Dec 4, 2013 @ 14:08

    Sharing my dpkg cheat-sheet, in case its usefull 🙂


  • kneekoo Dec 5, 2013 @ 5:50

    zipzap: Useful. Thanks! 🙂

  • Emily May 21, 2016 @ 6:40

    Awesome set of resources on apt and dpkg management!! Thank you so much for this, very valuable.

  • Rishabh Sep 15, 2016 @ 6:36


  • debianusa Jun 17, 2017 @ 12:45

    Thanks for cheat sheet, but I have some questions:
    I have “setup” a local deb server (more a smb folder containing all downloaded deb files since installation) By now I’m in a dependency mess, because synaptic creates error messages which I can’t solve anymore. What is the best strategy fo such a deb package dir (so far, !’ve installled everything new, dropped/sorted every downloaded package into their relase folderand their download date like jessie, 20170504 wheezy etc. but I’ve now to merge the packages into a new folder creating then with apt-ftparchive – mini-dinstall seems no option for me). Is there a better possibiliry?

Leave a Reply

Your email address will not be published.

Use HTML <pre>...</pre> for code samples. Still have questions? Post it on our forum