Linux
HOGENT toegepaste informatica
Thomas Parmentier, Andy Van Maele, Bert Van Vreckem
2024-2025
System.in
System.out
System.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.txt
Als 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 shuf
cat
: 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 join
cut
: 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
column
Invoer 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
sed
Wat 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/passwd
Vermijd 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 bash
Wat 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_bar
FOO_BAR