Shell Essentials

💻 1. Why Master the Shell?

Linux servers power the internet—from web hosts to cloud infrastructure. The shell (or terminal) is your direct line to the system’s engine, enabling precise control, automation, and troubleshooting far beyond a graphical interface.

Analogy: Think of the shell as the engineer’s control panel—text commands replace buttons and levers, offering both power and efficiency.




🖥️ 2. What Is a Terminal & Shell?

  • Terminal Emulator: A GUI application (e.g., GNOME Terminal, Windows Terminal, iTerm) that displays a text-based interface. Acts like a virtual receptionist in a GUI environment.
  • Shell: The command-line interpreter (e.g., Bash, Zsh, Fish) that reads your commands and interacts with the kernel.

Key Distinction: The terminal is where you type; the shell is what processes your input.




Shell

Key Feature

Bash

Default on many distros, scripting ubiquity

Zsh

Programmable completion, themes (Oh My Zsh)

Fish

User-friendly syntax, autosuggestions

Tcsh/Csh

C-like syntax, history completion

Tip: Start with Bash—its widespread use guarantees compatibility and abundant learning resources.




📄 4. Terminal Multiplexers

  • Tmux: Split windows, multiple sessions, detach/reattach.
  • Screen: Similar to tmux, widely available on servers.

Use Case: Run long tasks in one pane while experimenting in another—no need to open new windows.

# Start a new tmux session named "pentest"

tmux new -s pentest


# Split the window vertically

Ctrl+b then "%"


# Detach session (keep processes running)

Ctrl+b then d


# Reattach later

tmux attach -t pentest




⚙️ 5. Basic Shell Operations

Task

Command Example

Description

Listing files

ls -lah /var/log

Show hidden and human-readable sizes

Changing directories

cd /etc/nginx

Navigate to Nginx config directory

Viewing file content

cat /etc/os-release

Display OS release info

Finding files

find /home -type f -name "*.conf"

Locate all .conf files under /home

Searching text

grep -R "ERROR" /var/log

Recursively search for 'ERROR' in logs

Practice: Combine commands using pipes:

sudo journalctl -u sshd | grep "Failed password"

Filters SSHD logs for failed login attempts.