# Command Line Interface
Alle instellingen die via de grafische gebruikersinterface (Graphical User Interface, GUI) worden geconfigureerd, kunnen ook via de zogenaamde shell worden ingevoerd in de vorm van opdrachtregels.
De shell is een programma dat fungeert als interface tussen systeem en gebruiker. Het omvat een opdrachtregelinterpreter (ook terminal emulator genoemd) die gebruikersinvoer via het toetsenbord ontvangt, deze uitleest, eventueel programma’s start en vervolgens output in de vorm van tekstuitvoer teruggeeft aan de gebruiker. Daarnaast heeft iedere shell een eigen programmeertaal, waarmee shellscripts kunnen worden geschreven, bijvoorbeeld om programma-aanvragen te koppelen en administratieve taken te vereenvoudigen.
Iedere shell draait in een terminal. Aan het begin van het computertijdperk werden daarvoor zelfstandige apparaten, zogenaamde hardcopyterminals (printer of beeldscherm plus toetsenbord) gebruikt. Deze werden op moderne computers vervangen door terminalemulators. Dit zijn programma’s die gebruikers een grafisch venster bieden voor de interactie met de shell.
Zodra je de terminal van je besturingssysteem opent, start deze de in de instellingen vastgelegde standaard shell (bijvoorbeeld de Bourne again shell, Bash, Zsh) en kan deze invoer ontvangen in de zogenaamde prompt.
De interactie met de shell vindt in de regel plaats door middel van commando’s, waarmee gelijknamige opdrachtregelprogramma’s kunnen worden geopend. Voor iedere actie die je via de linux-terminal wilt uitvoeren, open je een programma volgens het volgende basisschema:
COMMANDO [OPTIES][argumenten]
Een programma wordt via de terminal in Linux geopend met de naam van het programma. De meeste programma’s bieden de mogelijkheid om bepaalde programmafuncties te openen via Opties. Als een programma argumenten verwacht, bijvoorbeeld in de vorm van bestanden of paden, worden deze normaal gesproken weergegeven op basis van de geselecteerde opties.
# Verschillende terminals
# Windows
Bijna alles wat je normaal kunt uitvoeren via de interface op het bureaublad, kan ook uitgevoerd worden via Powershell. Het is een zeer geavanceerde omgeving, die ook nog met extra functies kan worden uitgebreid.
Windows heeft echter nog een andere terminal namelijk de Command Prompt, dit is legacy software dat minder krachtig is dan Powershell maar omdat er te veel oude software afhankelijk is van de Command Prompt is deze wel nog steeds ingebakken in het systeem.
Sindskort is er ook de Windows Terminal die je kan downloaden via de Windows Store. Deze terminal is een moderne aanpak en kent veel settings. Er zijn eindelijk tabs, je kan toegang krijgen tot verschillende shells zoals Powershell, de klassieke Command Prompt maar ook tot Ubuntu dankzij WSL.
# Mac en Linux
MacOS is een besturingssysteem gebaseerd op Unix en hun CLI is nagenoeg hetzelfde. Bash is de standaard shell van MacOS maar je kan zoals alle Linux toestellen andere shells installeren zoals Z-Shell, Fish…
# Waarom wij Linux Command Line aanleren?
Het is niet noodzakelijkerwijs beter om Linux CLI te leren in plaats van de Windows Command Line (CMD) - het hangt af van je specifieke behoeften en het gebruiksscenario. Beide CLI’s hebben hun eigen sterke punten en toepassingsgebieden. Hier zijn enkele redenen waarom je Linux CLI zou kunnen overwegen:
# Open-source en veelzijdigheid
Linux is open-source, wat betekent dat het aanpasbaar is en beschikbaar is in verschillende distributies om aan verschillende behoeften te voldoen. Dit maakt Linux CLI geschikt voor een breed scala aan toepassingen, van serverbeheer tot softwareontwikkeling.
# Serverbeheer
Veel servers in datacenters draaien op Linux. Als je serverbeheer of systeembeheertaken wilt uitvoeren, is het essentieel om bekend te zijn met de Linux CLI, omdat je vaak met Linux-servers zult werken.
# Ontwikkelomgevingen
Linux wordt vaak gebruikt voor ontwikkeling, vooral voor webontwikkeling. Het biedt een breed scala aan ontwikkelingstools en een flexibele werkomgeving.
# Scripting en automatisering
Linux CLI is krachtig voor scripting en automatisering van taken, wat handig is voor systeembeheer en gegevensverwerking.
# Commando’s
Welke commando’s leer je nu best? Het is niet zo dat Bash béter is dan PowerShell, maar welke leer je nu best? Dat hangt af van de omgeving waar je verder in zal werken. Werk je vooral op Windows systemen en ben je een .NET developer? Dan is PowerShell waarschijnlijk de beste optie. Werk je vooral op Unix systemen en met Linux servers? Dan zal het nuttig zijn om de Bash commando’s te leren.
Het is zo dat dankzij WSL je als webdeveloper op Windows natuurlijk ook de Bash commando’s kan gebruiken. Ook is PowerShell (in tegenstelling tot Command Prompt) gebaseerd op Linux en zal veel aliasen hebben voor linux commando’s, zo zal ls ook werken in PowerShell, op de achtergrond voert dit het dir commando uit.
# Structuur
Een commando is opgebouwd als volgt:
artevelde:-/ $ rm -f test.txt
- Prompt:
artevelde:-/ $ - Command:
rm - Optie/Parameter:
-f - Argument:
test.txt
# PowerShell vs Linux
| SNo. | Windows | Linux | Description |
|---|---|---|---|
| 1. | dir | ls -l | Directory listing |
| 2. | ren | mv | Rename a file |
| 3. | copy | cp | Copying a file |
| 4. | move | mv | Moving a file |
| 5. | cls | clear | Clear Screen |
| 6. | del | rm | Delete file |
| 7. | fc | diff | Compare contents of files |
| 8. | find | grep | Search for a string in a file |
| 9. | command /? | man command | Display the manual/help details of the command |
| 10. | chdir | pwd | Returns your current directory location |
| 11. | time | date | Displays the time |
| 12. | cd | cd | Change the current directory |
| 13. | md | mkdir | To create a new directory/folder |
| 14. | echo | echo | To print something on the screen |
| 15. | edit | vim(depends on editor) | To write in to files. |
| 16. | exit | exit | To leave the terminal/command window. |
| 17. | format | mke2fs or mformat | To format a drive/partition. |
| 18. | free | mem | To display free space. |
| 19. | rmdir | rm -rf/rmdir | To delete a directory. |
| 20. | taskkill | kill | To kill a task. |
| 21. | tasklist | ps x | To list running tasks. |
| 22. | set var=value | export var=value | To set environment variables. |
| 23. | attrib | chown/chmod | To change file permissions. |
| 24. | tracert | traceroute | To print the route packets trace to network host. |
| 25. | at | cron | daemon to execute scheduled commands. |
| 26. | type | cat | To print contents of a file. |
| 27. | ping | ping | To send ICMP ECHO_REQUEST to network hosts. |
| 28. | nslookup | nslookup | To query Internet name servers interactively. |
| 29. | chdisk | du -s | For disk usage. |
| 30. | tree | ls -R | To list directory recursively. |
# Populaire commando’s
# Folders
| Commando | Afkorting | Uitleg |
|---|---|---|
pwd | print working directory | Toon het pad van de huidige folder |
cd <directory> | change directory naar <directory> | Ga naar een andere folder |
cd .. | change directory naar .. | Ga naar de bovenstaande folder |
ls | list | Toon de inhoud van de huidige folder, maar geen verborgen bestanden |
ls -la | list -list all | Toon de inhoud van de huidige folder |
mkdir <directory> | make directory | Maak een nieuwe folder genaamd <directory>, je kan ook subfolders maken met bijvoorbeeld <directory>/<subfolder> |
tar -c -f <name.tar> <directory> <directory> | create filename | Maak een nieuwe tar-folder genaamd <name.tar> met andere folders als |
tar -t -f <name.tar> | Bekijk de inhoud van een tar-folder | |
tar -x -f <name.tar> | tar-folder uitpakken |
# Bestanden
| Commando | Afkorting | Uitleg |
|---|---|---|
rm <file> | remove <file> | Verwijder een bestand |
rm -r <directory> | remove -recurse <directory> | Verwijder een folder, en alles dat er in zit |
rm -f <file> | remove -force <file> | Verwijder een bestand geforceerd |
rm -rf <directory> | remove -recurseforce <directory> | Verwijder een folder geforceerd, options zullen bestaan uit enkele letters dus kunnen we ze naast elkaar schrijven (en zelf veranderen van plaats) |
mv <file-old> <file-new> | move <file-old> <file-new> | Hernoem een bestand, je zal deze eigenlijk ‘verplaatsen’ en overschrijven in dezelfde folder |
mv <file> <directory> | move <file> <directory> | Verplaats een bestand of folder naar een andere folder (pas op! je kan dit makkelijk overschrijven) |
cp <file> <directory> | copy <file> <directory> | Kopieeer een bestand naar een folder |
cp -r <directory1> <directory2> | copy -recurse <directory1> <directory2> | Kopieeer een folder naar een andere folder |
touch <file> | Maak een nieuw bestand aan, als het al bestaat update je de ‘Modified’ datum en tijd |
# Bekijken
| Commando | Afkorting | Uitleg |
|---|---|---|
cat <file> | concatenate <file> | Toon de inhoud van een bestand. De afkorting staat voor concatenate, dat is omdat je meerdere bestanden kan tonen zoals cat <file1> <file2>. |
less <file> | Toon de inhoud van een bestand maar met meer opties. De inhoud van het bestand kan worden gepagineerd, met space of pijltje naar beneden kan je naar de volgende pagina. Om deze viewer te verlaten druk je op q of Ctrl+c, b brengt je naar de vorige pagina | |
head <file> | Toon de eerste 10 lijnen van het bestand, dit gaat sneller dan cat | |
clear | Kuis je terminal op en ‘verwijder’ je geschiedenis/vorige commando’s | |
<cmd> > <file> | Plaats het resultaat van je commando in een ander bestand | |
<cmd> >> <file> | Voeg het resultaat van je commando toe in een ander bestand, je zal de huidige inhoud niet overschrijven maar de output er aan plakken | |
<cmd1> | <cmd2> | Gebruik het resultaat van het eerste commando als input van je eerste commando. Bijvoorbeeld: ls | grep readme |
# Systeem
| Commando | Afkorting | Uitleg |
|---|---|---|
du | Disk usage | Toon statistieken van het schijfgebruik |
du -h | Human | Toon menselijk leesbare statistieken van het schijfgebruik |
du -s | Specific | Toon menselijk leesbare statistieken van het schijfgebruik voor een specifiek bestand |
df | Display free | Toon de vrije schijfruimte |
ln <bronbestand> <doelbestand> | Link | Maak een harde of symbolische links naar bestanden en mappen. Een link is een verwijzing naar een ander bestand of een andere map op het bestandssysteem. |
sh <script> | shell | Voer een shell script uit. |
sudo | superuser do | Wordt gebruikt om systeemtaken uit te voeren die administratieve rechten vereisen. |
reboot | Wordt gebruikt om computer uit te schakelen. |
# Zoeken
| Commando | Afkorting | Uitleg |
|---|---|---|
find <dir> -name "<file>" | Vind alle bestanden "<file>" in de folder <dir>, je kan wildcardsgebruiken voor de bestandsnaam. Bijvoorbeeld: find ./ -name "hello.*" | |
grep "<text>" <file> | global regular expression print | Vind alle instanties van "<text>" in het bestand <file>, voeg de optie -i toe om hoofdletter-gevoelig te zoeken |
grep -rl "<text>" <dir> | global regular expression print -recurse -list | Vind alle instanties van "<text>" in de folder <dir> |
# Netwerk
| Commando | Afkorting | Uitleg |
|---|---|---|
ssh <username>@<host> | secure shell | Start een SSH collectie met de host als gebruiker <username> |
# Processen
| Commando | Afkorting | Uitleg |
|---|---|---|
ps | process status | Toon een lijst van de huidige processen |
top | table of processes | Toon een live lijst van de huidige processen met meer info |
kill <pid> | Stop het proces met het pid: <pid> (process id) |
# Toestemmingen
| Commando | Afkorting | Uitleg |
|---|---|---|
chmod <file> 755 | change mode <permission> <file> | Verander de permissies van een bestand, gebruik -r als je een folder en diens bestanden wil aanpassen |
Chmod Codes
- r: read
- w: write
- x: execute
OWNER GROUP WORLD
r w x r w x r w x
1 1 1 1 0 1 1 0 1
7 5 5
|______|_______|
|
755
2
3
4
5
6
7
# Tips en tricks
- Hulp nodig? Je kan steeds hulp krijgen over een bepaald commando met de
--helpoptie of met hetmancommando.manstaat voor manual maar opdat het zal werken moet je je Man path juist linken. - Meerdere commando’s? Je kan commando’s uitvoeren door ze op dezelfde lijn te onderschijnen met
;. Je kan bovendien ervoor zorgen dat commando 2 maar uitgevoerd zal worden wanneer commando 1 succesvol is met&&, of enkel als commando 1 faalt met||. - Ctrl shortcuts Er zijn meerdere shortcuts die handig kunnen zijn in de CLI.
- CTRL+A: Cursor naar de start van de lijn
- CTRL+E: Cursor naar het einde van het lijn
- CTRL+K: Verwijder de tekst na de cursor
- CTRL+U: Verwijder de tekst voor de cursor
- CTRL+L: Clear de CLI, equivalent van
clear - CTRL+C: Stop het lopende commando
- TAB: Autocomplete je pad
- Geschiedenis
- Pijltje naar boven: Vorig commando
- Pijltje naar onder: Volgend commando
history: De geschiedenis van je commando’s
- Home folder: je kan de tilde gebruiker als pseudoniem voor het huispad.
cd /Users/your-username/projects/kan je schrijven alscd "~/projects/.