2.1 CLI and text file handling
Command Line Interface
CLI is de command line interface van LInux.
Linux bestaat eigenlijk uit de CLI en optioneel zit daarbij een grafische gebruikers interface (GUI). Linux Servers die in datacenters staan zijn vaak headless. Dat betekent dat er geen monitor en toetsenbord is aangesloten op de server. Vaak bestaat één fysieke server ook meerdere virtuele servers. ALs je zelf zo'n server wilt dan moet je zoeken naar VPS, dat staat voor Virtual Personal Server. Een VPS met Linux is erg goedkoop omdat het OS gratis is. Ook is de performance vaak zeer redelijk tot goed. Deze website draait ook op een VPS van een paar euro per maand en samen met deze website draaien er nog een paar websites op dezelfde Virtual Server. Er draaien meerdere virtuele (web) hosts op één virtuele server. Wat een virtual web host is leren we over een paar lessen.
Headless
In data centers staan dus veel headless Linux servers.
Op zich kan er wel een GUI worden toegevoegd, maar dit wordt vaak als omslachtig en traag gezien. Bovendien hebben echte 'hackers' een voorkeur voor een CLI. Je zult leren dat de CLI van Linux erg rijk is en dat je hele gave dingen met een paar commando's kan uitvoeren. Binnen Linux kun je ook vrij eenvoudig zaken automatiseren. Een goede Linux systeembeheerder automatiseert dus als zijn taken en hoeft daarna alleen nog maar updates uit te voeren en te monitoren dat alles goed gaat.
Linux en tekst bestanden (text files)
Linux heeft veel configuratie in plain text files staan. Daarom zijn er veel commando's die iets met files doen.
In de Linux lessen gaan we af en toe een paar handige Linux CLI commando's behandelen.
Om te beginnen gaan we samen in de les naar de volgende commando's kijken. In deze les een paar handige commando's die te maken hebben met files.
Belangrijke commando's voor file handling
commando | wat doet het? | voorbeeld |
man | laat een help pagina van een commando zien | man cat |
cat | laat de inhoud van één of meerdere files zien | cat /var/og/syslog |
grep | zoekt in een file naar een woord | grep error /var/log/syslog |
head | laat de eerste regels van een file zien |
head /var/log/syslog |
tail | laat de laatste regels van een file zien |
tail /var/log/syslog |
touch | maak een legel file |
touch test |
echo | print iets |
echo "Hallo" |
cp | CoPy - kopieer een file |
cp file01 file02 |
mv | MoVe - verplaats/hernoem een file |
mv file01 file02 |
rm | ReMove - verwijder een file |
rm file01 |
Belangrijk: Linux is case senstive!
Redirect output
Linux heeft een paar handige concepten. Zo kan je de output die naar het scherm gaat omleiden naar een file. Dat heet redirect output.
Neem bijvoorbeeld het commando head /var/log/syslog
Dat laat de eerst paar regels van de Linux log zien. Je kunt deze output naar een file wegschrijven. Bijvoorbeeld head /var/log/syslog > mijnTestFile
Het > teken schrijft dus de output van een commando naar een file. Het >> teken voegt de output van een commando toe aan de file.
Voer de volgende commando's uit en probeer te begrijpen wat er gebeurt en waarom.
echo 0123456789 > file01
cat file01 file01 > file02
cat file02
cp file02 file01
cat file01 >> file02
ll
cat file02
Haal alle files weg: rm file01 file02
Commando's aan elkaar rijgen
In Unix/Linux kun je commando's aan elkaar rijgen, dat kan super handig zijn en we komen daar nog in detail op terug, maar kijk eens naar het volgende voorbeeld:
cat /etc/passwd | cut -d ":" -f1 | sort
Wat hier staat is het volgende. Laat de inhoud van de file /etc/passwd zien en gebruik de output als input foor het commando cut. Het commando cut haalt de eerste kolom uit de input en deze output wordt weer gebruikt voor de input van het sort commando. Deze sorteert de output en stuurt de output naar het scherm
Je kunt natuurlijk de output ook naar een file sturen zoals we in het vorige hoofdstuk hebben geleerd.
cat /etc/passwd | cut -d ":" -f1 | sort > user_names.txt
Het commando is nu uitgebreid met > user_names.txt en dat zorgt ervoor dat de output niet naar het scherm gaat, maar naar een file.
Opdrachten
Zorg ervoor dat je VM met Ubuntu Server draait en log aan onder jouw eigen gemaakte user met MobaXterm.
- Ubuntu WS heeft een soort notepad/kladblok.
Met de editor nano kan je iets in de file zetten of veranderen. Open een nieuwe file metnano file01.txt
Zet jouw naam in de file en bewaar (save) de file.
Zoek uit de lijst hierboven met welk commando je de inhoud van de file kunt afdrukken, probeer of het werkt en zet het commando op je antwoordenblad. - Voer de onderstaande stappen uit en schrijf op wat de uitkomst van stap 4 is. Je ziet drie getallen, beschrijf wat deze getallen betekenen.
- Maak met het touch commando een file aan en noem die file.txt
- Gebruik het echo commando om Hello world this is nice! in de file.txt te plaatsen
- Gebruik de geleerde kennis om de tekst Hello world this is nice! vier keer onder elkaar in de file.txt te krijgen.
- Voer het commando
wc file.txt
uit. Wat zie je en wat betekent dat? Als je niet zeker bent, controleer dan metman wc
hoe wc precies werkt.
- Zoek op hoe je met het commando tail de laatst 20 regels moet afdrukken. Druk de laatste 20 regels van /var/log/syslog af en plaatst die in een file laatst20.txt.
Voer het commandocat laatste20.txt laatste20.txt laatste20.txt > laatste.txt
uit.
Hoeveel regels staat er in laatste.txt? Schrijf op hoe je dit hebt gedaan en schrijf je antwoord op. - Als ubuntu is opgestart dan wordt er een regel in de /var/log/syslog gelplaatst, bijvoorbeeld;
Jan 12 21:27:40 ubuntu_vm systemd[1121]: Startup finished in 102ms.
Gebruik grep en zoek uit hoe lang jouw Ubuntu er de laatste keer over deed om te starten. Schrijf het commando dat je hebt gebruikt op. - Laat alleen alle regels uit de syslog file zien van vandaag. Schrijf het commando dat je hebt gebruikt op.
- Het commando
cat file01 > file01
doet iets vreemds; de file01 is leeg, leg uit waarom. - Met het commando
sudo apt-get install sl
installeren we een programmaatje. Omdat we iets selecteren moeten we 'elevated rights' krijgen. Dat is een mooie manier om te zeggen dat we root toegang moeten hebben. Sudo staat voor "Super User DO". In een vervolg les gaan we hier nog verder op in. Installeer het programmaatje en start het op.
Vraag: Kan je de stoomlocomotief ook laten vliegen? Ja, hoe dan - en hoe ben je hier achter gekomen?
Metsudo apt-get remove sl
kunnen we het programmaatje weer verwijderen. - Kijk naar het volgende commando en test het uit.
cat /var/log/syslog | wc | awk '{print $1}'
Het commando is aan elkaar geregen, je kunt er stapjes afhalen om te kijken wat de vorige stapjes deden.
Omschrijf kort op je antwoordenblad wat commando laat zien. - Met
ifconfig
konden we ons ipnummer vinden weet je nog? Probeer maar.
Alle ipnummers in onze VM's beginnen met 192. Metgrep 192
kun je dus de juiste regel vinden.
Rijg de twee commando's aan elkaar, zodat je in één keer de regel met het juiste ipnummer vind.
Schrijf het commando op dat je hebt gebruikt. - Het volgende commando kan ook korter.
cat /var/log/syslog | tail
Hoe doe je hetzelfde, maar dan met minder commando's? Schrijf he verkorte antwoord op. - Maak een file met het commando
echo test > test.txt
Je wilt de file kopiëren en je typt in:
mv test.txt test-bak.txt
Helaas is dat niet goed gegaan want je wilde de file kopiëren en je hebt een verkeerd commando gebruikt. Kijk metls -la
welk(e) files je nu hebt.
Met welk commando corrigeer je dit en zorg je ervoor dat je alsnog een kopie hebt? - Maak drie files, file01.txt, file02.txt en file03.txt en zet in alle drie de files de volgende regel tekst: "Dit is een test bestand!". Voer het commando
cat file01.txt file02.txt >> file03.txt
uit.
(1) Hoeveel keer staat de test-regel nu in het bestand file03.txt ?
Voer nu het commandocat file01.txt file02.txt > file03.txt
uit.
(2) Hoeveel keer staat nu de test-regel in het bestand file03.txt ?
Leg uit waarom het tweede geval minder test-regels laat zien dan het eerste geval.
--