# De terminal

Het zwarte venster waar developers hun werk in doen. Op een Mac en op Windows, van pwd tot pipes.

Multimedia & Creatieve Technologie · 0.0 General · Zelfstudie · versie 1.0.0 · 2026-09-20

Tags: terminal

Slides: <https://slides.mctantwerp.be/nl/general/03-terminal>

Speaker notes: <https://slides.mctantwerp.be/nl/general/03-terminal.notes.md>

<!-- slide 2 -->

## Agenda

1. Waarom typen: Wat een venster met tekst je oplevert
2. Openen: macOS, Windows, VS Code
3. Rondwandelen: Paden, pwd, ls, cd
4. Bestanden: Lezen, maken, verplaatsen, weggooien
5. Gereedschap: Vlaggen, wildcards, pipes, toetsen
6. In het echt: Windows, PATH, sudo, je eigen setup

<!-- slide 3 -->

## Zelfstudie: Werkwijze

*60 minuten, Alleen*

Reken op een uur. De shell in dit deck is nep, dus je kan niets stukmaken. Alles wat je typt, werkt straks ook in je echte terminal.

1. Typ elk voorbeeld zelf na in de speeltuin, verander er iets aan en kijk wat er gebeurt
2. Er zijn drie reeksen drills, na elk hoofdstuk eentje. Ze zijn af als alle bolletjes groen staan
3. Vier quizzen tussendoor: antwoord eerst, lees daarna de uitleg
4. Het spiekbriefje achteraan is naslag, dat hoeft niet in je hoofd

<!-- slide 4 -->

## 1. Waarom typen

*Een venster zonder knoppen, en toch werk je er sneller in dan in Finder.*

<!-- slide 5 -->

**Klikken kan je al.**

De terminal is gewoon een tekstvenster. Jij typt een commando, de computer antwoordt met tekst. Meer zit er niet achter.

<!-- slide 6 -->

### Wat het je oplevert

- Git, npm, composer en ffmpeg hebben geen knoppen. Je typt of je gebruikt ze niet
- Een commando is exact herhaalbaar. Een reeks muisklikken is dat nooit
- Een server heeft geen scherm. Wie inlogt, krijgt precies dit venster
- Foutmeldingen komen hier binnen, en die kan je kopiëren en opzoeken
- Honderd bestanden hernoemen duurt één regel in plaats van een namiddag

> [!NOTE]
> **Ook voor designers**
>
> Wie video's converteert, afbeeldingen batcht of een static site publiceert, komt hier hoe dan ook terecht.

<!-- slide 7 -->

### Twee manieren om hetzelfde te doen

#### Finder en Verkenner

- Je ziet waar je bent, je sleept en je klikt
- Verborgen bestanden staan er standaard niet
- Wat je deed, is nergens terug te vinden
- Elke stap kost een muisbeweging

#### Terminal

- Je leest waar je bent, en je typt wat er moet gebeuren
- Alles staat er, ook .git en .env
- Je geschiedenis staat er nog, met één pijltje omhoog
- Eén regel doet iets met duizend bestanden

<!-- slide 8 -->

### Drie woorden die door elkaar gebruikt worden

*Ze betekenen niet hetzelfde, en het scheelt verwarring als je het verschil kent.*

**Terminal**: Het venster zelf. De app die je opent: Terminal, iTerm, Windows Terminal, het paneel onderaan in VS Code.

**Shell**: Het programma in dat venster dat je commando's leest en uitvoert. zsh, bash of PowerShell.

**Prompt**: De tekens waar de shell op je staat te wachten. Alles wat jij typt komt daarachter.

<!-- slide 9 -->

### Welke shell draait er bij jou

*De commando's in dit deck zijn zsh en bash. Die twee liggen zo dicht bij elkaar dat je het verschil dit jaar niet merkt.*

| Shell | Waar | Voor jou |
| --- | --- | --- |
| `zsh` | Standaard op macOS sinds Catalina | Alles in dit deck werkt |
| `bash` | Standaard op Linux, en in Git Bash op Windows | Alles in dit deck werkt |
| `PowerShell` | Standaard op Windows | Eigen commando's, zie **hoofdstuk 6** |
| `cmd.exe` | De oude Windows-prompt | Laat staan |

