Command Line Interface (CLI) Basis Onder de Knie Krijgen voor Beginners
Inleiding: wat is een CLI en waarom zou je het leren?
Een Command Line Interface (CLI) is een manier om je computer te bedienen door tekstcommando’s te typen in plaats van te klikken in een grafische interface. Je werkt in een terminal (Linux/macOS) of in PowerShell/Opdrachtprompt (Windows).
Waarom is dit nuttig?
- Snelheid: veel taken gaan sneller met één commando dan met tien muisklikken.
- Herhaalbaarheid: je kunt stappen exact herhalen, of automatiseren in scripts.
- Kracht: je kunt enorme hoeveelheden bestanden doorzoeken, filteren en bewerken.
- Professionele standaard: systeembeheer, data-analyse, softwareontwikkeling en DevOps draaien grotendeels op CLI-werk.
Deze tutorial legt de basis grondig uit en gebruikt echte commando’s die je direct kunt uitvoeren.
1. Terminologie: terminal, shell, prompt en commando’s
Terminal
De terminal is het venster waarin je typt en output ziet. Voorbeelden:
- Linux: GNOME Terminal, Konsole
- macOS: Terminal, iTerm2
- Windows: Windows Terminal (aanrader), PowerShell, Opdrachtprompt
Shell
De shell is het programma dat jouw commando’s interpreteert. Veelvoorkomende shells:
- Linux/macOS:
bash,zsh,fish - Windows:
PowerShell(moderne standaard),cmd(ouder)
Prompt
De prompt is het stukje tekst dat aangeeft dat de shell klaar is voor input. Voorbeelden:
gebruiker@pc:~$PS C:\Users\Naam>
Commando, argumenten en opties
Een commando bestaat vaak uit:
- commando: de naam, bijvoorbeeld
ls - argumenten: waarop het commando werkt, bijvoorbeeld een mapnaam
- opties: extra instellingen, vaak met
-of--
Voorbeeld (Linux/macOS):
ls -la /etc
ls= lijst tonen-la= opties (lange weergave + verborgen bestanden)/etc= argument (map)
2. Veilig oefenen: waar kun je experimenteren?
Maak een oefenmap in je thuismap zodat je niets belangrijks stukmaakt.
Linux/macOS:
mkdir -p ~/cli-oefening
cd ~/cli-oefening
Windows PowerShell:
mkdir $HOME\cli-oefening
cd $HOME\cli-oefening
Tip: werk in het begin nooit in systeemmappen als je niet weet wat je doet (zoals /etc, /bin, C:\Windows).
3. Navigeren door mappen
Waar ben ik?
Linux/macOS:
pwd
Windows PowerShell:
Get-Location
Inhoud van een map bekijken
Linux/macOS:
ls
ls -l
ls -la
PowerShell:
Get-ChildItem
Get-ChildItem -Force
Uitleg:
-ltoont details (rechten, eigenaar, grootte, datum).-aof-Forcetoont ook verborgen bestanden (die vaak met een punt beginnen op Linux/macOS).
Van map veranderen
Linux/macOS:
cd /pad/naar/map
cd ~
cd ..
cd -
PowerShell:
cd C:\pad\naar\map
cd $HOME
cd ..
cd -
Belangrijke concepten:
..betekent “bovenliggende map”.~of$HOMEbetekent je thuismap.cd -brengt je terug naar de vorige map (handig bij heen-en-weer werken).
4. Bestanden en mappen maken, kopiëren, verplaatsen en verwijderen
Mappen maken
Linux/macOS:
mkdir project
mkdir -p project/src
PowerShell:
mkdir project
mkdir project\src
-p maakt tussenniveaus automatisch aan.
Lege bestanden maken
Linux/macOS:
touch notities.txt
PowerShell:
New-Item -ItemType File -Name notities.txt
Tekst in een bestand zetten
Linux/macOS:
echo "Hallo CLI" > notities.txt
echo "Tweede regel" >> notities.txt
PowerShell:
"Hallo CLI" | Out-File -FilePath notities.txt -Encoding utf8
"Tweede regel" | Out-File -FilePath notities.txt -Encoding utf8 -Append
Uitleg:
>overschrijft het bestand.>>voegt toe aan het einde.
Bestand bekijken
Linux/macOS:
cat notities.txt
PowerShell:
Get-Content notities.txt
Kopiëren
Linux/macOS:
cp notities.txt backup.txt
cp -r project project-backup
PowerShell:
Copy-Item notities.txt backup.txt
Copy-Item project project-backup -Recurse
Verplaatsen of hernoemen
Linux/macOS:
mv backup.txt backup-oud.txt
mv backup-oud.txt project/
PowerShell:
Move-Item backup.txt backup-oud.txt
Move-Item backup-oud.txt project\
Verwijderen (voorzichtig)
Linux/macOS:
rm backup-oud.txt
rm -r project-backup
rm -rf project-backup
PowerShell:
Remove-Item backup-oud.txt
Remove-Item project-backup -Recurse
Remove-Item project-backup -Recurse -Force
Belangrijk: verwijderen via CLI gaat meestal niet naar een prullenbak.
-rverwijdert recursief (mappen met inhoud).-fof-Forcedwingt verwijderen af. Gebruik dit pas als je zeker bent.
5. Autocompletion, geschiedenis en sneltoetsen
Autocompletion
Druk op Tab om commando’s en paden automatisch aan te vullen. Dit bespaart tijd en voorkomt typefouten.
Geschiedenis
Linux/macOS:
pijltje omhoog/omlaagdoor eerdere commando’shistorytoont lijst
PowerShell:
pijltje omhoog/omlaagwerkt ookGet-Historytoont lijst
Handige sneltoetsen (veel shells)
Ctrl + C: stop een draaiend commandoCtrl + L: scherm leegmaken (vergelijkbaar metclear)Ctrl + A: naar begin van de regelCtrl + E: naar einde van de regelCtrl + R: zoeken in geschiedenis (op Linux/macOS en vaak ook in moderne shells)
6. Hulp en documentatie lezen
Ingebouwde hulp
Linux/macOS:
man ls
man cp
PowerShell:
Get-Help Get-ChildItem
Get-Help Get-ChildItem -Examples
Get-Help Get-ChildItem -Full
Korte hulp via opties
Linux/macOS:
ls --help
PowerShell cmdlets hebben vaak -? niet nodig; gebruik Get-Help.
Hoe lees je manpages?
qom te stoppen/woordom te zoekennvoor volgende match
7. Paden: absoluut, relatief en speciale tekens
Absoluut pad
Begint vanaf de “wortel” van het bestandssysteem:
- Linux/macOS:
/home/naam/cli-oefening - Windows:
C:\Users\Naam\cli-oefening
Relatief pad
Begint vanaf je huidige map:
project/src../andere-map
Spaties in namen
Gebruik aanhalingstekens of escape-tekens.
Linux/macOS:
mkdir "Mijn Project"
cd "Mijn Project"
PowerShell:
mkdir "Mijn Project"
cd "Mijn Project"
8. Wildcards en globbing: veel bestanden tegelijk
Wildcards zijn patronen waarmee je meerdere bestanden tegelijk kiest.
Linux/macOS (en vaak ook PowerShell):
*= alles?= één teken[]= één teken uit een set
Voorbeeld:
touch foto1.jpg foto2.jpg fotoA.png
ls *.jpg
PowerShell:
New-Item foto1.jpg -ItemType File
New-Item foto2.jpg -ItemType File
New-Item fotoA.png -ItemType File
Get-ChildItem *.jpg
Let op: wildcards worden meestal door de shell uitgebreid vóór het commando draait. Dat betekent dat rm *.jpg echt alle .jpg-bestanden kan verwijderen.
9. Zoeken: bestanden vinden en tekst doorzoeken
Bestanden zoeken op naam
Linux/macOS:
find . -name "*.txt"
find . -type f -name "notities.txt"
PowerShell:
Get-ChildItem -Recurse -Filter *.txt
Get-ChildItem -Recurse -File -Filter notities.txt
Uitleg:
findis extreem krachtig: je kunt zoeken op type, datum, grootte, rechten, enzovoort.Get-ChildItem -Recursekan veel output geven; combineer met filters.
Tekst zoeken in bestanden
Linux/macOS:
grep "CLI" notities.txt
grep -R "TODO" .
grep -n "regel" notities.txt
PowerShell:
Select-String -Pattern "CLI" -Path notities.txt
Select-String -Pattern "TODO" -Path .\* -Recurse
Select-String -Pattern "regel" -Path notities.txt
Uitleg:
-Rof-Recursezoekt in submappen.-ntoont regelnummers (handig bij debuggen).
10. Pipes en redirection: commando’s aan elkaar knopen
Een van de grootste krachten van CLI is dat je output van het ene commando kunt doorgeven aan het volgende.
Pipe |
Linux/macOS:
ls -la | grep ".txt"
PowerShell:
Get-ChildItem | Select-String ".txt"
Concept:
- Links produceert tekst (of objecten in PowerShell).
- Rechts filtert of verwerkt die output.
Output omleiden naar bestand
Linux/macOS:
ls -la > lijst.txt
PowerShell:
Get-ChildItem | Out-File lijst.txt -Encoding utf8
Fouten apart behandelen (Linux/macOS)
Linux/macOS heeft aparte stromen:
- standaardoutput (1)
- foutoutput (2)
Voorbeeld:
ls bestaand.txt nietbestaand.txt > output.txt 2> fouten.txt
Alles (output + fouten) samen:
ls bestaand.txt nietbestaand.txt > alles.txt 2>&1
11. Processen en taken beheren
Een commando dat lang duurt stoppen
Druk Ctrl + C.
Processen bekijken
Linux/macOS:
ps
ps aux
PowerShell:
Get-Process
Een proces stoppen
Linux/macOS:
kill 12345
kill -9 12345
PowerShell:
Stop-Process -Id 12345
Stop-Process -Name notepad
Uitleg:
kill -9is de harde stop. Gebruik dit alleen als normaal stoppen niet werkt.- In PowerShell kun je op naam stoppen, wat vaak makkelijker is.
12. Rechten en eigenaarschap (Linux/macOS)
Op Linux/macOS zijn bestandsrechten cruciaal.
Rechten bekijken
ls -l
Voorbeeldoutput:
-rw-r--r-- 1 naam staff 120 Jan 1 12:00 notities.txt
Betekenis (globaal):
- eerste teken: type (
-bestand,dmap) - daarna drie blokken: rechten voor gebruiker, groep, anderen
r= lezen,w= schrijven,x= uitvoeren
Rechten aanpassen met chmod
Uitvoerbaar maken:
chmod +x script.sh
Specifieke rechten zetten (bijvoorbeeld 755):
chmod 755 script.sh
Uitleg van 755:
- 7 =
rwx(4+2+1) - 5 =
r-x(4+0+1) - 5 =
r-x
Eigenaarschap aanpassen met chown (vaak met beheerdersrechten)
sudo chown naam:groep bestand.txt
Let op: sudo geeft tijdelijk beheerdersrechten. Wees extra voorzichtig.
13. Werken met editors in de terminal
Snelle editor: nano (Linux/macOS)
nano notities.txt
Handig om te onthouden:
Ctrl + OopslaanCtrl + Xafsluiten
PowerShell: eenvoudige bewerking
Je kunt ook met een grafische editor openen vanuit PowerShell, bijvoorbeeld Kladblok:
notepad notities.txt
14. Netwerkbasis: testen en downloaden
Verbinding testen
Linux/macOS:
ping -c 4 8.8.8.8
PowerShell:
ping 8.8.8.8
HTTP ophalen
Linux/macOS:
curl -I https://example.com
curl https://example.com > pagina.html
PowerShell:
Invoke-WebRequest -Method Head -Uri https://example.com
Invoke-WebRequest -Uri https://example.com -OutFile pagina.html
Uitleg:
-Iof-Method Headhaalt alleen headers op.- Downloaden naar bestand is handig voor testen en automatisering.
15. Archiveren en comprimeren
Linux/macOS: tar en gzip
Maak een tar.gz:
tar -czf project.tar.gz project
Uitpakken:
tar -xzf project.tar.gz
Uitleg:
-cmaken,-xuitpakken-zgzip-fbestandsnaam volgt
Windows PowerShell: zip
In moderne PowerShell:
Compress-Archive -Path project -DestinationPath project.zip
Expand-Archive -Path project.zip -DestinationPath uitgepakt
16. Omgevingsvariabelen en configuratie
Omgevingsvariabelen zijn sleutel-waarde instellingen die programma’s kunnen gebruiken.
Linux/macOS
Toon een variabele:
echo $HOME
echo $PATH
Tijdelijk zetten (alleen voor huidige sessie):
export NAAM="Jan"
echo $NAAM
PowerShell
Toon variabelen:
$HOME
$env:PATH
Tijdelijk zetten:
$env:NAAM = "Jan"
$env:NAAM
Waarom belangrijk?
PATHbepaalt waar je systeem naar uitvoerbare programma’s zoekt.- Veel tools gebruiken variabelen voor configuratie, sleutels en profielen.
17. Kleine automatisering: een eenvoudige back-up taak
Hier is een praktisch voorbeeld: kopieer alle .txt bestanden naar een map backup met datum.
Linux/macOS (bash)
Maak een scriptbestand:
nano backup_txt.sh
Plak dit:
#!/usr/bin/env bash
set -e
doelmap="backup-$(date +%Y-%m-%d)"
mkdir -p "$doelmap"
cp -v *.txt "$doelmap/" 2>/dev/null || true
echo "Klaar: $doelmap"
Maak uitvoerbaar en run:
chmod +x backup_txt.sh
./backup_txt.sh
Uitleg:
set -estopt bij fouten, maar we vangen het geval “geen txt bestanden” af met|| true.date +%Y-%m-%dmaakt een nette datumstring.cp -vtoont wat er gekopieerd wordt.
PowerShell
Maak een scriptbestand:
notepad backup_txt.ps1
Plak dit:
$doelmap = "backup-{0}" -f (Get-Date -Format "yyyy-MM-dd")
New-Item -ItemType Directory -Path $doelmap -Force | Out-Null
Get-ChildItem -Filter *.txt -File -ErrorAction SilentlyContinue |
Copy-Item -Destination $doelmap -Force -Verbose
"Klare back-up: $doelmap"
Run:
.\backup_txt.ps1
Opmerking: als scripts niet mogen draaien door beleid, kun je tijdelijk toestaan (met beleid en voorzichtigheid):
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
18. Veelgemaakte fouten en hoe je ze voorkomt
1) Verkeerde map
Je denkt dat je in ~/cli-oefening zit, maar je zit elders. Controleer:
- Linux/macOS:
pwd - PowerShell:
Get-Location
2) rm -rf zonder controle
Voer eerst een “droge run” uit door te kijken welke bestanden je raakt:
- Linux/macOS:
ls patroonvoordat jerm patroondoet - PowerShell:
Get-ChildItem patroonvoordat jeRemove-Item patroon
3) Spaties en speciale tekens
Gebruik quotes:
cd "Mijn Project"
4) Commando niet gevonden
Mogelijke oorzaken:
- typefout
- programma niet geïnstalleerd
PATHbevat de locatie niet
Controleer op Linux/macOS:
which grep
Controleer op PowerShell:
Get-Command grep
19. Oefenopdrachten (met oplossingen)
Opdracht A: maak structuur en bestanden
- Maak map
workshop - Maak submappen
dataenscripts - Maak bestand
data/invoer.txtmet drie regels tekst - Toon de inhoud
Oplossing Linux/macOS:
mkdir -p workshop/{data,scripts}
echo "regel1" > workshop/data/invoer.txt
echo "regel2" >> workshop/data/invoer.txt
echo "regel3" >> workshop/data/invoer.txt
cat workshop/data/invoer.txt
Oplossing PowerShell:
mkdir workshop
mkdir workshop\data
mkdir workshop\scripts
"regel1" | Out-File workshop\data\invoer.txt -Encoding utf8
"regel2" | Out-File workshop\data\invoer.txt -Encoding utf8 -Append
"regel3" | Out-File workshop\data\invoer.txt -Encoding utf8 -Append
Get-Content workshop\data\invoer.txt
Opdracht B: zoek en filter
- Zoek alle
.txtbestanden onderworkshop - Zoek in die bestanden naar het woord
regel2
Oplossing Linux/macOS:
find workshop -name "*.txt"
grep -R "regel2" workshop
Oplossing PowerShell:
Get-ChildItem workshop -Recurse -Filter *.txt
Select-String -Path workshop\* -Recurse -Pattern "regel2"
Opdracht C: archiveren
- Maak een archief van
workshop - Pak het uit in een nieuwe map
Oplossing Linux/macOS:
tar -czf workshop.tar.gz workshop
mkdir uitgepakt
tar -xzf workshop.tar.gz -C uitgepakt
Oplossing PowerShell:
Compress-Archive -Path workshop -DestinationPath workshop.zip
Expand-Archive -Path workshop.zip -DestinationPath uitgepakt
20. Volgende stappen: wat leer je hierna?
Als je deze basis beheerst, zijn logische vervolgstappen:
- Tekstverwerking:
awk,sed(Linux/macOS) of geavanceerdeSelect-Stringen objectpijplijnen (PowerShell) - Versiebeheer:
git(init, add, commit, branch, merge) - Remote werken:
sshen sleutelbeheer - Pakketbeheer:
apt,dnf,brew, of Windows pakketbeheerders - Scripting: bash-scripts of PowerShell-scripts met functies, parameters en foutafhandeling
Samenvatting
Je hebt geleerd hoe je:
- door mappen navigeert (
cd,pwd,ls) - bestanden en mappen beheert (
mkdir,touch,cp,mv,rm) - hulp vindt (
man,Get-Help) - zoekt naar bestanden en tekst (
find,grep,Select-String) - output combineert en omleidt (pipes,
>,>>) - processen bekijkt en stopt (
ps,kill,Get-Process,Stop-Process) - basis netwerk- en archieftaken uitvoert (
curl,ping,tar,Compress-Archive) - eenvoudige automatisering opzet met scripts
Als je wilt, kan ik een vervolg maken met een reeks praktische mini-projecten (logbestanden analyseren, mappen opschonen, batch-hernoemen, en een complete back-up workflow) afgestemd op jouw besturingssysteem.