A Unix shell simulated in your browser: real command behaviour over an in-memory filesystem, with exercises that check your work.
Type real commands. They are parsed and executed against a filesystem held in this page — pipes move data, redirection writes files, and the next command sees what the last one changed.
There is no kernel, no processes and no network behind it — a shell implemented in JavaScript over an in-memory tree. It is honest about that because a practice box you mistake for a real one teaches the wrong lesson. Nothing you type leaves the page, and Reset box puts the filesystem back exactly as it started.
Not every flag of every tool — the ones you reach for daily, behaving correctly.
| Area | Commands |
|---|---|
| Moving around | pwd cd ls -l -a |
| Reading | cat head -n tail -n wc -l -w -c stat |
| Searching | grep -i -v -n -c find -name -type |
| Shaping text | sort -r -n uniq -c cut -d -f tr echo |
| Changing things | mkdir -p touch rm -r cp mv chmod |
| Looking around | whoami id ps df env uname -a history |
| Shell itself | pipes |, redirection > >>, chaining &&, globs *, ~, quoting, Tab completion, Up/Down history |
Production problems do not respect the boundaries between disciplines, and the layer a failure belongs to is rarely the layer it shows up in. That is why the practice box includes Linux files, logs, services, cluster output and recovery clues instead of one isolated command list.
| Clue | Where it crosses a boundary |
|---|---|
| A DNS TTL | It is a networking setting, until a failover takes thirty minutes to be believed. |
| A memory limit | It is a Kubernetes field, until it is a garbage collector thrashing at 94%. |
| A readiness probe | It is a YAML block, until it quietly removes every pod from the load balancer. |
| A base image | It is a Dockerfile line, until it is the CVE in somebody's audit. |
| A retry | It is three lines of client code, until it is the reason the outage lasted an hour. |
| A disk filling up | It is a Linux problem, until the kubelet stops reporting and the node goes NotReady. |
| A Service selector | It is one label, until it is a healthy object routing to nothing. |
| An error budget | It is a number in a document, until it is the argument that stops a release. |
Use the terminal as a safe place to practise that habit: read the symptom, check the nearest evidence, then cross the boundary only when the evidence points there.