Manage your Linux Server via the Command Line Interface

Updated on November 21, 2023
Manage your Linux Server via the Command Line Interface header image

Introduction

When working with cloud-based servers, you should master the basic Linux commands to perform administrative tasks. These commands are important when installing applications, monitoring server resources, managing the file system, and more.

Although there are many GUI-based applications that you can use to manage your server, the command-line interface is free, fast, easy to use. It offers more control, especially when you're remotely connected to your server via an OpenSSH Client. In this guide, you'll learn how to use the most powerful and popular Linux commands on your server.

Prerequisites

To complete this tutorial, you need:

1. Linux Server Administration Commands

SSH to your server to run the following Linux administration commands.

sudo

The sudo command stands for superuser do. It allows you to run Linux commands with escalated privileges of the root user. You should pass sudo and the command name in one line as shown below.

$ sudo SAMPLE_COMMAND

You can learn more about sudo by reading the man page.

$ man sudo

See more articles about sudo.

date

Run the date command to display or set the current date and time on your server.

To see the current date:

$ date
Tue 05 Oct 2021 06:22:58 PM UTC

To set the date, use the `-s' parameter. For example:

$ date -s '2021-10-17 11:00:00'
Thu Oct 17 11:00:00 EDT 2021

You can learn more about date by reading the man page.

$ man date

reboot

The reboot command restarts your server.

$ sudo reboot

You'll lose your SSH connection and need to reconnect to the server after the operating system reboots. You can learn more about reboot by reading the man page.

$ man reboot

wget

Download files from the web using the wget command. For instance, to download http://www.example.com/index.html:

$ wget http://www.example.com/index.html
2021-09-28 07:47:30 (162 MB/s) - 'index.html' saved [1256/1256]

To specify the output filename, use the `-O' parameter:

$ wget -O newfile.html http://www.example.com/index.html
2021-09-28 07:47:30 (162 MB/s) - 'newfile.html' saved [1256/1256]

You can learn more about wget by reading the man page.

$ man wget

history

See the list of commands that you've previously run by using the history command.

$ history

To re-execute a command from your history list, use the ! symbol followed by a command.

  • !n : Refer to a command from your history list. For command number 109:

      $ !109
  • !-n : Refer to the current command minus n. For the previous command:

      $ !-1
  • !! : Refer to the previous command. This is a synonym for !-1.

      $ !!

There are several other options, search patterns, and substitutions available. See the man page for more information.

$ man history

clear

If your terminal screen is overcrowded, run the clear command to reset the screen.

$ clear

2. Linux File Management Commands

Use the commands below to manage directories and files in your Linux server.

pwd

In Linux, pwd is an acronym for print working directory. This command retrieves the path of your current working directory starting from root /.

$ pwd

mkdir

The mkdir stands for make directory. It allows you to create directories, which are also called folders in other operating systems.

Create a sample directory in your current location.

$ mkdir sample

In most cases, you'll use the mkdir command with the -p flag. This option tells Linux to create parent directories along the way if they don't exist.

For instance, if you attempt to run the command below without the -p flag, it should fail.

$ mkdir sample/abc/def

Output.

mkdir: cannot create directory `sample/abc/def`: No such file or directory

However, if you use the -p flag, the command will create both the sample and abc directories if they don't exist.

$ mkdir -p sample/abc/def

The Linux mkdir command is handy when creating directories for running multiple websites on your server, as shown below.

$ mkdir -p /var/www/example.com/public_html
$ mkdir -p /var/www/example.net/public_html
$ mkdir -p /var/www/example.org/public_html

cd

You can navigate to another directory by using the cd command which stands for change directory. For instance, cd to the new sample directory.

$ cd sample

Run the pwd command to see if you've switched to the new directory.

$ pwd

Output.

/home/SAMPLE_USER/sample

To move up one level in the directory structure, use the cd .. command.

    $ cd ..

To navigate back to your home directory, use the cd command with the tilde(~) character.

$ cd ~

ls

Use the Linux ls command to print a list of files in a directory. The output includes other sub-directories as well.

$ ls

Output.

sample

The ls command has different options that you can use to format the output. For instance, use the -l flag to show the list of files, including their sizes, time of modification, current owners, and permissions.

$ ls -l

Output.

    drwxrwxr-x 3 SAMPLE_USER SAMPLE_USER 4096 Sep 28 06:29 sample

You can also use the h flags to display the sizes of the files in a human-readable format.

$ ls -lh

Output.

total 4.0K
drwxrwxr-x 3 SAMPLE_USER SAMPLE_USER 4.0K Sep 28 06:29 sample

