Ga naar hoofdinhoud

Linux – Processen & packages

In dit labo inspecteer je lopende processen, beheer je achtergrondprocessen en installeer je software via de pakketbeheerder. Je doet dat op een echte machine: je persoonlijke container op de schoolserver.

Leerstof
Werk in je eigen container

Op de schoolserver draait een Linux-container die alleen van jou is. Hoe je je gegevens opvraagt, hoe je verbinding maakt en wat je doet als dat niet lukt, staat stap voor stap uitgelegd in de cursus op Digitap. Zorg dat je verbonden bent voor je aan oefening 1 begint.


Oefening 1 – Processen inspecteren​

Elk programma dat draait is een proces met een eigen nummer, het PID. Met dat nummer spreek je het later aan. Je leert hier zien wat er draait, van je eigen shell tot het allereerste proces van het systeem.

  1. Toon een momentopname van alle lopende processen: ps aux.
  2. Zoek het PID van je eigen shell-sessie door te filteren op bash. Vergelijk het met wat echo $$ teruggeeft: dat is het PID van je huidige shell.
  3. Toon enkel je eigen processen met ps -u $(whoami).
  4. Start top en kijk welk proces het meeste geheugen gebruikt. Verlaat top met q.
  5. Zoek het proces met PID 1: ps -p 1.
PID 1 in een container

Op een gewone Linux-machine is PID 1 systemd: het eerste proces dat de kernel start, en de voorouder van alle andere. In een container zie je vaak iets anders, bijvoorbeeld bash of sh. Dat komt doordat een container geen volledig systeem opstart, maar één proces waarrond alles draait. Noteer wat jij ziet; we komen erop terug bij oefening 5.

Liever eerst oefenen in de oefenterminal?
Oefening 1 – Processen inspecterenStap 1 van 5

Elk programma dat draait is een proces met een eigen nummer, het PID. Met dat nummer spreek je het proces later aan. Je leert hier hoe je ziet wat er draait.

Toon een momentopname van alle lopende processen op het systeem.

student@ap-linux:~$
Pijltjes omhoog en omlaag halen vorige commando’s terug, tab vult namen aan. Rondkijken met ls, pwd of cat mag altijd.

Oefening 2 – Achtergrondprocessen​

Een commando dat lang duurt houdt je terminal bezet. Met jobs pauzeer je zo'n proces, stuur je het naar de achtergrond en haal je het weer terug. Je doorloopt de volledige cyclus, sneltoetsen inbegrepen.

  1. Start sleep 60 op de voorgrond. Je prompt is nu bezet.
  2. Pauzeer het proces met Ctrl+Z en stuur het daarna naar de achtergrond met bg.
  3. Bekijk de achtergrondprocessen van deze shell met jobs.
  4. Haal het proces terug naar de voorgrond met fg.
  5. Stop het met Ctrl+C.
  6. Start nu sleep 120 meteen op de achtergrond, met een & achter het commando.
  7. Controleer met jobs welk jobnummer het gekregen heeft.
  8. Beëindig het via zijn jobnummer: kill %1.
Jobnummer of PID?

%1 is een jobnummer en geldt enkel binnen deze shell-sessie. Een PID is systeembreed en blijft werken vanuit een andere terminal. Wil je het verschil zien, open dan een tweede verbinding naar je container en probeer daar jobs (leeg) en ps aux | grep sleep (wel resultaat).

Liever eerst oefenen in de oefenterminal?
Oefening 2 – AchtergrondprocessenStap 1 van 8

Een commando dat lang duurt houdt je terminal bezet. Met jobs kun je zo’n proces pauzeren, naar de achtergrond sturen en later terughalen. In deze terminal werken de sneltoetsen Ctrl+Z en Ctrl+C echt.

Start het commando sleep 60 op de voorgrond.

student@ap-linux:~$
Pijltjes omhoog en omlaag halen vorige commando’s terug, tab vult namen aan. Rondkijken met ls, pwd of cat mag altijd.

Oefening 3 – The Riddler's Endless Loop​

The Riddler heeft een script achtergelaten dat eindeloos blijft draaien. Je schrijft het zelf, spoort het op en stopt het op twee manieren. Onderweg ontdek je waarom kill -9 niet je eerste keuze hoort te zijn.

  1. Maak in je thuismap een bestand riddler.sh. Gebruik nano riddler.sh, of plak het in één keer met een heredoc:

    cat > riddler.sh << 'EOF'
    #!/bin/bash
    while true; do
    echo "Riddle me this..."
    sleep 5
    done
    EOF
  2. Maak het script uitvoerbaar met chmod +x.

  3. Start het op de achtergrond: ./riddler.sh &.

  4. Zoek het PID van het proces met ps aux | grep riddler.

  5. Bevestig hetzelfde PID met pgrep -f riddler.

  6. Stuur een SIGTERM: kill <pid>. Dat is het vriendelijke verzoek om te stoppen, en meteen het standaardsignaal van kill.

  7. Controleer met pgrep -f riddler dat het proces echt weg is.

  8. Start het script opnieuw op de achtergrond en stuur nu een SIGKILL: kill -9 <pid>.