> [!TIP]
> Op Windows installeer je Git Bash samen met Git. Daarmee typ je dezelfde commando's als je klasgenoot met een Mac, en als de server waar je straks op deployt.

<!-- slide 10 -->

### Wat doet de shell?

- A. Je commando's lezen en uitvoeren
- B. Het venster tekenen
- C. Bestanden opslaan op je schijf
- D. Je internetverbinding beheren

**Antwoord:** A. Je commando's lezen en uitvoeren

Het venster is de terminal, het programma erin is de shell. Op een Mac is dat zsh, in Git Bash is dat bash. Dezelfde shell draait ook op de server waar je project straks staat.

<!-- slide 11 -->

## 2. Openen

*Waar dat venster staat op jouw machine, en wat er in die eerste regel allemaal staat.*

<!-- slide 12 -->

### Waar vind je het

#### macOS

- **Terminal**, in Programma's onder Hulpprogramma's
- Sneller: <kbd>⌘</kbd> <kbd>spatie</kbd> en typ terminal
- Rechtermuisknop op een map in Finder, Nieuwe terminal bij map
- iTerm2 of Warp zijn mooiere vensters met dezelfde shell erin

#### Windows

- **Git Bash**, geïnstalleerd samen met Git
- Rechtermuisknop in een map, Open Git Bash here
- **Windows Terminal** uit de Store bundelt PowerShell en Git Bash in tabbladen
- Git Bash gebruiken houdt je commando's gelijk aan de rest van dit deck

<!-- slide 13 -->

### De terminal in VS Code

*Je hoeft niet te wisselen tussen vensters. VS Code heeft er eentje ingebouwd, en die opent meteen in je projectmap.*

| Wat | Hoe |
| --- | --- |
| Openen en sluiten | <kbd>Ctrl</kbd> <kbd>`</kbd>, de toets links van de 1 |
| Een tweede terminal ernaast | Het splitsicoon rechtsboven in het paneel |
| Wisselen van shell | Het pijltje naast het plusje: zsh, bash, PowerShell |
| Vanuit je terminal VS Code openen | Typ `code .` in de map van je project |

> [!NOTE]
> Dat punt in `code .` betekent "de map waar ik nu sta". Je ziet hem straks nog vaak terugkomen.

<!-- slide 14 -->

### Wat staat er in die eerste regel

*Je prompt vertelt je wie je bent en waar je staat. Handig, want verdwalen is de meest gemaakte fout.*

> [!TIP]
> Een `%` is zsh, een `$` is bash. Sommige prompts tonen ook nog je git branch. Staat er `#`, dan ben je root en mag je alles kapotmaken.

<!-- slide 15 -->

### Het dollarteken in een tutorial

*Bijna elke handleiding zet er eentje voor. Dat teken hoort bij de prompt, niet bij het commando.*

wat er staat

```bash
$ npm install
$ npm run dev
```

wat jij typt

```bash
npm install
npm run dev
```

> [!WARNING]
> Kopieer je het dollarteken mee, dan krijg je `command not found: $`. Zelfde verhaal met de `%` en met `C:\>` in een Windows-handleiding.

<!-- slide 16 -->

## 3. Rondwandelen

*Paden, en de drie commando's waarmee je overal geraakt.*

<!-- slide 17 -->

### Alles hangt aan één boom

*Je schijf is één grote map met mappen in mappen. Elk pad is de route van boven naar beneden.*

| Pad | Wat het is |
| --- | --- |
| `/` | De wortel. Op een Mac en op Linux begint alles hier |
| `~` | Jouw home, de map met je naam. Bij mij `/Users/student` |
| `C:\Users\student` | Hetzelfde op Windows, met een letter voor je schijf |
| `/c/Users/student` | Diezelfde map, zoals Git Bash hem schrijft |

> [!NOTE]
> Op een server of in Git Bash is `Downloads` iets anders dan `downloads`. macOS en Windows zijn daar losser in, dus je merkt het pas als je deployt.

<!-- slide 18 -->

### Absoluut of relatief

*Een absoluut pad werkt overal. Een relatief pad vertrekt van waar je nu staat.*