To display hidden files, pass the `a' flag.

$ ls -lha

Output.

drwxr-xr-x 7 SAMPLE_USER SAMPLE_USER 4.0K Sep 28 06:25 .
drwxr-xr-x 3 root    root    4.0K Sep 25 08:56 ..
-rw------- 1 SAMPLE_USER SAMPLE_USER 2.7K Sep 27 10:15 .bash_history
...
drwxrwxr-x 3 SAMPLE_USER SAMPLE_USER 4.0K Sep 28 06:29 sample

touch

Use the touch command to change a files' last access date without modifying the contents. If the file does not exist, it will create an empty file with zero length. This is useful when you don't have content to put into the file at the creation time.

$ touch sample_file.txt

Confirm the success of the touch command by running the ls -lh command.

$ ls -lh

Output.

drwxrwxr-x 3 SAMPLE_USER SAMPLE_USER 4.0K Sep 28 06:29 sample
-rw-rw-r-- 1 SAMPLE_USER SAMPLE_USER    0 Sep 28 06:47 sample_file.txt

mv

The mv command allows you to move a file or a directory to another location. You can also use it to rename files. Rename the sample_file.txt to sample_file.bk.

$ mv sample_file.txt sample_file.bk

Move the new sample_file.bk file to the /tmp directory.

$ mv sample_file.bk /tmp

rmdir

The rmdir stands for remove directory. You can use it to delete empty directories. Create a sample_2 directory and delete it.

$ mkdir sample_2
$ rmdir sample_2

rm

Use the rm command to delete files and non-empty directories. You should be careful when executing this command since it can break applications or render your system useless.

Delete the sample_file.bk in the /tmp directory.

$ rm /tmp/sample_file.bk 

To delete a directory and its contents, use the -r option. This allows you to delete the directory contents recursively. Create a sample_3 directory and a sample_4 sub-directory and delete them.

$ mkdir -p sample_3/sample_4
$ rm  -r sample_3

cp

In Linux, you can copy files and directories using the cp command. Normally, you need to specify the source and destination of the files.

Create a sample_2.txt file and copy it over to the /tmp directory.

$ touch sample_2.txt
$ cp sample_2.txt /tmp

This command is useful when tweaking settings on the base configuration files. Copy the default file to a new location with a new name to avoid losing the default settings.

For instance, before configuring the Apache virtual host file, create a backup copy so that you can restore the file in case you run into problems.

$ sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/000-default.conf.bk

chown

The chown command allows you to change the ownership of directories and files in your server. For instance, when you create directories as a superuser using the sudo command, the root user owns the directories. Therefore, to navigate between the new directories without permission issues, you should take ownership of the new directories by executing the chown command.

For instance, create the directory below.

$ sudo mkdir -p /var/www/example.net

Take ownership of the new directory as the current user.

$ sudo chown -R $USER:$USER /var/www/example.net

Also, you can assign ownership of the new directories to another user. For instance, www-data.

$ sudo chown -R www-data:www-data /var/www/example.net

chmod

The chmod command allows you to change read, write, and execute permissions for files and directories. Normally, you should use this command alongside the following permission numbers:

  • 0: No Permissions
  • 1: Execute permissions
  • 2: Write permissions
  • 3: Execute and write permissions
  • 4: Read permissions
  • 5: Read and execute permissions
  • 6: Write and read permissions
  • 7: Full permissions (Read, write, and execute permissions).

The basic syntax for the chmod command is.

$ chmod USER_PERMISSIONS GROUP_PERMISSIONS OTHERS_USERS_PERMISSIONS

For instance, to assign john full permissions to the /var/www/example.net directory and deny anyone from accessing it, execute.

$ chmod 700 /var/www/example.net

To give the user john full permissions(7) and assign only read and execute(5) permission to the group and the rest of the users, execute.

$ chmod 755 /var/www/example.net

There are several other options available for chmod; please see the man file for more information.

$ man chmod

cat

The cat (concatenate) command is useful when you want to read the content of a file and display the data in your shell window. For instance, use the cat command to display the content of your .bash_history file.

$ cat .bash_history

You can also display the content of multiple files using the cat command.

$ cat FILE_NAME_1 FILE_NAME_2

tail

Use the tail command to display the last parts of a file. This command is useful when you want to read log files to troubleshoot applications. To avoid displaying lots of content on the screen, specify the number of lines that you want to display when running the command.

$ sudo tail -10 /var/log/auth.log

Use the -f (follow) parameter to keep the file open and display any updates. This is useful when monitoring a log file.

$ sudo tail -f /var/log/auth.log

3. User Management Commands

You can check your current username, create new users, and change their passwords using the following Linux shell commands.

whoami

Use the whoami command to check your current username.

$ whoami

Output.

john

adduser

The adduser command is useful for creating user accounts in your system. This command should be run by root or a sudo user. For instance, create a user named mary.

$ sudo adduser mary

Follow the on-screen prompts to finalize setting up the account for the user.

passwd

You can change the password of a user by executing the passwd command. For instance, to change the password for user mary, run the command below.

$ sudo passwd mary

Enter and confirm the new password to update the user account.

4. Memory, Disk, and CPU Management Commands

Use the following commands to monitor your Linux server's memory, disk usage, and CPU load.

free

To view the available RAM, use the free command. Pass the -h option to display the figures in a human-readable format.

$ free -h

Output.

                total        used        free      shared  buff/cache   available
Mem:          981Mi       560Mi       103Mi       6.0Mi       317Mi       263Mi
Swap:            0B          0B          0B

du

The du command stands for disk usage. The utility allows you to gain disk usage information on your system.

$ sudo du -h /tmp

Output.

...

4.0K    /tmp/snap.lxd/tmp
8.0K    /tmp/snap.lxd
88K     /tmp

df

Use the df(disk free) command to display the total and available space in your system.

$ sudo df -h

Output.

Filesystem      Size  Used Avail Use% Mounted on
udev            474M     0  474M   0% /dev
tmpfs            99M  1.1M   98M   2% /run
/dev/vda1        25G  3.5G   21G  15% /
...

top

To display the active Linux processes running in your system, use the top command.

$ top

Output.

PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
...
1 root      20   0  170332   9408   4964 S   0.0   0.9   0:03.11 systemd
2 root      20   0       0      0      0 S   0.0   0.0   0:00.00 kthreadd
3 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_gp
4 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_par_gp
...   

5. File Searching Commands

Linux has five file searching commands: whereis, locate, which, type, and find. Each of them has its own characteristics and is designed for particular search scenarios.

whereis

The whereis command is used to search binary files, source code, and the online manual pages at several standard install directories for any program name specified.

Because whereis does not search every location on your system, any files out of these specific directories will not be found. For the same reason, you will get your search result quickly, whether found or not.

Also, it will not search for those commands which are built directly into the shell.

For example, if you want to find info about the ls command, run the following command on your terminal:

$ whereis ls

You will get some feedback like:

ls: /bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz

In the result, /bin/ls is the binary you want to locate, the other two are manpages for the ls program, and no source code for the ls program was found.

locate

The locate command is used to find files by name with the help of a database (/var/lib/mlocate/mlocate.db). This database is a snapshot of the layout of your filesystem. Any records in this database that match your query will be listed in the search result. By default, the locate command will use your query to match any part of the whole name of each record, including the pathname. Therefore, the number of matched files in the search result could be more than you expected.

As the database becomes outdated, the search result of the locate command becomes less accurate. You may notice files that no longer exist, or you won't see matches for newly-created files. By default, the mlocate.db database is automatically updated once a day. You can use the updatedb command to manually update it.

The search speed is very fast because the search is performed on the database instead of the filesystem.

If you run the following command:

$ locate ls

You will get many records instead of your expected result.

In order to make the search result more accurate, you can use the -b flag to restrict the search range, using your query to match only the basename of each record:

$ locate -b "\ls"

This time, you will get the location of each file exactly called ls on your filesystem:

/bin/ls

which

The which command will search for the command you specified in the environment variable PATH value and return the first result by default. If you are querying an alias, the which command will determine the actual command for the alias before performing your search.

The which command is also very fast because of its simplicity.

The usage of the which command is simple:

$ which your_command

If you want to show all of the matched commands instead of the first one, use the `-a' flag:

