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.
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.
- Toon een momentopname van alle lopende processen:
ps aux. - Zoek het PID van je eigen shell-sessie door te filteren op
bash. Vergelijk het met watecho $$teruggeeft: dat is het PID van je huidige shell. - Toon enkel je eigen processen met
ps -u $(whoami). - Start
topen kijk welk proces het meeste geheugen gebruikt. Verlaattopmetq. - Zoek het proces met PID 1:
ps -p 1.
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?
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.
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.
- Start
sleep 60op de voorgrond. Je prompt is nu bezet. - Pauzeer het proces met Ctrl+Z en stuur het daarna naar de achtergrond met
bg. - Bekijk de achtergrondprocessen van deze shell met
jobs. - Haal het proces terug naar de voorgrond met
fg. - Stop het met Ctrl+C.
- Start nu
sleep 120meteen op de achtergrond, met een&achter het commando. - Controleer met
jobswelk jobnummer het gekregen heeft. - Beëindig het via zijn jobnummer:
kill %1.
%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?
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.
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.
-
Maak in je thuismap een bestand
riddler.sh. Gebruiknano riddler.sh, of plak het in één keer met een heredoc:cat > riddler.sh << 'EOF'#!/bin/bashwhile true; doecho "Riddle me this..."sleep 5doneEOF -
Maak het script uitvoerbaar met
chmod +x. -
Start het op de achtergrond:
./riddler.sh &. -
Zoek het PID van het proces met
ps aux | grep riddler. -
Bevestig hetzelfde PID met
pgrep -f riddler. -
Stuur een SIGTERM:
kill <pid>. Dat is het vriendelijke verzoek om te stoppen, en meteen het standaardsignaal vankill. -
Controleer met
pgrep -f riddlerdat het proces echt weg is. -
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.
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?
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
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.
- Ververs de pakketlijsten:
sudo apt update. - Installeer de beschikbare updates:
sudo apt upgrade. Bevestig mety. Dit kan enkele minuten duren. - Zoek in de pakketlijst naar
htop:apt search htop. - Vraag meer informatie op over dat pakket:
apt show htop. Zoek in de uitvoer de regelDepends. - Installeer
htop. - Start het op. Wat zie je extra vergeleken met
top? Verlaat het metq. - Verwijder
htopweer metsudo apt remove htop. - Ruim de afhankelijkheden op die nu nergens meer voor nodig zijn:
sudo apt autoremove.
Liever eerst oefenen in de oefenterminal?
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.
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.
- Installeer eerst de webserver:
sudo apt install nginx.
| Met systemd | Zonder systemd |
|---|---|
2. systemctl status nginx | 2. service nginx status |
3. sudo systemctl start nginx | 3. sudo service nginx start |
4. systemctl status nginx: staat er nu active (running)? | 4. service nginx status |
5. curl localhost | 5. curl localhost |
6. sudo systemctl stop nginx | 6. sudo service nginx stop |
7. systemctl status nginx en curl localhost | 7. service nginx status en curl localhost |
8. sudo systemctl enable nginx | 8. niet beschikbaar, zie hieronder |
9. systemctl list-unit-files --state=enabled | 9. niet beschikbaar, zie hieronder |
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
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.
ls, pwd of cat mag altijd.