```bash
# absoluut, altijd dezelfde plek
cd /Users/student/Projects/portfolio
cd ~/Projects/portfolio

# relatief, vanaf waar je staat
cd Projects/portfolio
cd ../todo-app
```

**.**: De map waar je nu staat.

**..**: De map erboven. Twee punten, met een spatie na cd.

**~**: Je home. Werkt overal, ook midden in een langer pad.

<!-- slide 19 -->

### Waar sta ik en wat ligt hier

*pwd en ls, de twee commando's die je het vaakst zal typen.*

```console
% pwd
/Users/student
% ls
Desktop  Documents  Downloads  Projects
% ls Projects
portfolio  todo-app
```

**pwd**: Print working directory. Het volledige pad van waar je staat.

**ls**: List. Wat zit er in deze map?

**ls Projects**: Hetzelfde, maar van een andere map, zonder er zelf naartoe te gaan.

<!-- slide 20 -->

### Meer zien met vlaggen

*Een streepje achter het commando verandert wat je krijgt. Met -l zie je details, met -a ook de verborgen bestanden.*

```console
% ls
css  images  index.html  js  README.md
% ls -l
total 40
drwxr-xr-x   3 student  staff    128  18 sep 14:22  css
drwxr-xr-x   4 student  staff    192  18 sep 14:22  images
-rw-r--r--   1 student  staff    175  18 sep 14:22  index.html
-rw-r--r--   1 student  staff     62  18 sep 14:22  README.md
% ls -la
total 48
drwxr-xr-x   8 student  staff    448  18 sep 14:22  .
drwxr-xr-x   4 student  staff    128  18 sep 14:20  ..
drwxr-xr-x  12 student  staff    384  18 sep 14:20  .git
drwxr-xr-x   3 student  staff    128  18 sep 14:22  css
-rw-r--r--   1 student  staff    175  18 sep 14:22  index.html
```

<!-- slide 21 -->

### Wandelen met cd

*Change directory. Eén map naar binnen, één map naar buiten, of in één keer naar huis.*

```console
% cd Projects
% cd portfolio
% pwd
/Users/student/Projects/portfolio
% cd ..
% pwd
/Users/student/Projects
% cd ~/Downloads
% cd
% pwd
/Users/student
```

**cd map**: Eén map naar binnen.

**cd ..**: Eén map naar buiten. Spatie na cd, anders kent zsh het niet.

**cd ~/Downloads**: In één sprong naar een map in je home.

**cd**: Zonder argument beland je in je home.

<!-- slide 22 -->

### Typ nooit een volledige naam

*Tab vult aan, het pijltje omhoog haalt terug. Daar zit het echte snelheidsverschil.*

| Toets | Wat er gebeurt |
| --- | --- |
| <kbd>Tab</kbd> | Vult de bestandsnaam of het commando aan waar je aan begonnen bent |
| <kbd>Tab</kbd> <kbd>Tab</kbd> | Toont alle namen die passen, als er meerdere zijn |
| <kbd>↑</kbd> | Je vorige commando terug, en nog eens voor het commando daarvoor |
| <kbd>Ctrl</kbd> <kbd>R</kbd> | Zoeken in je geschiedenis: typ een stuk van het commando |

> [!TIP]
> Tab is ook je spellingscontrole. Vult hij niets aan, dan bestaat die map hier niet en zit je ergens anders dan je dacht.

<!-- slide 23 -->

### Spaties in een naam

*Een spatie scheidt argumenten. Een bestand met een spatie in zijn naam heeft dus aanhalingstekens nodig.*

```console
% cd Mijn Documenten
cd: string not in pwd: Mijn
% cd "Mijn Documenten"
% cd Mijn\ Documenten
```

> [!TIP]
> Sleep een map uit Finder of Verkenner in je terminalvenster. Het volledige pad verschijnt, met de spaties al netjes ge-escaped.

<!-- slide 24 -->

### Je staat in `~/Projects/portfolio` en typt `cd ..`. Waar sta je dan?

- A. ~/Projects
- B. ~
- C. ~/Projects/portfolio/..
- D. Nergens, dat is geen commando

**Antwoord:** A. ~/Projects

Twee punten betekent de map erboven. Wil je twee niveaus omhoog, dan typ je cd ../.. en zit je in je home.