Schrijf voor jezelf op wat het verschil is tussen stap 6 en stap 8, en waarom je met de eerste begint.

Waarom pgrep -f?

Zonder -f kijkt pgrep enkel naar de naam van het programma, en dat is hier bash. Met -f zoekt het in de volledige commandoregel, dus ook in de scriptnaam. Bij ps aux | grep riddler zie je trouwens ook de grep zelf in de lijst staan: dat is normaal.

Liever eerst oefenen in de oefenterminal?
Oefening 3 – The Riddler’s Endless LoopStap 1 van 9

The Riddler heeft een script achtergelaten dat eindeloos blijft draaien. Jouw taak: het opsporen via zijn PID en het op twee manieren stoppen. Het script schrijf je in de tab Editor, de rest doe je in de terminal.

Ga naar de tab **Editor**, maak daar een bestand riddler.sh met onderstaande inhoud, en klik op Opslaan.

#!/bin/bash
while true; do
  echo "The Riddler is watching..."
  sleep 5
done
student@ap-linux:~$
Pijltjes omhoog en omlaag halen vorige commando’s terug, tab vult namen aan. Rondkijken met ls, pwd of cat mag altijd.

Oefening 4 – Pakketbeheer met apt​

Software installeer je op Ubuntu niet door bestanden te downloaden, maar via de pakketbeheerder. Die houdt bij wat er geïnstalleerd is en welke afhankelijkheden erbij horen, en ruimt ze desgevraagd weer op. Vanaf hier haalt je container echt bestanden op van het internet.

  1. Ververs de pakketlijsten: sudo apt update.
  2. Installeer de beschikbare updates: sudo apt upgrade. Bevestig met y. Dit kan enkele minuten duren.
  3. Zoek in de pakketlijst naar htop: apt search htop.
  4. Vraag meer informatie op over dat pakket: apt show htop. Zoek in de uitvoer de regel Depends.
  5. Installeer htop.
  6. Start het op. Wat zie je extra vergeleken met top? Verlaat het met q.
  7. Verwijder htop weer met sudo apt remove htop.
  8. Ruim de afhankelijkheden op die nu nergens meer voor nodig zijn: sudo apt autoremove.
Liever eerst oefenen in de oefenterminal?
Oefening 4 – Pakketbeheer met aptStap 1 van 8

Software installeer je op Ubuntu niet door bestanden te downloaden, maar via de pakketbeheerder. Die houdt bij wat er geïnstalleerd is en welke afhankelijkheden erbij horen.

Ververs de pakketlijsten, zodat je systeem weet welke updates er beschikbaar zijn.

student@ap-linux:~$
Pijltjes omhoog en omlaag halen vorige commando’s terug, tab vult namen aan. Rondkijken met ls, pwd of cat mag altijd.

Oefening 5 – Services beheren​

Een service draait op de achtergrond en wordt beheerd door het systeem. Let onderweg goed op het verschil tussen start en enable: het eerste geldt nu, het tweede vanaf de volgende herstart.

Controleer eerst welk beheer je container gebruikt:

ps -p 1 -o comm=

Zie je systemd, volg dan de linkerkolom hieronder. Zie je iets anders (bash, sh, tini), dan draait je container zonder systemd en werkt systemctl niet. Gebruik dan de rechterkolom.

  1. Installeer eerst de webserver: sudo apt install nginx.
Met systemdZonder systemd
2. systemctl status nginx2. service nginx status
3. sudo systemctl start nginx3. sudo service nginx start
4. systemctl status nginx: staat er nu active (running)?4. service nginx status
5. curl localhost5. curl localhost
6. sudo systemctl stop nginx6. sudo service nginx stop
7. systemctl status nginx en curl localhost7. service nginx status en curl localhost
8. sudo systemctl enable nginx8. niet beschikbaar, zie hieronder
9. systemctl list-unit-files --state=enabled9. niet beschikbaar, zie hieronder
Waarom stap 8 en 9 soms niet werken

enable zegt: start deze service automatisch mee bij het opstarten van de machine. Een container start meestal geen volledig systeem op, dus is daar niets te regelen. Dat maakt het onderscheid tussen start en enable niet minder belangrijk: op een echte server is het het verschil tussen "de webserver draait nu" en "de webserver draait ook nog na een herstart". Kan je het hier niet uitvoeren, doorloop stap 8 en 9 dan in de oefenterminal hieronder.

De oefenterminal met de systemctl-stappen
Oefening 5 – Services met systemctlStap 1 van 9

Een service is een programma dat op de achtergrond draait en door systemd beheerd wordt. Let onderweg goed op het verschil tussen start (nu) en enable (bij elke herstart).

Installeer eerst de webserver nginx.

student@ap-linux:~$
Pijltjes omhoog en omlaag halen vorige commando’s terug, tab vult namen aan. Rondkijken met ls, pwd of cat mag altijd.