Linux
HOGENT toegepaste informatica
Thomas Parmentier, Andy Van Maele, Bert Van Vreckem, Jan Willem
2025-2026
System.inSystem.outSystem.err
| Syntax | Betekenis |
|---|---|
cmd > file |
schrijf uitvoer van cmd weg
naar file |
cmd >> file |
voeg toe aan einde van
file |
cmd 2> file |
schrijf foutboodschappen van
cmd weg naar file |
cmd < file |
gebruik inhoud van file als
invoer voor cmd |
cmd1 | cmd2 |
gebruik uitvoer van cmd1 als
invoer voor cmd2 |
cmd > file

cmd 2> file

# stdout en stderr apart wegschrijven
find / -type d > directories.txt 2> errors.txt
# stderr "negeren"
find / -type d > directories.txt 2> /dev/null
# stdout en stderr samen wegschrijven
find / -type d > all.txt 2>&1
find / -type d &> all.txt
# invoer én uitvoer omleiden
sort < unsorted.txt > sorted.txt 2> errors.txtAls je meer dan één lijn wil afdrukken:
Let op: geen spaties toegelaten vóór de eindemarkering
Dit kan bv. ook:
Probeer het volgende eens!
$ sudo apt install fortune cowsay lolcat figlet
$ echo ${USER} | figlet
$ fortune
$ fortune | cowsay
$ fortune | cowsay | lolcat
echo "Hello world" | figlet
Zonder “overbodig” proces/pipe:
figlet <<< "Hello world!"
stdin of bestand,stdout| (pipe) om complexe bewerkingen
op tekst toe te passen
Ofwel bestand meegeven, ofwel stdin
filter file1 file2...
filter < file
cmd | filter
Merk op: cat file | filter kan je beter anders
schrijven!
tee schrijft weg naar bestand én stdout.
cat, tac en shufcat: wat binnenkomt op stdin afdrukken op stdouttac: idem, maar in omgekeerde volgordeshuf: in willekeurige volgorde$ cat file1 file2 > file3
$ tac file1
$ shuf cards.txt
head en tail$ head /etc/passwd
$ tail -5 /etc/passwd
$ tail -f /var/log/syslog
cut, paste en joincut: selecteer kolommen uit gestructureerde tekst (bv.
CSV)paste: voeg bestanden regel per regel samenjoin: voeg bestanden samen ahv gemeenschappelijke
kolomcut -d: -f1,3-4 /etc/passwd
paste -d';' users.txt passwords.txt
$ cat foodtypes.txt
1 Protein
2 Carbohydrate
$ cat foods.txt
1 Cheese
2 Potato
$ join foodtypes.txt foods.txt
1 Protein Cheese
2 Carbohydrate Potato
sort en uniq$ sort unsorted.txt
$ uniq -c sorted.txt
Welke commando’s gebruik ik het vaakst?
$ history | awk '{ print $2 }' | sort | uniq -c | sort -nr | head
fmt, nl en wc$ fmt -w40 some-file.txt
$ nl script.sh
$ wc thesis.md
$ wc --words thesis.md
$ ls /usr/bin | wc -l
columnInvoer in kolommen afdrukken.
$ column -t -s: < /etc/passwd
$ column -J -N user,passwd,uid,gid,name,home,shell -s: < /etc/passwd
-t, --table: Afdrukken in kolommen-J, --json: Vertalen naar JSON-s, --separator: Input separator-N, --table-columns: namen veldengrep$ grep root /etc/passwd
$ grep '^#' script.sh
$ sudo grep -i dhcp /var/log/syslog
Moet je zoeken in een reeks directories? Gebruik
silversearcher-ag
$ ag TODO *.java
tr$ tr 'A-Z' 'a-z' < UPPERCASE.txt > lowercase.txt
$ tr -d '[:punct:]' < file.txt
sedWat tussen accolades staat wordt uitgevoerd op elke regel
# Druk 4e kolom af (afgebakend door "whitespace")
awk '{ print $4 }'
# Enkel regels afdrukken die beginnen met #
awk '/^#/ { print $0 }'
# Druk kolom 2 en 4 af, gescheiden door ;
awk '{ printf "%s;%s", $2, $4 }'
# Druk de namen van de "gewone" gebruikers af
awk -F: '{ if($3 > 1000) print $1 }' /etc/passwdVermijd opstart van overbodige processen:
Maak bestand aan (bv. script.sh) met een
teksteditor, bv.
Maak bestand uitvoerbaar:
chmod +x script.sh
Voer uit: ./script.sh
#! (# = hash; ! =
bang)#! /usr/bin/python#! /usr/bin/ruby#! /usr/bin/env bash
${PATH} naar bashWat is het verschil?
Bash-variabelen zijn (meestal) strings.
variabele=waarde
=${variable}${var}
"${var}"
set -o nounset ⇒ script afbrekenEnkel binnen zelfde “shell”, niet binnen “subshells”
export:Conventie naamgeving:
foo_barFOO_BAR