<!-- slide 25 -->

### Speeltuin

*Een echte shell op een verzonnen computer. pwd, ls, cd en cat om te beginnen.*

<!-- slide 26 -->

### Drills: rondwandelen

<!-- slide 27 -->

## 4. Bestanden

*Lezen, maken, verplaatsen en weggooien. Vanaf hier verandert er iets aan je schijf.*

<!-- slide 28 -->

### Kijken zonder iets te openen

*Vier manieren om in een bestand te loeren, van kort naar lang.*

| Commando | Wat je krijgt |
| --- | --- |
| `cat README.md` | Het hele bestand in je venster |
| `head -n 20 log.txt` | De eerste twintig regels |
| `tail -n 20 log.txt` | De laatste twintig regels, handig bij logbestanden |
| `less log.txt` | Bladeren door een lang bestand. Eruit met <kbd>q</kbd> |

> [!WARNING]
> `cat` op een afbeelding of een zip gooit binaire rommel in je venster en laat je prompt in de war achter. Typ dan `reset`.

<!-- slide 29 -->

### Maken

*Een map met mkdir, een leeg bestand met touch.*

```console
% mkdir docs
% touch docs/install.md
% mkdir -p src/components/buttons
% ls
css  docs  images  index.html  js  README.md  src
```

**mkdir**: Make directory. Maakt één map.

**touch**: Maakt een leeg bestand, of zet de datum van een bestaand bestand op nu.

**mkdir -p**: Maakt ook alle mappen ertussen die nog niet bestaan.

<!-- slide 30 -->

### Kopiëren en verplaatsen

*cp kopieert, mv verplaatst. Hernoemen is verplaatsen naar dezelfde map met een andere naam.*

```console
% cp README.md docs/
% cp -r images backup-images
% mv js/main.js js/app.js
% mv notes.md docs/notes.md
```

> [!WARNING]
> Bestaat de doelnaam al, dan overschrijft `cp` zonder iets te vragen. Met `cp -i` vraagt hij het wel.

<!-- slide 31 -->

### Weggooien

*rm verwijdert. Er is geen prullenbak, geen Cmd+Z en geen bevestiging.*

```console
% rm oude-versie.html
% rm docs
rm: docs: is a directory
% rm -r docs
% rm -i *.log
remove error.log? y
```

> [!WARNING]
> **Weg is weg**
>
> Wat je met rm verwijdert, staat niet in de prullenbak. Enkel een backup of een push naar GitHub redt je nog.

> [!TIP]
> **Eerst kijken**
>
> Doe `ls *.log` voor je `rm *.log` typt. Dan zie je eerst wat eraan gaat.

<!-- slide 32 -->

### Terug naar de grafische kant

*Je hoeft niet te kiezen. Vanuit je terminal open je een map of een project in twee tekens.*

| Commando | Waar | Wat het doet |
| --- | --- | --- |
| `open .` | macOS | Opent deze map in Finder |
| `open index.html` | macOS | Opent het bestand in je browser of standaardprogramma |
| `explorer .` | Windows | Opent deze map in Verkenner |
| `start .` | Windows | Hetzelfde, in cmd en PowerShell |
| `code .` | Overal | Opent deze map als project in VS Code |

<!-- slide 33 -->

### Wat doet `rm -r oefeningen`?

- A. De map en alles erin verdwijnt, definitief
- B. De map gaat naar de prullenbak
- C. Enkel de bestanden verdwijnen, de map blijft
- D. Niets, rm werkt alleen op bestanden

**Antwoord:** A. De map en alles erin verdwijnt, definitief

De vlag -r staat voor recursief: de map en alles wat erin zit. Geen prullenbak, geen bevestiging. Daarom eerst ls, dan pas rm.

<!-- slide 34 -->

### Drills: bestanden

<!-- slide 35 -->

## 5. Gereedschap

*Vlaggen, wildcards, pipes en een handvol toetsen. Hier wordt typen sneller dan klikken.*

<!-- slide 36 -->

### Anatomie van een commando

*Elk commando leest hetzelfde: wat je wil, hoe je het wil, en waarop.*

