List of essential Linux commands for server management

post, Aug 1, 2021 on Mitja Felicijan's blog

Generate SSH key

ssh-keygen -t ed25519 -C "your_email@example.com"
-
-# when no support for Ed25519 present
-ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
-

Note: By default SSH keys get stored to /home/<username>/.ssh/ folder.

Login to host via SSH

# connect to host as your local username
-ssh host
-
-# connect to host as user
-ssh <user>@<host>
-
-# connect to host using port
-ssh -p <port> <user>@<host>
-

Execute command on a server through SSH

# execute one command
-ssh root@100.100.100.100 "ls /root"
-
-# execute many commands
-ssh root@100.100.100.100 "cd /root;touch file.txt"
-

Displays currently logged in users in the system

w
-

Displays Linux system information

uname
-

Displays kernel release information

uname -r
-

Shows the system hostname

hostname
-

Shows system reboot history

last reboot
-

Displays information about the user

sudo apt install finger
-finger <username>
-

Displays IP addresses and all the network interfaces

ip addr show
-

Downloads a file from an online source

wget https://example.com/example.tgz
-

Note: If URL contains ?, & enclose the URL in double quotes.

Compress a file with gzip

# will not keep the original file
-gzip file.txt
-
-# will keep the original file
-gzip --keep file.txt
-

Interactive disk usage analyzer

sudo apt install ncdu
-
-ncdu
-ncdu <path/to/directory>
-

Install Node.js using the Node Version Manager

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash
-source ~/.bashrc
-
-nvm install v13
-

Too long; didn't read

npm install -g tldr
-
-tldr tar
-

Combine all Nginx access logs to one big log file

zcat -f /var/log/nginx/access.log* > /var/log/nginx/access-all.log
-

Set up Redis server

sudo apt install redis-server redis-tools
-
-# check if server is running
-sudo service redis status
-
-# set and get a key value
-redis-cli set mykey myvalue
-redis-cli get mykey
-
-# interactive shell
-redis-cli
-

Generate statistics of your webserver

sudo apt install goaccess
-
-# check if installed
-goaccess -v
-
-# combine logs
-zcat -f /var/log/nginx/access.log* > /var/log/nginx/access-all.log
-
-# export to single html
-goaccess \
-  --log-file=/var/log/nginx/access-all.log \
-  --log-format=COMBINED \
-  --exclude-ip=0.0.0.0 \
-  --ignore-crawlers \
-  --real-os \
-  --output=/var/www/html/stats.html
-
-# cleanup afterwards
-rm /var/log/nginx/access-all.log
-

Search for a given pattern in files

grep -r ‘pattern’ files
-

Find proccess ID for a specific program

pgrep nginx
-

Print name of current/working directory

pwd
-

Creates a blank new file

touch newfile.txt
-

Displays first lines in a file

# -n <x> presents the number of lines (10 by default)
-head -n 20 somefile.txt
-

Displays last lines in a file

# -n <x> presents the number of lines (10 by default)
-tail -n 20 somefile.txt
-
-# -f follows the changes in file (doesn't closes)
-tail -f somefile.txt
-

Count lines in a file

wc -l somefile.txt
-

Find all instances of the file

sudo apt install mlocate
-
-locate somefile.txt
-

Find file names that begin with ‘index’ in /home folder

find /home/ -name "index"
-

Find files larger than 100MB in the home folder

find /home -size +100M
-

Displays block devices related information

lsblk
-

Displays free space on mounted systems

df -h
-

Displays free and used memory in the system

free -h
-

Displays all active listening ports

sudo apt install net-tools
-
-netstat -pnltu
-

Kill a process violently

kill -9 <pid>
-

List files opened by user

lsof -u <user>
-

Execute "df -h", showing periodic updates

# -n 1 means every second
-watch -n 1 df -h
-