TypeVelo.
← Drills Hub

Shell Command Typing Drill

- | / . ~ $ > * "

Every passage contains: - | / . ~ $ > *

Net 0 wpmGross 0 wpmAcc 100%
echo $HOME > path.txt echo $HOME > path.txt ps aux | grep node chmod -R 644 ./rows/*.txt echo $HOME > path.txt curl -s https://a.co/rows | wc -l curl -s https://a.co/rows | wc -l cat rows.txt | sort | uniq -c > counts.txt cp -r ./src/. ~/backup/ ls -la ~/rows/ cat rows.txt | sort | uniq -c > counts.txt echo $HOME > path.txt cp -r ./src/. ~/backup/ curl -s https://a.co/rows | wc -l cd ~/work && git status cat rows.txt | sort | uniq -c > counts.txt ls -la ~/rows/ find . -name '*.log' -mtime -7 ls -la ~/rows/ cd ~/work && git status cat rows.txt | sort | uniq -c > counts.txt grep -rn 'total' ./src | head -20 tar -czf rows.tar.gz ./rows/ grep -rn 'total' ./src | head -20 tar -czf rows.tar.gz ./rows/ echo $HOME > path.txt chmod -R 644 ./rows/*.txt cp -r ./src/. ~/backup/ tar -czf rows.tar.gz ./rows/ ls -la ~/rows/ tar -czf rows.tar.gz ./rows/ echo $HOME > path.txt tar -czf rows.tar.gz ./rows/ echo $HOME > path.txt find . -name '*.log' -mtime -7 cat rows.txt | sort | uniq -c > counts.txt chmod -R 644 ./rows/*.txt grep -rn 'total' ./src | head -20 cd ~/work && git status grep -rn 'total' ./src | head -20

QWERTY layout assumed. Backspace corrects; uncorrected errors count against net WPM.

A code editor underlines a mistake and leaves it there until someone fixes it. A shell prompt has no such patience — the instant Enter is pressed, whatever was typed runs against whatever files happen to be sitting in the working directory, right or wrong. That single fact is what separates this drill from the other seven in this batch: everywhere else, an error is caught by a compiler or simply looks wrong on screen; here, it's carried out.

ls -la ~/rows/ packs three right-pinky presses — a hyphen and two slashes — plus one shifted press of the tilde on the left pinky into a line just fourteen characters long. cat rows.txt | sort | uniq -c > counts.txt goes further, chaining three separate programs with two pipes and sending the combined result to a file with a third shifted character, all of it spaced out with an ordinary word on either side of every symbol.

The asterisk carries a third meaning in this batch on top of the two it already has elsewhere. It means multiplication in the Maths Operator Drill and "every column" in the SQL Typing Drill; inside find . -name '*.log' -mtime -7, wrapped in single quotes so the shell doesn't expand it too early, it means "any filename that ends this way" instead.

Why This Drill

Because these lines are commands rather than passages meant to be read, a mistake changes behaviour rather than meaning. chmod -R 644 ./rows/*.txt with one digit wrong changes which permissions get applied to real files on disk, not just which sentence a reader has to puzzle over — a different stake entirely from a typo in any of this batch's other seven languages, where something downstream catches the error before it does anything.

cd ~/work && git status introduces a shift-held double-tap on the right index finger for &&, chaining two commands so the second only runs if the first succeeds. That's the same same-key-twice family as the Rust Typing Drill's double colon, but sourced from a different finger entirely — the only member of that pattern in this whole batch that isn't produced by a pinky or a ring finger.

$HOME pairs the dollar sign with a bare, unshifted capitalized word and no brace at all, a plainer construction than the JavaScript Typing Drill's ${count}, which immediately follows its dollar sign with a shifted brace instead. Two languages, one identical opening character, two completely different things asked of the hand right after it.

A Line That Runs the Instant It's Finished

There's no compiler, no red underline, no build step standing between what gets typed at a shell prompt and what happens next. tar -czf rows.tar.gz ./rows/ and cp -r ./src/. ~/backup/ both take effect on real files the moment Enter is pressed, which is a different kind of consequence from anything else in this batch of eight drills.

Three Right-Pinky Presses in a Fourteen-Character Line

ls -la ~/rows/ uses the right pinky three separate times — once for the hyphen, twice for the two slashes — plus a single shifted press of the tilde on the left pinky, all inside a line barely longer than one word of ordinary prose.

Two Pipes and a Redirect, Chained and Spaced Out

cat rows.txt | sort | uniq -c > counts.txt uses the pipe twice to pass output from one program to the next, then a redirect to send the final result to a file — three shifted characters in one line, each bordered by a space on both sides rather than sitting tight against surrounding text the way the TypeScript Typing Drill's union-type pipes do.

The Asterisk's Third Meaning in This Batch

'*.log' wraps the asterisk in single quotes so the shell treats it as a wildcard rather than expanding it immediately — a third distinct job for the identical keystroke that means multiplication in the Maths Operator Drill and "every column" in the SQL Typing Drill.

Frequently Asked Questions

Why does a mistake in a shell command matter more than a mistake in ordinary code?

There's nothing standing between the keystrokes and the result — a shell prompt carries out whatever was typed against real files the moment Enter is pressed, rather than flagging the mistake first the way a compiler or an editor would.

What's actually happening in the hands when typing ~/rows/?

A shifted press of the tilde on the left pinky, immediately followed by an unshifted slash on the right pinky — two different pinkies, back to back, for what reads on screen as two adjacent characters.

Is the pipe in a shell command the same keystroke as the pipe in a TypeScript union type?

The identical key and finger, but a different rhythm — here it's bordered by spaces and chains whole commands together, while a TypeScript union type sits it tight against quoted words with no room to spare.

Why does && need Shift held twice in a row?

Because the ampersand is a shifted key, so chaining two commands means the same finger pressing the same key twice while Shift stays down.

Does the asterisk always mean multiplication?

No. Here it is a wildcard standing for any filename ending that way — the third distinct job this one keystroke does across the site's drills.

Why doesn't $HOME need a brace the way JavaScript's ${count} does?

Shell variable syntax only needs the brace when there's ambiguity about where the variable name ends; a bare, unbroken word like HOME right after the dollar sign is enough on its own, unlike JavaScript's template literals, which always require the brace.