> [!NOTE]
> Korte vlaggen plak je aan elkaar: `ls -la` is hetzelfde als `ls -l -a`. Lange vlaggen krijgen twee streepjes, zoals `npm install --save-dev`.

<!-- slide 37 -->

### Hulp vragen aan het commando zelf

*Je hoeft niets vanbuiten te kennen. Elk programma legt zichzelf uit.*

```console
% ls --help
Usage: ls [OPTION]... [FILE]...
  -a, --all      do not ignore entries starting with .
  -l             use a long listing format
% man ls
de volledige handleiding, bladeren met de pijltjes, eruit met q
```

> [!TIP]
> `man` is uitgebreid en droog. `tldr` (apart te installeren) geeft in de plaats vijf voorbeelden die je meteen kan gebruiken.

<!-- slide 38 -->

### Wildcards

*Een sterretje staat voor eender welke reeks tekens. De shell vult hem in voor het commando draait.*

```console
% ls *.html
index.html  about.html
% ls images/hero.*
images/hero.jpg  images/hero.webp
% rm *.log
% cp *.md docs/
```

> [!WARNING]
> Zet nooit een spatie tussen de naam en de ster. `rm * .log` verwijdert alles in de map, en daarna klaagt hij dat .log niet bestaat.

<!-- slide 39 -->

### Output doorgeven en opvangen

*Elk commando spuwt tekst uit. Die tekst mag ook ergens anders heen dan naar je scherm.*

```console
% ls > inhoud.txt
% echo "todo: deploy" >> README.md
% cat README.md | grep todo
todo: write the install steps
% ls images | wc -l
2
```

**>**: Schrijft de output naar een bestand. Wat erin stond, is weg.

**>>**: Plakt de output onderaan het bestand.

**|**: Geeft de output door aan het volgende commando.

<!-- slide 40 -->

### Zoeken in bestanden en in mappen

*grep zoekt tekst in bestanden, find zoekt bestanden in mappen.*

```console
% grep todo README.md
todo: write the install steps
% grep -n -i TODO README.md
5:todo: write the install steps
% find . -name "*.css"
./css/style.css
% find . -type d -name "node_modules"
niets gevonden
```

> [!NOTE]
> Deze twee redden je in een project van honderd bestanden. Waar stond die kleurcode ook weer? `grep -r "#ff645a" .` zoekt in alles onder deze map.

<!-- slide 41 -->

### Toetsen die je elke dag nodig hebt

*Deze acht doen meer voor je snelheid dan eender welk commando erbij leren.*

| Toets | Wat het doet |
| --- | --- |
| <kbd>Ctrl</kbd> <kbd>C</kbd> | Stopt wat er draait. De noodrem, werkt bijna altijd |
| <kbd>Ctrl</kbd> <kbd>L</kbd> | Maakt je scherm leeg, net als `clear` |
| <kbd>Ctrl</kbd> <kbd>A</kbd> | Cursor naar het begin van de regel |
| <kbd>Ctrl</kbd> <kbd>E</kbd> | Cursor naar het einde van de regel |
| <kbd>Ctrl</kbd> <kbd>U</kbd> | Wist de hele regel die je aan het typen was |
| <kbd>Ctrl</kbd> <kbd>D</kbd> | Sluit de shell of het programma waar je in zit |
| <kbd>Ctrl</kbd> <kbd>R</kbd> | Zoekt in je geschiedenis terwijl je typt |

<!-- slide 42 -->

### Als je vastzit

*Je prompt is weg en je typt in het niets. Dat betekent dat er nog iets draait of dat er een editor open staat.*

| Wat je ziet | Wat het is | Eruit |
| --- | --- | --- |
| Een dev server die blijft loggen | npm run dev draait nog | <kbd>Ctrl</kbd> <kbd>C</kbd> |
| Een scherm met `:` onderaan | less of man | <kbd>q</kbd> |
| Tekst met `^X Exit` onderaan | nano | <kbd>Ctrl</kbd> <kbd>X</kbd> |
| Een scherm waar niets gebeurt als je typt | vim | Eerst <kbd>Esc</kbd>, dan `:q!` en enter |
| Een prompt die enkel `>` toont | Een aanhalingsteken dat je niet gesloten hebt | <kbd>Ctrl</kbd> <kbd>C</kbd> |

