Levels 5–8: Intermediate

Contents

Level 5 — Process Management

Linux runs hundreds of processes at once. You need to control them.

Command What it does
ps aux List ALL running processes (all users)
ps aux \| grep nginx Find a process by name
kill PID Send SIGTERM (polite stop) to process
kill -9 PID Send SIGKILL (force stop, cannot be ignored)
jobs List background jobs in current shell
bg Resume a stopped job in the background
fg Bring background job to foreground
command & Start a command directly in the background
top Live process viewer (q to quit)
lsof -i :80 Show what process is using port 80

ps aux columns:

Column Meaning
USER Owner of the process
PID Process ID
%CPU CPU usage
%MEM Memory usage
STAT State: R=running, S=sleeping, Z=zombie, T=stopped
COMMAND The command that was run

kill -9 cannot be caught or ignored by the process — it terminates immediately with no cleanup. Use it only when a normal kill has failed.


Level 6 — Text Processing

Transform data at machine speed without a GUI.

Command What it does Example
cut -d: -f1 file Extract field 1, delimiter : cut -d: -f1 /etc/passwd
awk '{print $1}' file Print first field of each line Column extraction
awk '$2 > 50' file Filter rows by condition Numeric comparisons
awk 'END{print sum}' file Run code after all lines Totals and summaries
sed 's/old/new/g' file Replace all occurrences Find and replace
sed '/pattern/d' file Delete lines matching pattern Strip noise
sed -n '2,5p' file Print lines 2–5 only Extract a range
head -n 10 file First 10 lines Preview
tail -n 10 file Last 10 lines Recent entries
tr 'a-z' 'A-Z' Translate/convert characters Case conversion

awk built-in variables:

Variable Meaning
$0 Entire line
$1, $2 Fields 1, 2…
$NF Last field
NR Current line number
NF Number of fields on current line
FS Field separator (default: whitespace)

Level 7 — Networking

Linux is the internet. Know how to interact with it.

Command What it does
ping -c 4 host Test connectivity, 4 packets
curl url HTTP GET request, print response
curl -o file url Download URL to file
curl -X POST -H 'Content-Type: application/json' -d '{...}' url POST JSON
wget url Download file (saves automatically)
ssh user@host Connect to remote server
ssh -i ~/.ssh/key user@host Connect with specific key
scp file user@host:/path/ Copy file to remote server
ss -tlnp Show listening TCP ports with process names
netstat -tlnp Same (older tool, still widely available)

curl common flags:

Flag Meaning
-o file Save output to file
-O Save with remote filename
-L Follow redirects
-s Silent mode (no progress)
-I HEAD request only (headers)
-u user:pass Basic authentication
-k Skip SSL certificate verification

Level 8 — Shell Scripting Basics

Automate everything. Scripts are commands in a file.

Script Structure

#!/bin/bash
# Every script starts with a shebang — tells the OS which interpreter to use

NAME="BashQuest"
echo "Hello from $NAME"
Concept Syntax Example
Variable NAME=value NAME=Tony
Use variable $NAME or ${NAME} echo $NAME
Command output $(command) NOW=$(date)
If statement if [ cond ]; then ... fi if [ -f file.txt ]; then
For loop for i in list; do ... done for i in 1 2 3; do echo $i; done
While loop while condition; do ... done while true; do sleep 1; done
Function name() { ... } greet() { echo "Hi $1"; }

File test operators:

Test True when
-f file File exists
-d dir Directory exists
-e path File or directory exists
-z "$var" Variable is empty
-n "$var" Variable is not empty

Always quote variables in tests: [ -f "$FILE" ] not [ -f $FILE ]. An unquoted variable with spaces breaks the test.