The 9 Linux Commands I Use Most… and What They Can Do for You

  • The command line is not mandatory to use Linux.
  • But if you really want to get the most out of it, you should learn it.
  • Some commands are much more useful than others.

Before we start, I want to make something clear: using the command line is not a requirement to use Linux. I say this because the idea of “having to type commands” often scares new users, and my goal for years has been precisely to make Linux accessible to all kinds of people.

That said: after more than two decades using Linux, I feel completely comfortable with the terminal and tend to use it by default for many tasks. Why? Because it is often more efficient than a graphical interface. I can keep a terminal window open all the time and do almost everything without taking my hands off the keyboard.

So yes, there are a series of Linux commands that I use every day. These commands help me do my work, keep systems in good shape, and understand what’s happening “under the hood”.

Everyone uses Linux differently, so your ideal list may vary. But these are the nine commands that I almost certainly run daily on my machines.


1. top

I always like to know what’s happening inside, especially if I notice something’s off. When that happens, my go-to command is top.

With top, I can quickly see how much resources a process is using: CPU, memory, runtime, etc. Also, I can see the associated PID (Process ID) for each app or command, and if needed, kill it directly from there.

I use top instead of a graphical tool because I can SSH into a remote machine and get the same information in text mode. It’s fast, lightweight, and reliable.

To open top, just run:

top

2. ssh

Arguably, ssh might be the most important command on this list.

Why? Imagine a virtual machine or process hangs, and your graphical environment stops responding. Instead of rebooting forcefully, I can connect from another machine using ssh, run top to find the problematic PID, and kill it with kill PID. Problem solved.

I use ssh constantly to access other machines on my network (or outside it) and perform administrative tasks: updating servers, checking logs, deploying applications, etc. I also use scp (part of the same package) a lot to transfer files from one place to another.

Connecting via SSH is very easy. For example, to connect to a server on your local network:

ssh [email protected]

3. sudo

This is without a doubt one of the commands I run most often daily. Why? Because almost everything related to installing software, updating packages, managing services, or modifying system configuration requires administrator privileges.

Without sudo, I would have to switch to the root user first and do everything from there, which is less secure and more cumbersome. With sudo, I get administrative privileges only for that command and they are revoked automatically afterward.

It’s one of the best design decisions in the Unix/Linux ecosystem and remains essential today.

Using it is as simple as prefixing the command that needs elevated permissions with sudo. For example:

sudo apt upgrade -y

4. apt

Since I usually work with Debian or Ubuntu-based distributions, apt is one of my must-haves. It’s the package manager I use to install, update, search, and remove software from the terminal.

apt makes it very easy to manage applications and even fix broken installations (sudo apt install -f has saved me more than once).

Graphical frontends for apt are very good, but there are tasks that only the terminal handles comfortably, such as cleaning orphaned packages (apt autoremove) or removing configuration files. That’s why I almost always go back to the command line.

For example, to install GIMP:

sudo apt install gimp -y

5. wget

wget is one of those commands you don’t use every minute, but when you need it, there’s no substitute.

It’s used to download files from the terminal — whether a binary, an installation script, or source code for an application. It’s especially useful on servers without a graphical environment, where opening a web browser isn’t an option.

Whenever I’m setting up a new server or installing software from a direct URL, wget usually comes into play.

For example, to download the source code of the latest version of GIMP:

wget https://download.gimp.org/gimp/v3.0/gimp-3.0.6.tar.xz

6. ps

The ps command is essential when you want to inspect processes.

Although top already provides a lot of information, sometimes I need a “snapshot” with more detail that I can filter. That’s where ps combined with grep comes in.

For example, if I want more details about a browser like Zen Browser —runtime, PID, user, etc.— I can use ps to list processes and filter by name:

ps aux | grep zen

This returns only lines containing “zen,” so I can quickly locate the process I’m interested in.

ps is especially useful when you want to do things like:

  • See how many instances of a program are running.
  • Check which user launched a process.
  • Get the exact PID to use with kill or renice.

7. tail

Reviewing logs is a classic task for system administrators and advanced users. It’s the most direct way to understand what’s happening with a service or application.

The problem is that many log files are huge. If you open them with less or a text editor, you end up scrolling through thousands of lines that don’t add much value.

This is where tail comes in. It shows only the end of the file, which is usually where the most recent and relevant information is. With the -f option, you can follow in real time how new entries are being written, perfect for debugging errors.

For example, to monitor the system log (/var/log/syslog) live:

tail -f /var/log/syslog

By default, tail shows the last 10 lines. If you want to see only the last line, you can use:

tail -f -n 1 /var/log/syslog

This minimizes noise and focuses on what’s happening right now.


8. systemctl

systemctl is the central control tool for services and units managed by systemd, which is present in most modern distributions.

With this command, I can:

  • Start and stop services.
  • Check their status (active, failed, down, etc.).
  • Configure a service to start automatically at boot.
  • View associated logs (along with journalctl).

If you want to keep a server healthy, sooner or later you’ll need to work with systemctl.

For example, to start the SSH daemon:

sudo systemctl start ssh

To check its status:

systemctl status ssh

To stop it:

sudo systemctl stop ssh

To restart:

sudo systemctl restart ssh

To enable it to start automatically at boot:

sudo systemctl enable ssh

To disable it from starting at boot:

sudo systemctl disable ssh

You can also enable and start it immediately:

sudo systemctl enable --now ssh

9. grep

If I had to choose the most frequently appearing command in my daily workflow, it would be grep. It’s the Swiss Army knife for text filtering in Linux.

grep is used to search for patterns within text: lines containing a specific word, a regex, an error, a username, an IP address… And the best part is combining it with other commands via pipelines (|).

Some common uses:

  • Filter processes by name (like we saw before): ps aux | grep nginx
  • Search for specific errors in logs: journalctl -u ssh | grep "Failed password"
  • Recursively search within configuration files: grep -R "stackscale.com" /etc

Once you get used to piping the output of other commands into grep, your productivity in the terminal skyrockets. Instead of sifting through hundreds of lines, you see only what matters to you.


These nine commands — top, ssh, sudo, apt, wget, ps, tail, systemctl, and grep — cover a large part of what I do every day in Linux: monitoring, remote access, package management, service control, and log analysis.

It’s not necessary to memorize every advanced option for each command, but mastering their basic uses will give you a powerful toolkit to keep your Linux systems under control, troubleshoot faster, and work as if the terminal were an extension of your hands.

Scroll to Top