<!-- slide 43 -->

### Je npm run dev draait en je wil je prompt terug. Wat doe je?

- A. Ctrl+C
- B. Het venster sluiten
- C. Enter blijven drukken
- D. exit typen

**Antwoord:** A. Ctrl+C

Ctrl+C stopt het draaiende programma en geeft je de prompt terug. Het venster sluiten werkt ook, maar dan blijft de poort soms bezet en krijg je de volgende keer een foutmelding.

<!-- slide 44 -->

## 6. In het echt

*Windows, PATH, rechten en je eigen setup.*

<!-- slide 45 -->

### Wat je dit jaar gaat typen

- `git clone`, `git add`, `git commit`, `git push` in elk vak met code
- `npm install` en `npm run dev` zodra je met een framework werkt
- `composer install` en `php artisan serve` in web development
- `ffmpeg -i film.mov -crf 26 film.mp4` om video's klein te krijgen
- `ssh student@server.be` zodra je op een server werkt

> [!NOTE]
> **Altijd in de juiste map**
>
> Die commando's werken op de map waar je staat. Een `npm install` in je home maakt een rommeltje in plaats van een project.

<!-- slide 46 -->

### command not found

*De meest voorkomende foutmelding van je eerste jaar. Hij betekent altijd hetzelfde.*

```console
% npm run dev
zsh: command not found: npm
% which npm
npm not found
% which node
/usr/local/bin/node
```

- Het programma staat niet geïnstalleerd, of niet in je PATH
- PATH is de lijst mappen waar je shell naar programma's zoekt
- Net geïnstalleerd? Sluit je terminal en open een nieuwe, anders kent hij de nieuwe PATH nog niet
- Tikfout? `ngm` bestaat niet, en de shell raadt niet mee

<!-- slide 47 -->

### sudo en administrator

*Sommige commando's mogen aan systeemmappen komen. Daar heb je rechten voor nodig, en die geef je niet zomaar weg.*

- macOS en Linux: `sudo` voor het commando, dan je wachtwoord. Je ziet niets terwijl je typt, dat is normaal
- Windows: rechtermuisknop op Terminal, Als administrator uitvoeren
- Een tutorial die sudo aan elk commando plakt, is een slechte tutorial

> [!WARNING]
> **Denk na voor je sudo typt**
>
> `sudo` zet alle beveiliging uit. Een commando dat je van een website kopieert en niet begrijpt, hoort daar zeker niet achter. Voor npm geldt hetzelfde: een `sudo npm install -g` geeft later problemen met rechten in je eigen projecten.

<!-- slide 48 -->

### Hetzelfde in PowerShell

*Open je toch PowerShell, dan zie je andere namen. De ideeën blijven overeind.*

| bash en zsh | PowerShell | Wat het doet |
| --- | --- | --- |
| `ls` | `dir` of `Get-ChildItem` | Toont wat er in de map zit |
| `pwd` | `Get-Location` | Waar sta ik |
| `cd` | `cd` of `Set-Location` | Van map veranderen |
| `cat` | `type` of `Get-Content` | Toont een bestand |
| `cp` | `Copy-Item` | Kopieert |
| `rm` | `Remove-Item` | Verwijdert |

<!-- slide 49 -->

### Windows onder de motorkap

*Drie verschillen die je op een Mac nooit tegenkomt.*

#### Paden

- Windows schrijft `C:\Users\student\Documents`
- Git Bash schrijft diezelfde map als `/c/Users/student/Documents`
- Een backslash betekent in bash "escape". In paden gebruik je dus `/`
- Kopieer je een Windows-pad in Git Bash, draai dan de streepjes om

#### Shells op je machine

- Git Bash: wat in dit deck staat, werkt
- PowerShell: eigen commando's, prima voor Windows-werk
- WSL: een echte Linux op je Windows, wat de meeste developers uiteindelijk draaien
- cmd.exe: enkel nog voor oude scripts

<!-- slide 50 -->

### Je eigen setup

*Je shell leest bij het opstarten één bestand. Wat je daarin zet, heb je elke sessie.*

