The Open Machine, 1991

The Unix model from 1969 still runs most of the internet. This era puts you in a working shell where ls, grep, sed, awk, pipes and systemd all behave, so the habits you build here transfer straight to a real server.

Classic shells track · 43 missions · boss mission, no written exam · free, no signup. Everything below runs in the browser terminal on the SERVBG home page.

Open The Open Machine in the terminal

What you will do

  1. list directory contents ls

    Linus Torvalds wrote Linux v0.01 in 1991, age 21. Based on Unix, 1969.

  2. show current directory pwd

    Unix filesystem: one tree rooted at /. Everything, even devices, is a file.

  3. show your username whoami

    Unix was designed for multiple users from day one. Identity always mattered.

  4. show system information uname -a

    The kernel is the core. Linus Torvalds still personally reviews patches.

  5. list with permissions ls -la

    rwxrwxrwx: Unix permission bits from 1969. Same model secures the internet today.

  6. display file contents cat README

    cat = concatenate. Unix: small tools that do one thing well, combined with pipes.

  7. list running processes ps

    Everything is a process. Fork, exec, wait — the Unix lifecycle since 1969.

  8. read the manual man ls

    man pages exist since 1971. RTFM (Read The Fine Manual) is a real Unix tradition.

  9. search text recursively grep -r "error" /var/log

    grep: Global Regular Expression Print. One of the first UNIX tools, 1974. Still unmatched.

  10. find files by name or attribute find . -name "*.log"

    find -exec {} \; pipes each result to a command. -delete nukes matches. Combine with xargs for speed.

  11. extract and transform text fields awk '{print $1}' /etc/passwd

    awk: Aho, Weinberger, Kernighan — three Bell Labs legends, 1977. $1 $NF BEGIN/END still standard.

  12. stream-edit text with substitution sed 's/old/new/g' file

    sed: stream editor, 1974. sed 's/foo/bar/g' rewrites millions of config files to this day.

  13. build and execute command lines from stdin find . -name "*.tmp" | xargs rm

    xargs -P 8 parallelises across 8 CPUs. -n 1 feeds one arg per invocation. Classic Unix composition.

  14. create or extract tar archives tar czf backup.tar.gz /etc

    tar: Tape ARchive, 1979. --strip-components and --exclude still used in Docker image layers today.

  15. sync files efficiently over SSH rsync -av --delete src/ dst/

    rsync transfers only changed blocks. --delete mirrors deletions. The backbone of backup scripts since 1996.

  16. generate SSH key pair ssh-keygen -t ed25519

    Ed25519 keys are 256-bit elliptic curve — faster and smaller than RSA 4096, equally secure. 2013 onward.

  17. manage systemd services systemctl status nginx

    systemd replaced SysVinit in 2011. Controversial then, universal now. Units replaced rc.d scripts.

  18. query the systemd journal journalctl -u nginx

    journalctl -f follows live. journalctl -u <unit> filters by service. Binary logs survived reboots.

  19. show socket and listening port state ss -tnlp

    ss replaced netstat in 2003. -tnlp: TCP, numeric, listening, with process. Fast via kernel socket API.

  20. list open files and network sockets lsof -i :80

    lsof: List Open Files. In Linux everything is a file. 'lsof -i :PORT' reveals what owns a port.

  21. trace system calls of a running process strace -p 1337

    strace shows every kernel call a process makes. Invaluable for debugging without source code.

  22. view kernel ring buffer messages dmesg -T | tail

    dmesg -T shows human timestamps. Hardware errors, OOM kills, and driver noise all live here.

  23. list scheduled cron jobs crontab -l

    cron syntax: minute hour dom month dow. @reboot runs once at boot. The scheduler unchanged since 1975.

  24. loop over a list in bash for i in 1 2 3; do echo $i; done

    Bash is a real language. for / while / until turn the repetitive into one line.

  25. branch on a condition if [ -f /etc/hosts ]; then echo found; fi

    [ ] is the test command. Exit codes drive control flow: 0 = true, non-zero = false.

  26. set an environment variable export EDITOR=vim

    export makes a variable visible to child processes. The shell IS your configuration.

  27. make a shortcut for a command alias ll='ls -la'

    Aliases + functions in ~/.bashrc are how power users bend the shell to their own hands.

  28. reach for Python when the shell is not enough python3 -c 'print(2**10)'

    When a one-liner grows hairy, drop into Python. The shell launches it; the two compose.

  29. match a literal phrase with extended regex grep -E 'Failed password' /var/log/auth.log

    -E turns on Extended Regular Expressions (classic egrep). POSIX split basic/extended grep in 1992 — extended is what everyone reaches for today.

  30. match one digit with a character class grep -E 'user[0-9]' /var/log/auth.log

    [0-9] is a bracket expression — one character from the set. [a-z], [^0-9] (negated) work the same way. Bracket expressions predate grep itself, from ed in the 1970s.

  31. anchor a match to the start of the line grep -E '^Jan 14 04' /var/log/auth.log

    ^ anchors to start-of-line, $ to end-of-line. Anchor a timestamp prefix and a noisy log becomes an exact time-window filter.

  32. bridge two phrases with the .* quantifier grep -E 'Failed password.*root' /var/log/auth.log

    .* means "any character, zero or more times" — the most-used, most-abused regex quantifier. + means one-or-more, ? means zero-or-one.

  33. group and alternate with (a|b) grep -E '(Accepted publickey|Accepted password)' /var/log/auth.log

    (a|b) groups and alternates. In grep -E the match is still the whole line, not the group — captures only pay off once sed, awk or a real language can reference them.

  34. assign a variable, then chain a second command with ; NAME=servbg; echo $NAME

    NAME=value has no spaces around = — bash is strict about that, unlike most languages. ; runs commands in sequence, exactly like pressing Enter between them.

  35. substitute a command's output with $(...) echo $(whoami)

    $(command) runs the command and drops its output in as text. Old scripts used `backticks`; $() nests cleanly, so modern bash prefers it.

  36. trigger a non-zero exit code on purpose cd /nonexistent

    Every command exits 0 (success) or 1-255 (failure) — no exceptions, no output required. A missing directory is the cheapest way to see a real failure.

  37. read the last command's exit code echo $?

    $? holds the exit status of the last command. It is the entire foundation if/&&/|| control flow is built on — no magic, just an integer.

  38. compose two programs with a pipe grep -E 'Failed password' /var/log/auth.log | wc -l

    | hands one program's stdout to the next program's stdin. grep and wc know nothing about each other — composability, not integration, is the Unix trick.

  39. open a file in vim and see the modal-editing split vim notes.txt

    Bill Joy wrote vi in 1976 for a 300-baud modem — every keystroke had to earn its place. Vim (1991) extended it. Two modes rule everything: NORMAL (commands) and INSERT (text).

  40. switch to INSERT mode and start typing i

    i inserts before the cursor, a appends after, o opens a line below. In INSERT mode keys are text again — real vim shows -- INSERT -- on the status line so you never lose track.

  41. save and quit — from NORMAL mode only :wq

    :w writes (saves), :q quits, :wq does both in one command. :q! discards changes and quits anyway — the command every vim beginner googles first.

  42. search forward for text with / /servbg

    /pattern searches forward, ?pattern searches backward, n repeats the last search. Vim search accepts full regex — the same grammar you just used in grep.

  43. Boss missionrun a shell script — automation, sealed bash backup.sh

    A script is a shell session you can repeat, share and schedule. Here sysadmin becomes engineering.

Certificate

This is one of the original eras, so it ends at the boss mission: there is no written exam and no certificate for it. Clearing the boss marks the era complete and banks the XP. The expansion tracks (networking, Cisco IOS, FortiOS, containers, Kubernetes, cloud, operations, defence, models and the nine graphics eras) are the ones that carry exams.

Nearby eras

Previous
1981 · The Command Line
Master MS-DOS the way it was learned: DIR, batch files, AUTOEXEC.BAT, CHKDSK, DEBUG.
Next
2006 · The Object Shell
Cross the leap to PowerShell: dir becomes Get-ChildItem, and the pipe stops passing text and starts passing objects.

All 25 eras in the Terminal Academy

Open The Open Machine in the terminal