How-To Guides

Task-shaped, not command-shaped. Nobody sits down wanting to "use tar" — they want to unpack a file. Each guide opens with the command that does the job, then explains what it does, the variants you will need, and the edge cases that bite.

For the tool itself in depth, the command reference is the place. For something that is already broken, start at the error messages.

Each page follows the same shape on purpose. The command that does the job comes first, because when you are mid-task you need the answer, not a history of Unix. Then the steps, each with the reasoning behind it — because the second time you meet the problem you want to solve it yourself. Then the tips that separate someone who copied a command from someone who understands it: the trailing slash that changes what rsync does, the dry run before a destructive flag, the flag that makes a search a hundred times faster.

If you would rather build the skill than look things up, the 60-lesson course teaches these commands in a real simulated shell, checking each one as you type it.

Check disk space in Linux

See how much space is left, and find out what is using it.

$ df -h
Extract a .tar.gz archive

Unpack tar.gz, tar.bz2, tar.xz and zip archives from the command line.

$ tar -xzf archive.tar.gz
Free a port that is already in use

Find which process holds a port and stop it cleanly.

$ sudo ss -tlnp | grep :3000
Find and replace text in files

Replace text in one file or across a whole project, safely.

$ sed -i 's/old/new/g' file.txt
Make a script executable

Give a script permission to run, and understand why it needs it.

$ chmod +x script.sh
Search text inside files

Find which files contain a word, and exactly where.

$ grep -rn "text" .
Check memory usage

See how much memory is really available, and which process is eating it.

$ free -h
Copy files to or from a remote server

Move files between machines with scp and rsync, over the same encrypted connection.

$ scp file.txt user@server:/path/
Search recursively with grep

Search every file under a directory with grep, show filenames and line numbers, and skip noisy folders.

$ grep -rn "pattern" .
Search with grep ignoring case

Make grep match Error, ERROR and error with one option.

$ grep -i "error" app.log
Search for multiple patterns with grep

Match several words with grep using -e or extended regular expressions.

$ grep -E "error|warning" app.log
Set a file to permission 755

Understand what chmod 755 means and when it is appropriate.

$ chmod 755 script.sh
Set a file to permission 644

Learn what chmod 644 means and why it is common for ordinary files.

$ chmod 644 file.txt
Run a script in Linux

Run Bash and executable scripts correctly using an interpreter, execute permissions and a shebang.

$ ./script.sh
Connect to a Linux server with SSH

Connect securely to a remote Linux host using username, hostname, port and SSH key.

$ ssh user@server
Find the process using a port

Identify the PID and program listening on a Linux TCP port.

$ sudo ss -ltnp | grep :3000
Find large files in Linux

Locate large files without crossing into other mounted filesystems.

$ find / -xdev -type f -size +500M -print 2>/dev/null
Find files by name in Linux

Locate files and directories by exact name or wildcard pattern with find.

$ find . -type f -name "*.log"
Stop a process in Linux

Find a process, send it SIGTERM first, and use SIGKILL only when necessary.

$ kill PID
Find a process ID in Linux

Locate a process PID with ps, pgrep and pidof before inspecting or stopping it.

$ pgrep -af process-name
Search Bash command history

Find a command you ran before using history, reverse search and grep.

$ history | grep "docker"
List hidden files in Linux

Use ls to show hidden files and directories, including .env and .git.

$ ls -la
Copy a directory in Linux

Copy a directory and its contents with cp, including hidden files and nested folders.

$ cp -r source/ destination/
Move files and directories in Linux

Move or rename files and directories with mv, including practical overwrite precautions.

$ mv file.txt archive/
Delete a directory in Linux

Remove empty or non-empty directories safely with rmdir and rm -r.

$ rm -r directory/
Create nested directories in Linux

Use mkdir -p to create a directory tree in one command without errors for existing parents.

$ mkdir -p project/src/components
Count lines in a Linux file

Count lines, words and bytes with wc, with useful variations for logs and source files.

$ wc -l file.txt
View the end of a file

Use tail to inspect recent log entries and control how many lines you see.

$ tail -n 50 app.log
Watch a Linux log file in real time

Follow new log entries with tail and handle log rotation correctly.

$ tail -f /var/log/app.log
List running processes in Linux

Use ps to inspect running processes, PIDs, users and commands.

$ ps aux
Stop a process by name

Find matching process IDs with pgrep and terminate them safely.

$ pkill -TERM process-name
Download a file with curl

Download files with curl while preserving the remote filename and handling redirects.

$ curl -LO https://example.com/file.zip
Download a file with wget

Download files from HTTP or HTTPS with wget and save them to a chosen location.

$ wget https://example.com/file.tar.gz
Rename a file in Linux

Rename files and directories with mv, including names containing spaces.

$ mv old.txt new.txt
Identify a file type in Linux

Use file to identify text, archives, executables and other file formats from the command line.

$ file archive.tar.gz