```bash
# ~/.zshrc op een Mac, ~/.bashrc in Git Bash
alias gs="git status"
alias gp="git push"
alias ..="cd .."
alias serve="php artisan serve"

export EDITOR=code
```

> [!TIP]
> **Meteen actief**
>
> Na het bewerken: `source ~/.zshrc`, of open een nieuw venster.

> [!NOTE]
> **Verder**
>
> Oh My Zsh geeft je autocompletion en een prompt die je git branch toont. Starship doet hetzelfde en werkt in elke shell.

<!-- slide 51 -->

### Je zit op Windows en een handleiding zegt ls -la. Wat doe je?

- A. Git Bash openen en het commando typen
- B. In PowerShell ls -la typen
- C. Het commando overslaan
- D. Linux installeren

**Antwoord:** A. Git Bash openen en het commando typen

Git Bash geeft je dezelfde bash als de rest van de wereld, dus elke handleiding klopt. PowerShell kent ls wel, maar -la niet: daar heet dat Get-ChildItem -Force.

<!-- slide 52 -->

## 7. Oefenen

*Acht drills en een lege speeltuin.*

<!-- slide 53 -->

### Drills: alles door elkaar

*Vanaf hier mag je alles gebruiken wat in dit deck voorbijkwam.*

<!-- slide 54 -->

### Speeltuin

*Tab vult een naam aan, het pijltje omhoog haalt je vorige commando terug.*

<!-- slide 55 -->

### Terminal Velocity

*Een spelletje van onze eigen opleiding waarin je je een weg door mappen navigeert.*

Dezelfde commando's als hierboven, in oplopende moeilijkheid, met een klok erbij. Tien minuten spelen en `cd ..` zit in je vingers.

- Draait in je browser, niets te installeren
- Je tijd mag in je portfolio
- Werkt ook op een tablet

