Useful Terminal Commands for Linux, macOS and Ubuntu
Using the terminal is a powerful way to get things done on a computer and in some cases it is the only way to achieve things.
With that In mind, I decided to create this list of my favourite Terminal commands. Some of them are essential for properly working with Terminal but I have included them anyway since there will be many who are not aware of them.
And by the way, all of these commands should work on any popular Unix-like system including, Linux, Ubuntu and macOS.
List Files and Directories
ls command is fundamental to working in the terminal, however, there are some additional features it offers to make it more useful. Find out more information about the ls command.
One must know the
cd command to navigate the file system using a terminal. In the second argument of
cd you can provide a relative or absolute path to the directory you wish to move to.
Move Up The Directory Hierarchy
cd followed by
.. (two dots) will move the current working directory up one level. To traverse up the file system multiple times you can use the
cd command like this:
Print Working Directory
pwd will return the full path to your current working directory. This can be super-handy to quickly identify if the next command you are to execute will indeed run from the location you intended it to be.
This isn't a “command” but very useful. Every time you are typing in a terminal you can press the
tab key to autocomplete whatever you began typing. This can be used on file names, directories, even command utilities.
tab to autocomplete the long file name:
Piping Terminal Utilities
Piping is one if the most powerful features of Unix and allows one to chain multiple utilities into one command. Let's say we want to
tail the output of a log file but we only want lines containing certain keywords to be returned in the output. After the
tail command, we can type
| (pipe) followed by
grep which will get the output from
tail and filter-out lines we are not looking for.
sudo tail -f /var/log/nginx/access.log | grep "example.com"
Pro-tip - you can chain as many pipes as you wish.
cp source_file target_file
Allows one to conveniently copy a source file to a new location. Directories can be copied by adding the
-R flag before the source_file.
mv source_file target_file
mv allows one to move a source file to a new location in the file system. It is also a handy way to rename files.
Securely Copy Files
scp [options] [[email protected]] [[email protected]]
scp command provides functionally for securely uploading and downloading files within local networks and between remote servers. I have produced an article on the scp command which covers how to use it in detail.
grep [options] pattern [file...]
Grep is a powerful terminal utility that you can use to search for patterns in files across your system. You can use it to search a single file or multiple files and it will return matches on a line-by-line basis. Read more about the grep command.
Which is one of my favourite terminal commands because it will tell you where command utilities are being run from. If you have recently updated a terminal utility and need to check if you are indeed running what you just installed which can let you know right away.
Wget is a command-line utility for downloading files from remote locations using URL's. It is available most Linux distributions, though for others and macOS you will need to install it.
sudo apt install wget
The easiest way to get wget for macOS is to install it VIA Homebrew.
brew install wget
wget [options] [url]
The touch command can be used to create an empty file or update the timestamps on an existing file by passing in the
touch -a existing_file.txt
The top command provides a system overview of resource usage. It provides a list of currently running programs and how much memory and CPU cycles they are using.
Htop is essentially a feature-rich version of
top. It provides a much cleaner, customisable interface as well as the ability to order the processes by any of the columns in the overview table such as CPU usage. This can be done by simply clicking on the column header.
There is a good chance you will need to install
sudo apt install htop
brew install htop
To run it just type in htop and hit enter:
Rm is another standard Linux command-line utility that packs in a lot more functionality than many are aware of. I have written a separate article on how to delete directories using rm as well as some of its other useful functions.
Again another “must-know” command-line utility. Sudo allows a user to run commands like they were the root user. Of course, you will need to enter the root user account password for the command to run.
sudo nano /etc/hosts
Typically you will need to run a command as
sudo for system-level files or other files with restricted read/write permissions.
This command stands for change owner and can be used to change the owner and group of a single file or recursively through directories using the
chown [options] owner[:group] files...
This command stands for change mode and is used to change the permissions of files. I have made an article which explains how to use the chmod command and what the file permissions flags mean.
chmod [permissions] [options] files...
The mkdir command is used to create new directories.
mkdir [-pv] [-m mode] directory...
Nano is a simple command-line text editor that you can use to create and edit plain text files. If the file name you specify in the
nano command does not exist on the file system it will create a new one.
Vim is another popular command-line text editor. It is similar to nano though it has many more rich features for searching and navigating through files making it a good option for editing code VIA the command-line. It does require some extra knowledge to use, which I have detailed in this article.
SSH is a powerful terminal utility used for connecting to remote servers securely. For server administrators who need to quickly perform some maintenance,
ssh is often the preferred method of connecting. Once connected to a remote machine VIA SSH you can type terminal commands like you were doing them on your local machine.
Show Disk Usage
df is one of the most useful terminal commands in my opinion because it is so simple and will quickly show you an overview of file system usage. You can add the
-h option to display disk usage in a human-readable format.
Filesystem Size Used Avail Capacity iused ifree %iused Mounted on /dev/disk1s1 233Gi 231Gi 1.2Gi 100% 2254441 9223372036852521366 0% / devfs 196Ki 196Ki 0Bi 100% 678 0 100% /dev /dev/disk1s4 233Gi 966Mi 1.2Gi 45% 1 9223372036854775806 0% /private/var/vm
Rsync is a powerful utility which provides similar functionality to auto-syncing file backup services such as Dropbox. The great thing about
rsync is it only downloads files that are missing/different from your backup, saving server bandwidth.
rsync -av -e ssh [email protected]:/mnt/volume_1 /Volumes/Portable\ HD
I am going to be writing a full post on how to use
rsync in detail because there is quite a lot involved in using it and several things to consider when backing-up files.
Tail is a handy utility, which prints the last ten lines of a file. Tail is quite nice for monitoring files that are auto-generated such as log-files as you will get a live feed of the new updates to the file.
This command displays disk usage based on your current working directory. It can be quite powerful when other commands are piped-in to organise the output from
du. Let's say we wanted to find the top ten largest files in a directory:
du -hsx * | sort -rh | head -10
432M node_modules 55M public 52M vendor 15M Archive.zip 13M storage 2.1M resources 816K package-lock.json 424K app 256K yarn.lock 244K database
stat can use used to provide detailed information about a set of given files or file systems.
stat [OPTION]... FILE...
ping is one of the most popular terminal commands and is used for testing the reachability of hosts. A simple way to use ping would be to check if you are connected to the internet by pinging google.com
Cycle Through Previous Commands
Did you type a long command in but made a tiny mistake? You can get your previous command and ones before that by pressing the
arrow up key. It's not a "command" though certainly something you will find helpful.
Show Command History
history to get a full list of your previously entered commands.
Clears the terminal screen. Useful if you have a load of mess on the terminal due to something crashing.
Curl provides a convenient way of downloading files from a server. It supports a variety of protocols including; HTTP, FTP, IMAP, POP3, SCP, SFTP and SMTP.
curl -O http://example.com/download.pdf
Reboots the machine. You will most likely have to run this command in conjunction with sudo.
Make a file of any user-specified size.
mkfile 1g text.txt
These are some of my favourite terminal commands for a variety of reasons. Yes, many people reading this will already know the basic ones but the idea of this article is to bring a mix of useful commands for people of all levels of knowledge.