The command line feels intimidating until you realise it is just a text interface to the same file system your GUI sits on top of. Once that clicks, everything else follows quickly. In 2026 the terminal is faster than ever — AI-assisted completions, modern drop-in replacements for classic Unix tools, and shells that understand your project out of the box.
What changed in 2026
- AI completions are built-in. Tools like
warp and the gh copilot CLI explain commands and suggest the next step inline.
- Modern rewrites dominate.
ripgrep, fd, bat, eza, and zoxide are standard on most dev machines; they are faster and more ergonomic than their POSIX ancestors.
- Shells improved. Zsh + Oh My Zsh (or Starship prompt) gives you autosuggestions, syntax highlighting, and git status in your prompt without plugins.
- Windows caught up. WSL 2 on Windows 11 and PowerShell 7 mean one skill-set covers all platforms.
Essential navigation commands
pwd # print working directory
cd ~/projects/myapp # change directory
ls -lh # list with human-readable sizes
ls -la # include hidden files
cd - # jump back to previous directory
Memorise these five and you can find anything on the filesystem.
Finding files and text
# Modern: fd (install via brew install fd)
fd "*.ts" src/
# Classic fallback
find . -name "*.ts" -not -path "*/node_modules/*"
# Modern: ripgrep (brew install ripgrep)
rg "TODO" --type ts
# Classic fallback
grep -r "TODO" src/ --include="*.ts"
fd and rg respect .gitignore automatically and are 5–10× faster than their POSIX counterparts on large repos.
What changed in 2026
| Classic tool |
2026 replacement |
Why switch |
ls |
eza |
Colour, icons, git status |
cat |
bat |
Syntax highlighting, line numbers |
find |
fd |
Faster, gitignore-aware, simpler syntax |
grep |
ripgrep (rg) |
10× faster on large trees |
cd |
zoxide (z) |
Frecency-based jump to recent dirs |
Pipes and redirection
# Pipe stdout of one command into stdin of next
ls -la | grep ".ts" | wc -l
# Redirect stdout to a file (overwrite)
npm test > test-output.txt 2>&1
# Append
echo "done" >> build.log
# Pipe with ripgrep and count matches
rg "error" logs/ | wc -l
Pipes let you compose simple programs into powerful one-liners. 2>&1 routes stderr into stdout so you capture everything.
How to pick your shell
| Shell |
Best for |
Strengths |
| Bash |
Scripting, Linux servers |
Universal, POSIX-compliant |
| Zsh + Oh My Zsh |
Mac/Linux daily driver |
Plugins, autosuggestions |
| Fish |
Beginners |
Out-of-the-box UX, no config needed |
| Nushell |
Data wrangling |
Structured output (tables, JSON) |
For most developers on macOS in 2026: Zsh + Starship prompt is the sweet spot.
Aliases and shell functions
Add to ~/.zshrc (or ~/.bashrc):
# Aliases
alias ll="eza -lh --git"
alias gs="git status"
alias dc="docker compose"
# Shell function (more powerful than alias)
mkcd() {
mkdir -p "$1" && cd "$1"
}
Run source ~/.zshrc to reload without opening a new terminal.
How to start
- Open your terminal and run
pwd — confirm you know where you are.
- Navigate to a project with
cd ~/projects/<name>.
- Run
ls -la — spot the hidden .git folder.
- Install modern tools:
brew install eza bat fd ripgrep zoxide.
- Add 3 aliases that replace commands you type every day.
Common mistakes
Using absolute paths in scripts. Scripts break when run from a different directory. Use $(dirname "$0") or $BASH_SOURCE to resolve paths relative to the script.
Forgetting to quote variables. rm $dir breaks if $dir contains spaces. Always write rm "$dir".
Piping to echo. echo "text" | command rarely does what you think. Use here-strings: command <<< "text".
Running destructive commands without a dry run. rm -rf and find -exec deserve a --dry-run or echo test first.
What to skip
- GUI file managers for dev work — slower than
fd + rg once you have muscle memory.
- Memorising
sed/awk syntax for one-off transforms — python -c or node -e is often clearer and already installed.
- Fancy dotfile frameworks before you understand what they configure — start with a minimal
~/.zshrc and add only what you feel the absence of.
FAQ
Do I need to learn Bash if I use Zsh?
Yes — Bash is the standard for CI scripts and server environments. Write scripts with #!/usr/bin/env bash even when your interactive shell is Zsh.
What is the difference between a terminal and a shell?
The terminal is the window/application (iTerm2, Warp, Windows Terminal). The shell is the program running inside it (Bash, Zsh, Fish) that interprets your commands.
How do I run a command as administrator?
Prefix with sudo. Use it sparingly — most dev work does not need root, and sudo mistakes are hard to undo.
How do I stop a running command?
Ctrl+C sends SIGINT and stops most programs. Ctrl+Z suspends it (use bg to resume in background, fg to bring back).
Where to go next