[mctantwerp.github.io/codeplay/spel/terminal-velocity](https://mctantwerp.github.io/codeplay/spel/terminal-velocity)

<!-- slide 56 -->

### Spiekbriefje

*Alles wat je dagelijks nodig hebt.*

#### Rondwandelen en kijken

| Commando | Doet |
| --- | --- |
| `pwd` | Waar sta ik |
| `ls -la` | Alles, met details |
| `cd map` | Naar binnen |
| `cd ..` | Naar buiten |
| `cd ~` | Naar je home |
| `cat bestand` | Toon de inhoud |

#### Veranderen en filteren

| Commando | Doet |
| --- | --- |
| `mkdir -p a/b` | Mappen maken |
| `touch f.txt` | Leeg bestand |
| `cp a b` | Kopiëren |
| `mv a b` | Verplaatsen of hernoemen |
| `rm -r map` | Weg, definitief |
| `grep woord f` | Zoek in een bestand |

<!-- slide 57 -->

### Extra

- **[explainshell.com](https://explainshell.com)**: Plak er een commando in en het legt elk stukje en elke vlag apart uit.
- **[tldr.sh](https://tldr.sh)**: Man pages, maar dan vijf voorbeelden in plaats van twintig schermen tekst.
- **[Oh My Zsh](https://ohmyz.sh)**: Thema's, autocompletion en een prompt die je git branch toont.
- **[The Missing Semester](https://missing.csail.mit.edu)**: De cursus van MIT over shell, scripting en git. Gratis, met video's.

## Begrippen

- **zsh**: De standaardshell op macOS sinds Catalina. Je herkent hem aan de % op het einde van je prompt. (slide 9)
- **bash**: De standaardshell op Linux en in Git Bash. Zijn prompt eindigt op een $. Voor wat je dit jaar typt, doet hij hetzelfde als zsh. (slide 9)
- **PowerShell**: De standaardshell op Windows, met eigen namen voor de commando's: Get-ChildItem in plaats van ls, Remove-Item in plaats van rm. Een ls -la uit een handleiding werkt er niet. (slide 48)
- **Git Bash**: Bash voor Windows, geïnstalleerd samen met Git. Je typt dezelfde commando's als op een Mac of een server, en je C-schijf heet er /c/. (slide 49)
- **/**: De root, de wortel van je schijf op een Mac en op Linux. Alles begint hier. Ook in Git Bash scheid je mappen met /, nooit met een backslash. (slide 17)
- **$**: Het einde van de prompt in bash. Een handleiding zet het voor elk commando, maar je typt het niet mee. Anders krijg je command not found: $. (slide 15)
- **Vlag**: Een optie achter het commando, meestal een streepje en een letter. Korte vlaggen plak je aan elkaar (ls -la is ls -l -a), lange krijgen twee streepjes: --save-dev. (slide 36)
- **ls -la**: Toont alles in de map met details, ook de verborgen bestanden die met een punt beginnen, zoals .git en .env. Zonder -a zie je die nooit. (slide 20)
- **Tab**: Vult een bestandsnaam of commando aan. Twee keer Tab toont alle namen die passen. Vult hij niets aan, dan bestaat die naam hier niet. (slide 22)
- **Escapen**: Een teken zijn speciale betekenis afnemen. Een spatie scheidt argumenten, dus je schrijft Mijn\\ Documenten met een backslash, of je zet de hele naam tussen aanhalingstekens. (slide 23)
- **cat**: Toont een heel bestand in je venster. Voor een lang bestand neem je less (eruit met q), voor het begin of het einde head en tail. (slide 28)
- **cp**: Kopieert: cp bron doel. Een map kopiëren vraagt -r. Bestaat het doel al, dan overschrijft cp het zonder te vragen, tenzij je -i meegeeft. (slide 30)
- **mv**: Verplaatst een bestand of map. Hernoemen is ook mv: verplaatsen naar dezelfde map met een andere naam. (slide 30)
- **rm**: Verwijdert, definitief. Geen prullenbak, geen bevestiging. Een map verwijderen vraagt rm -r, dus kijk eerst met ls wat eraan gaat. (slide 31)
- **code .**: Opent de map waar je staat als project in VS Code. open . toont dezelfde map in Finder, explorer . in Verkenner. (slide 32)
- **man**: De volledige handleiding van een commando, zoals man ls. Bladeren met de pijltjes, eruit met q. Korter is ls --help, of tldr voor een paar voorbeelden. (slide 37)
- **Wildcard**: Het sterretje staat voor eender welke reeks tekens: ls \*.html toont alle html-bestanden. De shell vult het in voor het commando draait, dus nooit een spatie voor de ster. (slide 38)
- **grep**: Zoekt tekst in bestanden: grep todo README.md. Met -r zoekt hij in alles onder een map, met -i maken hoofdletters niet uit. (slide 40)
- **find**: Zoekt bestanden in mappen, vanaf een startmap. find . -name "\*.css" toont elk css-bestand onder de map waar je staat. (slide 40)
- **Ctrl+C**: Stopt wat er draait en geeft je de prompt terug. De noodrem, bijvoorbeeld voor een npm run dev die blijft loggen. (slide 41)
- **vim**: Een editor in de terminal waar typen niets lijkt te doen. Eruit geraak je met Esc, dan :q! en Enter. (slide 42)
- **command not found**: De shell vindt het programma niet: het staat niet geïnstalleerd of niet in je PATH. Of je maakte een tikfout, want de shell raadt niet mee. (slide 46)
- **PATH**: De lijst mappen waar je shell naar programma's zoekt. Net iets geïnstalleerd? Open een nieuwe terminal, anders kent hij de nieuwe PATH nog niet. (slide 46)
- **sudo**: Voert een commando uit met de rechten van de beheerder, na je wachtwoord. Het zet alle beveiliging uit, dus nooit voor een commando dat je niet begrijpt en niet voor npm install -g. (slide 47)
- **.zshrc**: Het bestand in je home dat zsh bij elke start leest, met bijvoorbeeld je aliassen: alias gs="git status". In Git Bash heet het .bashrc, en na een wijziging doe je source ~/.zshrc. (slide 50)

## Links en bronnen

### In de presentatie

- [mctantwerp.github.io/codeplay/spel/terminal-velocity](https://mctantwerp.github.io/codeplay/spel/terminal-velocity) (slide 55)
- [explainshell.com](https://explainshell.com) (slide 57)
- [tldr.sh](https://tldr.sh) (slide 57)
- [Oh My Zsh](https://ohmyz.sh) (slide 57)
- [The Missing Semester](https://missing.csail.mit.edu) (slide 57)
