In this article, let us learn about the command “sudo apt install”.
When I was a complete beginner and I needed to install something on my Ubuntu machine, I went online and typed in “How to install <software name> on Ubuntu” and it led me to a page with some commands which looked like this
sudo apt install <software name>
I was just happy that I was able to type something in the Terminal and that it actually worked and did what I wanted it to do! I did not pay much attention to what I actually typed in. I guess to beginners, it just feels like a magic spell to get something installed!
In this article, I have tried to explain what this command means from a beginner’s perspective avoiding unnecessary “technical terms” and I have tried to keep this article concise so that you can get through the entire article in about 10 to 20 mins max!
Let us see what this command does, how it does that, and the reason you need to enter this command every time you need to install an app on your Linux computer.
For those of you in a hurry, here is the short version of the answer!
The Short Version of the Answer
What is the meaning of the command “sudo apt install“? sudo apt install is the command used to download the latest available version of your desired application from an online software repository pointed to by your sources.list configuration file and and install that application on your Linux computer.
I can see that the above paragraph has too many “technical terms” (which I promised not to use!) but that is just the short version of the answer to explain the command “sudo apt install“, so do not worry if you don’t understand every word in that paragraph!
By the end of this article we will get back to this short answer version and by that time I am sure you will be able to understand what every word meant in the short answer above!
So let us begin!
sudo apt install
Let us start by exploring the answer to the question “What does apt do?”
The apt command is responsible for installation, removal, and updating of software in our system.
A good analogy is to think of your computer as a factory and the apt command as the manager in that factory who is responsible for the installation of new equipment, removal of equipment that is no longer needed, and update desired equipment to their latest versions, while maintaining records of the equipment names and versions which are currently present in the factory.
In the screenshot below I am trying to install the text editor named “gedit”.
Your output might look a bit different than mine, but the important things to note here are the first 2 lines.
Continuing with our “factory analogy”, if you “the factory owner” orders the manager to install a conveyor belt, the manager is smart enough to understand that you need an entire conveyor system, and you expect him to install everything for you.
Let’s assume the manager has a list of files with given to him by all the equipment part manufacturers about what parts each of them produce. So naturally, the first thing the manager will do is to have a look at the documents given by all the equipment manufacturers and information required regarding what are the parts available with each of them which are necessary to build the conveyor system.
As you can see the first line in the screenshot above says “Reading package lists… Done” which means that apt went ahead and read all the available software in the repos.
The next thing the manager need to do is to go ahead and do the research of what are the parts needed for the conveyor and make a shopping list.
As you can see, the second line in the screenshot says “Building dependency tree” which means the apt is trying to see which other packages are required to make our desired package, gedit to run.
You cannot install a belt for the conveyor, before installing the rollers and the conveyor motors, because a belt depends on the presence of a conveyor motor and a roller to do its job, hence roller, sensors and motors are dependencies for a conveyor belt!
Then once apt knows what software to download and where to download them, apt tells us what additional packages will be downloaded and installed and how much extra space will be needed. Once we confirm this list by typing the letter “Y” and press enter, apt will download and install everything for us.
This prompt can be thought of as the factory manager asking you to confirm if you are okay with the list of things that need to be bought, and how much space they will these parts occupy once you install a conveyor system in your factory.
If you still have an “incomplete feeling” about what this command means, read on for a longer and more informative answer where I explain the answers to the following questions
- Command Line Interface vs Graphical User Interface: What is the need to have these 2 interfaces?
- What is a command-line?
- What do the 3 words in our command (sudo, apt, and install) mean?
- Why do we need this command before we install software? and
- Where to get more information about these commands?
So let us carry on with our exploration of the Linux world!
Let us start by exploring the world of text-based command line interface!
Command Line Interface vs Graphical User Interface
Let us first begin with this basic question of why use the command-line interface in the first place! Why not simply download and install an app instead?
As you might already know there are 2 types of ways for us to interact with the computers
- Through the Graphical User Interface, a.k.a GUI and
- Through the Command Line Interface, a.k.a CLI
But, what is an “Interface”?
Interfaces can be thought of as the middleman between you and the machine, a way to make the machine understand what your wishes are. A TV remote is a good example of an interface, as this device acts as a middleman between you(the human) and your TV(the machine). Using a remote you can interact with your television, hence your TV remote is an interface!
Graphical User Interface
The graphical user interface is the interface we are all familiar with, where we use our mouse or the touch screen to click through various icons and perform the desired action on our computers. This interface was made to make the operations on computers easier for regular users who might not be as tech-savy as programmers or software engineers.
Command Line Interface
Before GUI, in the computing world, the uses/applications of using a machine like a computer were very limited and there was another way to run programs on the computers, which is via the CLI. Through CLI, which is a text-only interface, specialists can run their desired programs.
There are several advantages of CLI compared to the GUI. The 3 main advantages of CLI are listed below
- since the CLI came first, this means GUI is still playing “catch-up” and this means you can do more things through the CLI than through the GUI
- CLI is very resource-efficient (most of what you pay for in terms of hardware like CPU, GPU, mouse, touch-pad, touch-screen are all made for the main purpose of running the GUI. Because of the resource efficiency, almost all of the webservers and cloud infrastructure are run via CLI without a GUI.
- Once you become a power user of Linux on the CLI, you can do a lot of fun projects which you never thought possible! This can include things like hosting your own website straight from your laptop, or tweak your old laptop to run as smoothly as a freshly bought one!
Now that we have established the fact that the command line interface is very useful, let us learn a few basics of the CLI.
Let us start by answering the question, ‘what is a command-line?’
What is a command-line?
A command-line is a line of text which tells our computer to perform a specific action.
As you might already know the words used in the text are specific for a given purpose and not some random text.
For example, a computer will understand the command-line “sudo apt install” and not “please install software“!
Unfortunately, our computers have not reached a state where we can just order the computer around the way we see robots are instructed in science fiction movies. We are getting there with natural language processing AI, but there is an awful lot of processing involved, which is very inefficient.
Due to this inefficiency, voice input is never going to replace the good old command-line interface when it comes to cloud computing and data centers. This is because in data-centers are very power-hungry and better efficiency translates into lower power consumption and lower running costs, which means more profit for the company!
Next let us see the basic structure of a command-line.
The command-line usually consists of the following 4 parts
- options and
Among these 3 parts, the command is mandatory. sub-command, options, and arguments are optional parts though you will need them in most command-lines!
What do the 3 words in our command (sudo, apt, and install) mean?
Let us try to break the command line “sudo apt install” into its building blocks and try to figure out the meaning of each word using the example “sudo apt install gedit“
As you can see in the above picture, the command-line “sudo apt install” in question contains the command named “apt“, the sub-command named “install” and the argument named “gedit“. We have not used any options in this command line.
The term sudo stands for “super-user do“. This term is used to get administrative privileges so that we can install and remove software from our computer. Usually, sudo commands are followed by a password request, this is a security measure to prevent malware from getting automatically installed on our computers.
In our factory analogy, the manager needs the company credit card to make the purchases necessary to install the conveyor, so by using the the term “sudo” in our command and typing in the password, we are giving the manager the permission to use the company credit card!
To understand what command and sub-commands mean, you can think of the main command as an app and the subcommand as a button inside that app. So in essence, you are asking your computer to open the apt app and push the button named install!
What is apt?
APT stands for Advanced Packaging Tool which is a tool that is used to manage software in our system and apt is the software used to communicate this APT software management tool.
The words “manage software” in the above paragraph simply refer to these 5 basic tasks
- install software
- remove software
- upgrade software
- upgrade system
- maintain the list of software that is installed in our system
If you are interested to learn more about how software packages are managed in Linux I highly recommend reading the article in the link below.
Let us see how software in Linux is organized by answering the following questions.
What are packages in a Linux System?
Linux OS is basically made up of 3 parts
- The hardware
- The Linux Kernel and
- Software packages that work with the Kernel to give us a complete Operating System
In simple words, hardware, as we know, includes CPU, HDD, SSD, RAM, and all the other components that make up your computer. The kernel is a special software that takes all the available hardware resources and virtualizes and manages them. The software packages are typically applications that we run which can make use of these hardware resources by requesting access to them through the kernel.
Examples of software packages can include application software like text editors, word processors, etc. or they can be the GNU utilities like bash, cron, dd, etc., or they can be device drivers to talk to the hardware.
These packages are managed by a special class of software known as “Package managers” which are explained in the article linked here.
Next, let’s have a brief look at what is included in these “Packages” of software.
Contents of packages
The content of the packages managed by these package managers involves the following 4 main components
- Binaries or the executable programs
- metadata files containing the version, dependencies, signatures, and other relevant information
- documentation and manuals
- configuration files
These packages are stored online in servers. These places are called software repositories.
What are Software Repositories?
This is the next question we must address. Repositories (or repos for short) are basically a place where verified packages are stored for easy retrieval and installation. They can be online like the APT repository or they can be on a local folder or a DVD where you have a special collection of software that you need.
This is one of the strong areas of Linux against other operating systems like Windows and Mac OSX, because on the 2 latter OSes we usually need to go to the software vendor’s website to download a software package and manually install them, whereas in Linux you can just type one line of code to get your desired software!
Also because we need to go-to some untrusted vendor website to download software, which are not curated by the OS, there can be security issues where a malware could be come along with the download, whereas in Linux as long as you stick to the official software repositories, you don’t need to worry about security issues as these software are already verified before being stored in the repo!
Windows and Mac OSX are improving this situation through their app-stores but Linux is miles ahead of other OSes in this race!
You can have several repositories from which you can download and install these packages. These can be
- official repos of your particular distro (some have guaranteed support while others are not entirely supported) and
- 3rd party repos
What is a Package Source List?
This is a list of packages available for installing on a given distro. This list is maintained by your Linux machine. The information in this list usually includes the locations of various repositories from which software can be installed. These locations are usually on the internet.
This list is often stored in the /etc/apt directory. You can view and edit this list the same way you can view any other text files using one of your favorite text editors like vs-code, gedit, nano or vim.
If you are using Ubuntu or one of its derivatives, you can also view this list by typing in the following command in the Linux terminal
The screenshot below shows the output of the above command.
As you can see from the above screenshot, this list basically contains some URLs to locations on the internet. From these locations, further information can be collected like
- the latest bug fix updates
- the latest version of each available package in the main repo
- the latest version of each available package in the partner repos
If a particular URL has “#” in front of it, it will be ignored as comments.
Let’s go ahead and visit one of these repos to see what it actually contains. You can try going to this link. The screenshot below shows its contents.
Downloading and extracting the Sources.gz file gives a file named “Source” with no file extension. You can open it using any text editor and it reveals a massive file with more than 28,000 lines!
The screenshot above shows one of the packages named zsh, and the information it contains.
zsh is an alternative of bash shells, if you do not know what these packages are for, just focus on the main point here which is as you can see it contains information like
- the latest version of the software
- the dependencies of this particular software etc.
The Short Version of the Answer Revisited!
Now that we have seen all the necessary building blocks to answer the question in this article’s title, let us get back and visit what we saw in the section “The Short Version of the Answer” at the beginning of the article!
In the screenshot below I am trying to install the text editor named “gedit”.
Your output might look a bit different than mine, but the important things to note here are the first 2 lines.
As you can see the first line says “Reading package lists… Done” which means that my computer went ahead and read all the available software in the repos.
The second line says “Building dependency tree” which means the apt is trying to see which other packages are required to make our desired package, gedit in this case to run.
Then once apt know what software to download and where to download them, apt tells us what additional packages will be downloaded and installed and how much extra space will be needed. Once we confirm by typing the letter “Y” and press enter, apt will download and install everything for us.
So in essence, what we are doing when we enter this “sudo apt install” command is we are asking our Linux machine to go and read these lists and download the latest version that is available on the software repository and install them in our computers.
Where to get more information about these commands?
So the next logical question to ask is, is there a better way to quickly remind yourself of what this command means without going onto the internet?
The answer is yes, it is possible and the best way to do this is by using the man command from the CLI!
man stands for manual and is used to get information about a given command along with the options and arguments the command supports. For example for our command “apt” try entering the following command-line on your terminal.
and you will get something similar to the screenshot below
To scroll this page, you can use the Enter button to go one line at a time, or you can use the space-bar to go one page at a time. If you wish to close this and get back to the terminal, just press the key Q
Now that you know how to move around man pages, let us see if what we just learned is there on the man page for the apt command.
As shown in the screenshots above, if you have a look under the Description sub-heading, you will see the following lines.
apt provides a high-level commandline interface for the package management system. It is intended as an end user interface and enables some options better suited for interactive usage by default compared to more specialized APT tools like apt-get(8) and apt-cache(8).apt man page
install, reinstall, remove, purge (apt-get(8))
Performs the requested action on one or more packages specified via regex(7), glob(7) or exact match. The requested action can be overridden for specific packages by appending a plus (+) to the package name to install this package or a minus (-) to remove it.
A specific version of a package can be selected for installation by following the package name with an equals (=) and the version of the package to select. Alternatively the version from a specific release can be selected by following the package name with a forward slash (/) and codename (buster, bullseye, sid …) or suite name (stable, testing, unstable). This will also select versions from this release for dependencies of this package if needed to satisfy the request.apt man page
As you can see, we can get the needed information from within the Linux CLI! This is one of the many features of CLI that is very useful especially when you know what command to use but you don’t know what option to use with the command to achieve what you desire!
Also if you read the man page documentation above you can notice that by default the stable version (thoroughly tested to be free of any mistakes/bugs) will be downloaded and installed, but if you wish you can even go for testing version (no mistakes/bugs found as of yet, but thorough testing is not completed yet) or even the unstable version (there are known mistakes/bugs which can cause the software to crash) if a latest feature you need is not available on the stable version.
Another point worth noting here is that there are 2 command apt and apt-get which are capable of doing similar things like updating sources list, updating installed packages and adding/removing packages. They are both useful in special scenarios, you can read about them in the article below.
Alright, I will stop here, hope you have enjoyed reading this article and found this article useful!
Feel free to share it with your friends and colleagues!
Here are some of our other articles that might be interesting to you!