$ which -a your_command

Here is an example for searching for a command that has been aliased:

$ which ll

The search result would be:

alias ll='ls -l --color=auto'
    /bin/ls

type

By default, the type command will indicate how a command name would be interpreted. Possible results include an alias, a keyword, a function, a builtin, or a file. Just like the whereis command, the type command will only search in several standard install directories to answer your query.

Some examples for typing different commands:

  • A shell builtin command:

      $ type cd
      cd is a shell builtin
  • A binary file on the filesystem:

      $ type sudo
      sudo is /usr/bin/sudo
  • An alias:

      $ type ls
      ls is aliased to `ls --color=auto'

find

The ' find ' command is the most powerful among the five file searching commands introduced in this tutorial. Unfortunately, it is also the slowest one. Unlike the other four commands, the find command will search for your file on the entire filesystem, one i-node by one i-node. With the find command, you can use sophisticated query criteria to find every file you need and execute actions on the files found.

Search criteria for the find command is too sophisticated to explain in such a short article; here are a few examples instead.

Basic format of the find command:

find [path] [option] [action]

To find all files in the working directory and all of its sub-directories:

$ find

To find a file called aaa in your home directory and all of its sub-directories:

$ find ~ -name 'aaa'

To find all of the files in the filesystem that were modified in the last 24 hours:

$ find / -mtime 0

To find all of the files in the web directory and all of its sub-directories that belong to user nginx:

$ find /usr/share/nginx/html/ -user nginx

To find all of the files in the working directory whose permissions are 0744:

$ find -perm -0744

To find a file with the name aaa in the working directory and list its detailed info:

$ find -name 'aaa' -exec ls -l {} \;

Conclusion

In this guide, you've gone through the list of the most common Linux commands for everyday use when administering your cloud server. While the commands might seem confusing at first, with time, you'll get used to them once you begin to apply them in a production environment.