Secure Shell

Netwerk

Start dit hoofdstuk met een nieuwe reservekopie van de Basisimage.

Online gaan met de Raspberry Pi is een kwestie van simpelweg een ethernet-kabel in de poort van de Pi pluggen en het andere uiteinde verbinden met net zo'n poort op je router. Zet je Pi aan, klik op het wereldbolicoontje van de Web Browser en je ziet het internet verschijnen. In de ethernetpoort zitten twee lampjes. De rechter is groen en brandt zodra een full-duplex LAN-verbinding gedetecteerd is. De Pi is dan in staat gelijktijdig gegevens te versturen en te ontvangen. Als dat lampje knippert, wordt er data uitgewisseld. Het linker lampje is geel en brandt alleen als er een 100 Mbit LAN-verbinding gedetecteerd is.

De wifi-optie

Start de Pi op. Klik op het netwerkpictogram in het systeemvak. Klik op het netwerk waarmee je verbinding wilt maken. Bijna alle thuisnetwerken gebruiken een netwerksleutel die op de router zelf opgeslagen is. Typ het wachtwoord in het Pre Shared Key tekstvak en klik op . De bijbehorende verbinding wordt tot stand gebracht en uiteindelijk verschijnt er een nieuw IP-adres voor de wifi-verbinding. De IP-adressen kan je weergeven door het netwerkpictogram in het systeemvak met de muis aan te wijzen.

Verbinding controleren

Je kunt eenvoudig nagaan of de Pi een valide netwerkverbinding heeft. Start de LXTerminal met een klik op zijn pictogram in de balk bovenaan het scherm.
LXTerminal
Typ de volgende opdracht en druk Return om het uit te voeren:

pi@raspberrypi:~ $ ip a
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0:  mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether dc:a6:32:3c:5f:fa brd ff:ff:ff:ff:ff:ff
3: wlan0:  mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether dc:a6:32:3c:5f:fb brd ff:ff:ff:ff:ff:ff
    inet 192.168.129.37/23 brd 192.168.129.255 scope global dynamic noprefixroute wlan0
       valid_lft 6077sec preferred_lft 5177sec
    inet6 2a02:a03f:e02a:8901:f150:233e:c9e9:f903/64 scope global dynamic mngtmpaddr noprefixroute 
       valid_lft 86363sec preferred_lft 71963sec
    inet6 fe80::3cf4:734e:ed10:ecf7/64 scope link 
       valid_lft forever preferred_lft forever

Je krijgt dan een lijst met getallen te zien waarvan de onderste regel begint met inet, gevolgd door het IP-adres van de verbinding. Gewoonlijk is dat iets als 192.168.1.2, wat aangeeft dat de netwerk-verbinding werkt. Zie je zo'n adres niet verschijnen, dan kan er iets mis zijn aan de routerkant. Op de router moet een DHCP-server draaien en zodra de Pi wordt aangesloten, krijgt hij een IP-adres. Draait die server niet, dan krijgt geen enkel aangesloten apparaat toegang tot het netwerk. Ga vanaf een ander apparaat naar de webinterface van de router en log in op 192.168.1.1 of wat het IP-adres van uw router ook mag zijn, om te kijken of de DHCP-server ingeschakeld is. Ten slotte voer je de volgende opdracht in de terminal uit:

pi@raspberrypi:~ $ ping google.com
PING google.com(ams16s30-in-x0e.1e100.net (2a00:1450:400e:805::200e)) 56 data bytes
64 bytes from ams16s37-in-x0e.1e100.net (2a00:1450:400e:805::200e): icmp_seq=1 ttl=113 time=16.6 ms
64 bytes from ams16s37-in-x0e.1e100.net (2a00:1450:400e:805::200e): icmp_seq=2 ttl=113 time=16.6 ms
64 bytes from ams16s37-in-x0e.1e100.net (2a00:1450:400e:805::200e): icmp_seq=3 ttl=113 time=16.6 ms
64 bytes from ams16s37-in-x0e.1e100.net (2a00:1450:400e:805::200e): icmp_seq=4 ttl=113 time=16.0 ms
64 bytes from ams16s37-in-x0e.1e100.net (2a00:1450:400e:805::200e): icmp_seq=5 ttl=113 time=16.4 ms
64 bytes from ams16s37-in-x0e.1e100.net (2a00:1450:400e:805::200e): icmp_seq=6 ttl=113 time=16.6 ms
^C
--- google.com ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 5008ms
rtt min/avg/max/mdev = 15.979/16.444/16.581/0.216 ms

Wacht een paar seconden en druk dan op Ctrl+c om te stoppen. Je ziet dan dat er een aantal pakketten zijn verzonden en ontvangen.

Toegang met SSH

Op afstand bij de volledige grafische X-omgeving inloggen is cool, maar heeft ook zijn nadelen. Het werkt bijvoorbeeld niet bijzonder snel en ook niet zo makkelijk. Het voelt allemaal een beetje stroperig aan. Bovendien is die manier van werken niet zo veilig als je zou willen.

Als je op een makkelijke en veilige manier vanaf een andere computer toegang wilt tot je Raspberry Pi, zul je er achter komen dat je daar het best SSH voor kunt gebruiken.

SSH staat voor Secure Shell. Het is een cryptografisch netwerkprotocol dat ontworpen is voor veilige datacommunicatie via de opdrachtregel. Beginners zullen wellicht tegenwerpen dat het veel gemakkelijker is om de Raspberry Pi met de grafische omgeving op afstand te beheren, maar als je met een aantal basistechnieken van de opdrachtregel (commandline of CLI) overweg kunt, zul je merken dat je een aantal taken veel gemakkelijker via SSH op afstand kunt uitvoeren.

Het is prettig om te weten dat SSH standaard al goed geconfigureerd is - je hoeft er niet veel aan te doen om het werkend te krijgen.

SSH activeren

SSH is in Raspberry Pi OS standaard uit geschakeld, je kunt SSH als volgt activeren:

Inloggen

Windows gebruikers kunnen met het programma Windows Terminal gebruiken. Dit is de opvolger van de Opdrachtprompt en standaard in Windows 11 geïnstalleerd. Windows gebruikers die Windows Terminal nog niet op hun systeem hebben staan, bijvoorbeeld Windows 10 gebruikers, kunnen deze via de Windows Store installeren.

Onder Linux en macOS heb je geen extra software nodig. Open een terminalvenster en voer de volgende opdracht uit:

dany@main:~> ssh pi@raspberrypi.local
The authenticity of host 'raspberrypi.local (2a02:a03f:e02a:8901:f150:233e:c9e9:f903)' can't be established.
ECDSA key fingerprint is SHA256:DkAT4WiaYXftvoY31HH9J8PCJyfK1GnYa//vnOYh5WY.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'raspberrypi.local,2a02:a03f:e02a:8901:f150:233e:c9e9:f903' (ECDSA) to the list of known hosts.
pi@raspberrypi.local's password: 
Linux raspberrypi 6.1.21-v8+ #1642 SMP PREEMPT Mon Apr  3 17:24:16 BST 2023 aarch64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Mon Aug 14 16:33:42 2023 from 2a02:a03f:e02a:8901:b95a:c9d7:2646:1281

Je kunt de hostname (raspberrypi.local) ook vervangen door het IP adres van de Raspberry Pi. Het gebruik van IP adressen heeft een paar nadelen:

Een hostname bestaat standaard uit twee delen: de computernaam en de netwerknaam (domain), gescheiden door een punt. In raspberrypi.local is de computernaam raspberrypi en de netwerknaam local. De computernaam wordt op de Raspberry Pi ingesteld en kan je vrij kiezen, zolang je maar geen twee dezelfde computernamen in hetzelfde netwerk gebruikt. Meestal bepaalt jouw router (netwerkcentrale) de lokale netwerknaam (domain, zie Wikipedia). Indien de hostname raspberrypi.local niet werkt, probeer je de punt en netwerknaam (domain) weg te laten. M.a.w. als je raspberrypi gebruikt, gaan de meeste routers ervan uit dat je binnen hetzelfde netwerk naar je Raspberry Pi zoekt. Mocht dit ook niet werken probeer dan de volgende domeinen: .home en .lan (meer info op Wikipedia).

Indien SSH merkt dat er iets is veranderd, bijvoorbeeld door een herinstallatie, krijg je de volgende waarschuwing:

dany@main:~> ssh pi@raspberrypi.local
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:47nSSUl8DAdxVx1ww3D7iGNpHpiIPEBaeOQuQmmUxfY.
Please contact your system administrator.
Add correct host key in /home/dany/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /home/dany/.ssh/known_hosts:66
You can use following command to remove the offending key:
ssh-keygen -R raspberrypi.local -f /home/dany/.ssh/known_hosts
ECDSA host key for raspberrypi.local has changed and you have requested strict checking.
Host key verification failed.

En wordt de verbinding automatisch afgebroken. Om de Raspberry Pi terug vrij te geven voor een opnieuw op te bouwen SSH-verbinding, voer je de volgende opdracht uit:

dany@main:~> ssh-keygen -R raspberrypi.local
# Host raspberrypi.local found: line 66
/home/dany/.ssh/known_hosts updated.
Original contents retained as /home/dany/.ssh/known_hosts.old

Daarna kan je terug een SSH-verbinding met je Pi opbouwen.

Uitloggen

Een SSH-verbinding verbreek je door de shell te verlaten. Daarvoor voer je de volgende opdracht uit:

pi@raspberrypi:~ $ exit
uitgelogd
Connection to raspberrypi.local closed.

De exit opdracht logt de pi gebruiker eerst uit en daarna wordt de SSH-verbinding met de Raspberry Pi automatisch verbroken.

Bestanden uitwisselen met SSH

Onder Linux kan je bestanden via een SSH-verbinding uitwisselen met de standaard bestandsbeheerder via het sftp:// protocol. Onder Windows en macOS installeer de daarvoor FileZilla. Windows gebruikers moeten even opletten. Gebruik enkel de hier opgegeven FileZilla download webpagina. FileZilla installatieprogramma's van andere webpagina's bevatten vervelende reclamesoftware. Je kunt het installatieprogramma met reclamesoftware herkennen aan de naam: FileZilla_3.65.0_win64_sponsored2-setup.exe (aan het woord sponsored). Een alternatief voor Windows gebruikers is WinSCP.

Installeer en start FileZilla.

Om bestanden via een SSH-verbinding met je Raspberry Pi uit te wisselen, typ je in het tekstvak Host het de hostname (of het IP-adres) van de Pi. Als Gebruikersnaam gebruik je pi en als Wachtwoord het bij de gebruiker pi horende wachtwoord. Vergeet niet als Poort 22 (poort voor beveiligde SSH bestandsuitwisseling of kortweg SFTP) in te vullen. Standaard gebruikt FileZilla namelijk 21 (poort voor onbeveiligde FTP bestandsuitwisseling). Je kunt het tekstvak Poort leeg laten als je in het tekstvak Host het protocol sftp:// voor de hostname of het IP-adres plaatst (vb: sftp://raspberrypi.local).

FileZilla Client kan wachtwoorden onthouden. FileZilla zelf raadt aan om wachtwoorden niet op de computer op te slaan, wat zelfs voor versleutelde wachtwoorden een goede raad is.

FileZilla

In het bovenste deelvenster verschijnen meldingen i.v.m. de SSH-verbinding. In het linker deelvenster heb je toegang tot de mappen en bestanden op uw computer, in het rechter deelvenster heb je toegang tot de bestanden van je Pi. Standaard kom je steeds terecht in de gebruikersmap van zowel de Windows gebruiker op uw Windows computer als op je Pi. Van daaruit kun je naar elke voor deze gebruiker toegankelijke map bladeren. Bestanden en mappen kan je Uploaden van jouw computer naar de Pi of Downloaden van de Pi naar jouw computer.

Client/server

Om met SSH te kunnen werken heb je twee toepassingen nodig op twee verschillende apparaten. Op het ene toestel heb je een SSH client, op het andere een SSH server nodig. Op welk toestel de client en server staat, maakt niet uit. SSH is een standaard methode om apparaten veilig met elkaar te laten communiceren, vandaar dat alle besturingssystemen het ondersteunen. Elk Linux systeem (dus ook Raspberry Pi OS) heeft standaard zowel de client als de server aan boord. Bij macOS zijn de SSH client en server standaard aanwezig, maar is de SSH server standaard uitgeschakeld. Bij Windows is de SSH client standaard aanwezig, maar de SSH server niet.

Daar SSH via het netwerk werkt, moeten mensen met een firewall deze zo instellen dat inkomend SSH netwerkverkeer is toegelaten (poort 22).

Mensen die met verschillende systemen werken, kunnen dus met SSH een communicatie tussen de verschillende apparaten opbouwen om opdrachten en bestanden uit te wisselen. Handiger dan op alle systemen software te installeren om verschillende systeemgebonden protocollen te ondersteunen.

SSH server installeren en activeren in Windows 11

Bekijk ook de officiële richtlijnen van Microsoft.

Microsoft Windows kan gebruik maken van online accounts als gebruiker. Dit betekent dat je ook via SSH moet inloggen met het Microsoft account met bijpassende wachtwoord, een voorbeeld:

dany@main:~> ssh dany.pinoy@hotmail.com@VMWare.local
The authenticity of host 'vmware.local (192.168.129.34)' can't be established.
ECDSA key fingerprint is SHA256:7rwwzNRPPxD1zV3ts669xI66CR71tHxl+8NMuAh4j50.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'vmware.local,192.168.129.34' (ECDSA) to the list of known hosts.
dany.pinoy@hotmail.com@vmware.local's password:

En je krijgt:

Microsoft Windows [Version 10.0.22621.2134]
(c) Microsoft Corporation. Alle rechten voorbehouden.

danyp@VMWARE C:\Users\danyp>

Let op: aangezien je verbonden bent met een Windows systeem, kan je enkel Windows opdrachten uitvoeren.

OpenSSH server op macOS

MacOS gebruikers kunnen de handleiding Een externe computer toegang bieden tot je Mac volgen om de SSH server te activeren.

Praktijk opdracht
  1. Om bestanden van uw Raspberry Pi naar uw computer te downloaden, start je Filezilla Client.
    1. Maak een verbinding met de Raspberry Pi.
    2. Navigeer op jouw computer (linker deelvenster) naar de map C:\Users\Gebruiker\Pictures\ (pas Gebruiker aan naar de op jouw Windows computer aanwezige gebruikersnaam).
    3. Navigeer op de Pi (rechter deelvenster) naar de map /usr/share/. Tip: Om naar de bovenliggende map te navigeren, open je de map met als naam twee punten (..).
    4. Klik met de rechter muisknop op de map rpd-wallpaper en Download deze map.
    5. Start Windows Verkenner en open in de map Afbeeldingen > rpd-wallpaper alle gedownloade afbeeldingen. De afbeeldingen worden geopend met de Foto's app van Windows. Het downloaden van foto's is handig als je de Raspberry Pi gebruikt als bewakingscamera of een andere toepassing waarbij je foto's neemt.
  2. Alle instellingen van je Raspberry Pi worden in tekstbestanden opgeslagen en niet in een register zoals bij Windows. Daardoor kan je instellingen voor je een gewaagde aanpassing doorvoert op een eenvoudige manier veilig stellen. Dit gaat als volgt:
    1. Navigeer in FileZilla naar de map Documents van de Windows gebruiker.
    2. Klik met de rechter muisknop in de Documents map en voer de opdracht Map aanmaken uit.
    3. Geef de nieuwe map de naam Raspberry Pi.
    4. De meeste instellingen voor de pi gebruiker worden in de map /home/pi/.config opgeslagen.
    5. Download de .config map van de pi gebruiker naar de Documents\Raspberry Pi map.
    6. Download de map /etc met de systeeminstellingen van de Pi naar de Documents\Raspberry Pi map. Daarbij krijg je rode foutmeldingen in het bovenste deelvenster. Dit is normaal, uit veiligheidsoverwegingen heeft de pi gebruiker niet overal toegang tot. M.a.w. de pi gebruiker kan bepaalde mappen en bestanden niet openen (lezen) en dus ook niet kopiëren.
    7. Download het bestand /boot/config.txt met specifieke Raspberry Pi hardware instellingen naar de Documents\Raspberry Pi map.
    8. Open Windows Verkenner en navigeer naar de Documenten\Raspberry Pi map.
    9. Open het bestand config.txt. Je kunt de voor uw Pi hardware gebruikte instellingen in dit tekstbestand bekijken. Pas deze echter nooit aan met Kladblok, maar gebruik steeds editors of configuratieprogramma's op uw Pi. De regels die beginnen met een # zijn commentaarregels of uitgeschakelde instellingen waarvoor dan de standaard instelling gebruikt wordt.
  3. Start Windows Terminal en maak een SSH-verbinding met uw Raspberry Pi.
    1. Het is belangrijk uw Raspberry Pi bij de tijd (up to date) te houden. Door bij te werken krijg je de allernieuwste software en belangrijke beveiligingsaanpassingen. Alleen een gebruiker met super rechten (Super Powers), sudo, kan de Raspberry Pi bijwerken. Alle administratieve taken die het hele systeem kunnen beïnvloeden hebben Super rechten nodig. Om de lijst met beschikbare Raspberry Pi software bij te werken, halen we aangepaste lijsten van het internet. Om tikfouten te vermijden, kan je half getypte opdrachten laten aanvullen met de Tab-toets. De volgende opdracht typ je als volgt : sudTab apt updTab.
      pi@raspberrypi:~ $ sudo apt update 
      Geraakt:1 http://deb.debian.org/debian bullseye InRelease
      Ophalen:2 http://deb.debian.org/debian bullseye-updates InRelease [44,1 kB]                              
      Ophalen:3 http://security.debian.org/debian-security bullseye-security InRelease [48,4 kB]               
      Ophalen:4 http://archive.raspberrypi.org/debian bullseye InRelease [23,6 kB]                             
      Ophalen:5 http://archive.raspberrypi.org/debian bullseye/main armhf Packages [314 kB]
      Ophalen:6 http://archive.raspberrypi.org/debian bullseye/main arm64 Packages [308 kB]
      694 kB opgehaald in 2s (324 kB/s) 
      Pakketlijsten worden ingelezen... Klaar
      Boom van vereisten wordt opgebouwd... Klaar
      De statusinformatie wordt gelezen... Klaar 
      89 pakketten kunnen opgewaardeerd worden. Voer 'apt list --upgradable' uit om ze te zien.

      Tijdens de conversatie tussen jouw Pi en de internet server met beschikbare software zie je heel wat tekst op het scherm voorbijvliegen. Deze actie werkt de software zelf niet bij, daarvoor voer je de volgende opdracht uit die je als volgt probeert te typen:

      pi@raspberrypi:~ $ sudo apt upTabTab
      update   upgrade
      Je merkt na de eerste Tab geen reactie, bij de tweede Tab zie je alle aanvulmogelijkheden, met andere woorden je typt best nog één of meerdere letters tot Tab zelf automatisch verder kan aanvullen:
      pi@raspberrypi:~ $ sudo apt upgrade 
      Pakketlijsten worden ingelezen... Klaar
      Boom van vereisten wordt opgebouwd... Klaar
      De statusinformatie wordt gelezen... Klaar 
      Opwaardering wordt doorgerekend... Klaar
      Het volgende pakket is automatisch geïnstalleerd en is niet langer nodig:
        libfuse2
      Gebruik 'sudo apt autoremove' om het te verwijderen.
      De volgende pakketten zullen opgewaardeerd worden:
        bind9-host bind9-libs chromium-browser chromium-browser-l10n chromium-codecs-ffmpeg-extra cups-browsed cups-filters
        cups-filters-core-drivers ffmpeg firmware-atheros firmware-brcm80211 firmware-libertas firmware-misc-nonfree firmware-realtek
        ghostscript gstreamer1.0-alsa gstreamer1.0-plugins-bad gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-x
        libavcodec58 libavdevice58 libavfilter7 libavformat58 libavresample4 libavutil56 libcamera-apps libcamera-tools libcamera0
        libcupsfilters1 libfontembed1 libgs9 libgs9-common libgstreamer-gl1.0-0 libgstreamer-plugins-bad1.0-0
        libgstreamer-plugins-base1.0-0 libjavascriptcoregtk-4.0-18 libpam-systemd libpostproc55 libssh-gcrypt-4 libssl1.1 libswresample3
        libswscale5 libsynctex2 libsystemd0 libudev1 libvlc-bin libvlc5 libvlccore9 libwebkit2gtk-4.0-37 libwebp6 libwebpdemux2 libwebpmux3
        libx11-6 libx11-data libx11-xcb1 lxplug-bluetooth lxplug-cputemp lxplug-menu lxplug-network lxplug-ptbatt lxplug-updater openssl
        python3-flask python3-libcamera python3-picamera2 python3-werkzeug raspberrypi-sys-mods realvnc-vnc-server rp-prefapps rpi-eeprom
        rpi-imager systemd systemd-sysv systemd-timesyncd udev vlc vlc-bin vlc-data vlc-l10n vlc-plugin-access-extra vlc-plugin-base
        vlc-plugin-notify vlc-plugin-qt vlc-plugin-samba vlc-plugin-skins2 vlc-plugin-video-output vlc-plugin-video-splitter
        vlc-plugin-visualization
      89 opgewaardeerd, 0 nieuw geïnstalleerd, 0 te verwijderen en 0 niet opgewaardeerd.
      Er moeten 257 MB aan archieven opgehaald worden.
      Na deze bewerking zal er 14,6 MB extra schijfruimte gebruikt worden.
      Wilt u doorgaan? [J/n] 

      Na een paar ogenblikken wordt op het scherm weergegeven voor welke software er een update beschikbaar is. Het bijwerken moet je nu bevestigen met j gevolgd door Return. Hoelang het bijwerken duurt, hangt af van jouw internetsnelheid, het aantal bij te werken pakketten en de snelheid van jouw Pi.

      Wilt u doorgaan? [J/n] j
      Ophalen:1 http://deb.debian.org/debian bullseye-updates/main arm64 libsystemd0 arm64 247.3-7+deb11u4 [355 kB]
      ...
      Ophalen:89 http://archive.raspberrypi.org/debian bullseye/main arm64 vlc-plugin-visualization arm64 1:3.0.18-0+rpt5+deb11u1 [148 kB]  
      257 MB opgehaald in 45s (5.686 kB/s)                                                                                                  
      De changelogs worden ingelezen... Klaar
      Extraheren van sjablonen uit pakketten: 100%
      Voorconfigureren van pakketten ...
      (Database wordt ingelezen ... 96877 bestanden en mappen momenteel geïnstalleerd.)
      Uitpakken van .../libsystemd0_247.3-7+deb11u4_arm64.deb wordt voorbereid...
      Bezig met uitpakken van libsystemd0:arm64 (247.3-7+deb11u4) over (247.3-7+deb11u2) ...
      Instellen van libsystemd0:arm64 (247.3-7+deb11u4) ...
      ...
      Uitpakken van .../72-vlc-plugin-visualization_1%3a3.0.18-0+rpt5+deb11u1_arm64.deb wordt voorbereid...
      Bezig met uitpakken van vlc-plugin-visualization:arm64 (1:3.0.18-0+rpt5+deb11u1) over (3.0.18-0+rpt3+deb11u1) ...
      Instellen van libssh-gcrypt-4:arm64 (0.9.7-0+deb11u1) ...
      ...
      Instellen van realvnc-vnc-server (7.5.1.50075) ...
      Updating /etc/pam.d/vncserver
      Updating /etc/pam.conf... done
      Looking for font path... not found.
      Original config file "/etc/vnc/pulse/daemon.conf.old" preserved
      Installed systemd unit for VNC Server in Service Mode daemon
      Start or stop the service with:
        systemctl (start|stop) vncserver-x11-serviced.service
      Mark or unmark the service to be started at boot time with:
        systemctl (enable|disable) vncserver-x11-serviced.service
      
      Installed systemd unit for VNC Server in Virtual Mode daemon
      Start or stop the service with:
        systemctl (start|stop) vncserver-virtuald.service
      Mark or unmark the service to be started at boot time with:
        systemctl (enable|disable) vncserver-virtuald.service
      
      Instellen van libcamera0:arm64 (0~git20230720+bde9b04f-1) ...
      ...
      Instellen van libcamera-apps (1.2.1-1) ...
      Bezig met afhandelen van triggers voor hicolor-icon-theme (0.17-2) ...
      Bezig met afhandelen van triggers voor cups (2.3.3op2-3+deb11u2) ...
      Updating PPD files for cups-filters ...
      Updating PPD files for escpr ...
      Updating PPD files for hpcups ...
      Updating PPD files for postscript-hp ...
      Bezig met afhandelen van triggers voor gnome-menus (3.36.0-1) ...
      Bezig met afhandelen van triggers voor libc-bin (2.31-13+rpt2+rpi1+deb11u5) ...
      Bezig met afhandelen van triggers voor man-db (2.9.4-2) ...
      Bezig met afhandelen van triggers voor dbus (1.12.24-0+deb11u1) ...
      Bezig met afhandelen van triggers voor mailcap (3.69) ...
      Bezig met afhandelen van triggers voor desktop-file-utils (0.26-1) ...
      Bezig met afhandelen van triggers voor initramfs-tools (0.140) ...
      Bezig met afhandelen van triggers voor libvlc-bin:arm64 (1:3.0.18-0+rpt5+deb11u1) ...
    2. Deze twee opdrachten kan je aan elkaar knopen. Als de eerste opdracht, apt update, succesvol is uitgevoerd, wordt de tweede opdracht, apt upgrade, gestart. We voegen de -y optie toe om de opdracht automatisch zonder menselijke tussenkomst helemaal af te werken:

      pi@raspberrypi:~ $ sudo apt update && sudo apt upgrade -y
      Geraakt:1 http://deb.debian.org/debian bullseye InRelease
      Geraakt:2 http://security.debian.org/debian-security bullseye-security InRelease
      Geraakt:3 http://deb.debian.org/debian bullseye-updates InRelease
      Geraakt:4 http://archive.raspberrypi.org/debian bullseye InRelease               
      Pakketlijsten worden ingelezen... Klaar                                          
      Boom van vereisten wordt opgebouwd... Klaar
      De statusinformatie wordt gelezen... Klaar 
      Alle pakketten zijn up-to-date.
      Pakketlijsten worden ingelezen... Klaar
      Boom van vereisten wordt opgebouwd... Klaar
      De statusinformatie wordt gelezen... Klaar 
      Opwaardering wordt doorgerekend... Klaar
      Het volgende pakket is automatisch geïnstalleerd en is niet langer nodig:
        libfuse2
      Gebruik 'sudo apt autoremove' om het te verwijderen.
      0 opgewaardeerd, 0 nieuw geïnstalleerd, 0 te verwijderen en 0 niet opgewaardeerd.

      Het is belangrijk je Pi regelmatig bij te werken, ten minste één keer per maand.

    3. Bij een upgrade worden geen pakketten (software) verwijderd of toegevoegd, enkel geïnstalleerde pakketten worden bijgewerkt naar recentere versies. Dit heeft als voordeel dat jouw project nooit in moeilijkheden komt door software die opeens van het systeem verdwijnt of anders werkt. Het nadeel is echter dat je de ontwikkeling van de software niet helemaal volgt, je krijgt namelijk veel minder nieuwe functies. Om het systeem vollediger bij te werken, gebruik je een full-upgrade. Let wel dit houdt risico's in, want er worden voor het systeem overbodige pakketten verwijderd en nieuwe software aan het systeem toegevoegd.
      pi@raspberrypi:~ $ sudo apt full-upgrade
      Pakketlijsten worden ingelezen... Klaar
      Boom van vereisten wordt opgebouwd... Klaar
      De statusinformatie wordt gelezen... Klaar 
      Opwaardering wordt doorgerekend... Klaar
      Het volgende pakket is automatisch geïnstalleerd en is niet langer nodig:
        libfuse2
      Gebruik 'sudo apt autoremove' om het te verwijderen.
      0 opgewaardeerd, 0 nieuw geïnstalleerd, 0 te verwijderen en 0 niet opgewaardeerd.
    4. Om het pakket piclone (het programmma SD Card Copier) te verwijderen, voer je de volgende opdracht uit:
      pi@raspberrypi:~ $ sudo apt remove piclone
      Pakketlijsten worden ingelezen... Klaar
      Boom van vereisten wordt opgebouwd... Klaar
      De statusinformatie wordt gelezen... Klaar 
      De volgende pakketten zijn automatisch geïnstalleerd en zijn niet langer nodig:
        libfuse2 libossp-uuid16 uuid
      Gebruik 'sudo apt autoremove' om ze te verwijderen.
      De volgende pakketten zullen VERWIJDERD worden:
        piclone
      0 opgewaardeerd, 0 nieuw geïnstalleerd, 1 te verwijderen en 0 niet opgewaardeerd.
      Na deze bewerking zal er 124 kB schijfruimte vrijkomen.
      Wilt u doorgaan? [J/n] j
      (Database wordt ingelezen ... 96937 bestanden en mappen momenteel geïnstalleerd.)
      piclone (0.26) wordt verwijderd ...
      Bezig met afhandelen van triggers voor gnome-menus (3.36.0-1) ...
      Bezig met afhandelen van triggers voor mailcap (3.69) ...
      Bezig met afhandelen van triggers voor desktop-file-utils (0.26-1) ...
      Deze opdracht beperkt zich tot het verwijderen van het opgegeven pakket. Wil je de configuratiebestanden van het opgegeven pakket eveneens verwijderen, vervang in de opdracht dan remove door purge. Bij het verwijderen van pakketten blijven afhankelijke pakketten op het systeem achter. Afhankelijke pakketten zijn noodzakelijk om bepaalde software te draaien en worden indien nodig automatisch geïnstalleerd. Om na het verwijderen van een pakket, de niet meer noodzakelijke afhankelijke pakketten ook te verwijderen, gebruik je de volgende opdracht:
      pi@raspberrypi:~ $ sudo apt autoremove
      Pakketlijsten worden ingelezen... Klaar
      Boom van vereisten wordt opgebouwd... Klaar
      De statusinformatie wordt gelezen... Klaar 
      De volgende pakketten zullen VERWIJDERD worden:
        libfuse2 libossp-uuid16 uuid
      0 opgewaardeerd, 0 nieuw geïnstalleerd, 3 te verwijderen en 0 niet opgewaardeerd.
      Na deze bewerking zal er 545 kB schijfruimte vrijkomen.
      Wilt u doorgaan? [J/n] j
      (Database wordt ingelezen ... 96921 bestanden en mappen momenteel geïnstalleerd.)
      libfuse2:arm64 (2.9.9-5) wordt verwijderd ...
      uuid (1.6.2-1.5+b9) wordt verwijderd ...
      libossp-uuid16:arm64 (1.6.2-1.5+b9) wordt verwijderd ...
      Bezig met afhandelen van triggers voor man-db (2.9.4-2) ...
      Bezig met afhandelen van triggers voor libc-bin (2.31-13+rpt2+rpi1+deb11u5) ...
  4. Enkele basisopdrachten:
    1. Om te weten in welke map we werken, bestaat de opdracht pwd (Print Working Directory):
      pi@raspberrypi:~ $ pwd
      /home/pi
      Je ziet het volledige pad van uw gebruikersmap (home directory).
    2. Om de inhoud van een map weer te geven, gebruik je de opdracht:
      pi@raspberrypi:~ $ ls
      Bookshelf  Desktop  Documents  Downloads  Music  Pictures  Public  Templates  Videos
      Mappen herken je aan de blauwe tekstkleur.
    3. Om de map Desktop te openen, gebruik je de opdracht:
      pi@raspberrypi:~ $ cd Desktop/
      pi@raspberrypi:~/Desktop $ ls
      Deze map is leeg.
    4. We kunnen terug naar de bovenliggende map met de opdracht:
      pi@raspberrypi:~/Desktop $ cd ..
      pi@raspberrypi:~ $ pwd
      /home/pi
      
    5. Om een map buiten onze gebruikersmap te openen, gebruiken we het volledige pad vanaf de basismap / (root):
      pi@raspberrypi:~ $ cd /dev/
      pi@raspberrypi:/dev $ pwd
      /dev
      pi@raspberrypi:/dev $ ls
      autofs           fuse       loop4         null   ram5     tty10  tty25  tty4   tty54      uhid     vcsa1     vga_arbiter  video23
      block            gpiochip0  loop5         port   ram6     tty11  tty26  tty40  tty55      uinput   vcsa2     vhci         video31
      btrfs-control    gpiochip1  loop6         ppp    ram7     tty12  tty27  tty41  tty56      urandom  vcsa3     vhost-net    watchdog
      bus              gpiomem    loop7         ptmx   ram8     tty13  tty28  tty42  tty57      v4l      vcsa4     vhost-vsock  watchdog0
      cachefiles       hwrng      loop-control  pts    ram9     tty14  tty29  tty43  tty58      vchiq    vcsa5     video10      zero
      cec0             i2c-20     mapper        ram0   random   tty15  tty3   tty44  tty59      vcio     vcsa6     video11
      cec1             i2c-21     media0        ram1   rfkill   tty16  tty30  tty45  tty6       vc-mem   vcsa7     video12
      char             initctl    media1        ram10  serial1  tty17  tty31  tty46  tty60      vcs      vcsm-cma  video13
      console          input      media2        ram11  shm      tty18  tty32  tty47  tty61      vcs1     vcsu      video14
      cpu_dma_latency  kmsg       media3        ram12  snd      tty19  tty33  tty48  tty62      vcs2     vcsu1     video15
      cuse             kvm        mem           ram13  stderr   tty2   tty34  tty49  tty63      vcs3     vcsu2     video16
      disk             log        mmcblk0       ram14  stdin    tty20  tty35  tty5   tty7       vcs4     vcsu3     video18
      dma_heap         loop0      mmcblk0p1     ram15  stdout   tty21  tty36  tty50  tty8       vcs5     vcsu4     video19
      dri              loop1      mmcblk0p2     ram2   tty      tty22  tty37  tty51  tty9       vcs6     vcsu5     video20
      fd               loop2      mqueue        ram3   tty0     tty23  tty38  tty52  ttyAMA0    vcs7     vcsu6     video21
      full             loop3      net           ram4   tty1     tty24  tty39  tty53  ttyprintk  vcsa     vcsu7     video22

      Deze map bevat bestanden die op onze Pi aanwezige onderdelen voorstellen (zowel fysieke als virtuele).
    6. Om snel terug naar de gebruikersmap te gaan, gebruik je de opdracht:
      pi@raspberrypi:/dev $ cd
    7. Nu we terug in onze gebruikersmap zijn, maken we een simpel tekstbestand met de opdracht:
      pi@raspberrypi:~ $ nano -B leesme.txt
    8. Nano is een zeer eenvoudige teksteditor. Je gebruikt Nano om teksten aan te maken en aan te passen, om te programmeren en configuratiebestanden aan te passen. Bij het aanpassen van teksten gebruik je best de -B optie, die maakt voor het opslaan van de aanpassingen steeds een back-up van de originele tekst. Handig bij het aanpassen van configuratiebestanden. Wij typen een eenvoudige tekst:
        GNU nano 5.4                       leesme.txt *                               
      Dit moet je lezen.
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      ^G Hulp      ^O Opslaan   ^W Zoeken    ^K Knippen   ^T Opdracht  ^C Positie
      ^X Afsluiten ^R Inlezen   ^\ Vervangen ^U Plakken   ^J Uitvullen ^_ Naar regel
      
      Onderaan het scherm staat een menubalk. Eerst moet je de tekst Opslaan met de sneltoets Ctrl+ o waarmee je een dialoogregel opent. In deze dialoogregel kan je de naam van het tekst bestand nog aanpassen. Druk Return om de tekst op te slaan. Er verschijnt een berichtregel met het aantal opgeslagen regels. Nano kan je Afsluiten met de sneltoets Ctrl+x.
    9. Om de inhoud van een tekstbestand zoals leesme.txt weer te geven, gebruik je de volgende opdracht:
      pi@raspberrypi:~ $ less leesme.txt
      Om less te verlaten druk je q. Bij langere bestanden worden de inhoud scherm per scherm weergegeven. Om de door Raspbian ondersteunde bestandsformaten weer te geven, gebruik je de volgende opdracht:
      pi@raspberrypi:~ $ less /etc/mime.types
      ###############################################################################
      #
      #  Media (MIME) types and the extensions that represent them.
      #
      #  The format of this file is a media type on the left and zero or more
      #  filename extensions on the right.  Programs using this file will map
      #  files ending with those extensions to the associated type.
      #
      #  This file is part of the "media-types" package.  Please report a bug using
      #  the "reportbug" command of the "reportbug" package if you would like new
      #  types or extensions to be added.
      #
      #  The reason that all types are managed by the media-types package instead
      #  allowing individual packages to install types in much the same way as they
      #  add entries in to the mailcap file is so these types can be referenced by
      #  other programs (such as a web server) even if the specific support package
      #  for that type is not installed.
      #
      #  Users can add their own types if they wish by creating a ".mime.types"
      #  file in their home directory.  Definitions included there will take
      #  precedence over those listed here.
      #
      ###############################################################################
      /etc/mime.types
      
      Met de toetsen Pg Up en Pg Dn kan je per scherm bladeren, per regel blader je met de pijltoetsen op en neer.
    10. Met de volgende opdracht maak je de map spullen:
      pi@raspberrypi:~ $ mkdir spullen
      Controleer of de map is aangemaakt met de ls opdracht. Open met de cd opdracht de pas aangemaakte map. Keer daarna terug naar de gebruikersmap.
  5. Kopieer en verplaats opdrachten:
    1. Nu we een map hebben aangemaakt, kunnen we er bestanden naar kopiëren. Je kopieert (copy) de tekst leesme.txt naar de map spullen met de opdracht:
      pi@raspberrypi:~ $ cp leesme.txt spullen/
      Bekijk de inhoud van de spullen map om te controleren of onze kopieeropdracht is gelukt. Keer daarna terug naar de gebruikersmap.
    2. Het lege bestand leeg.txt maak je aan met de opdracht:
      pi@raspberrypi:~ $ touch leeg.txt
    3. Eigenlijk hoort dit bestand thuis in de map spullen. Verplaats (move) het bestand leeg.txt naar de map spullen met de opdracht:
      pi@raspberrypi:~ $ mv leeg.txt spullen/
      Open de map spullen en controleer of het bestand leeg.txt daar aanwezig is.
    4. Om de naam van een bestand te wijzigen, gebruik je de mv opdracht als volgt:
      pi@raspberrypi:~/spullen $ mv leeg.txt ledig.txt
      Controleer of de map nog steeds twee bestanden bevat, waarvan één met de naam ledig.txt.
  6. Tijd om wat op te ruimen, maar wees voorzichtig. Na het verwijderen van mappen en/of bestanden kan je deze niet terug herstellen, een prullenbak of ongedaan maken bestaat niet. Verwijderen is dus steeds definitief.
    1. Om het bestand ledig.txt definitief te verwijderen, gebruik je de opdracht:
      pi@raspberrypi:~/spullen $ rm ledig.txt
      Controleer of het bestand wel degelijk is verdwenen.
    2. Keer terug naar de gebruikersmap. Om de map spullen te verwijderen, gebruik je de volgende opdracht:
      pi@raspberrypi:~ $ rmdir spullen
      rmdir: kan 'spullen' niet verwijderen: Map is niet leeg
      Om de map eerst leeg te maken, voor je deze verwijderd, gebruik je de rm opdracht met extra opties. Met de optie r (recursief) open je de map en al zijn submappen om deze eerst leeg te maken. Met de optie f (forced) automatiseer je het verwijderen, m.a.w. val ons niet lastig met eventuele obstakels, verwijder gewoon alles. De opdracht wordt dan:
      pi@raspberrypi:~ $ rm -rf spullen/
      Controleer of de map spullen nu verdwenen is.
  7. Standaard heeft Raspbian maar één gebruiker (pi). We kunnen onze Raspberry Pi delen met anderen, maar mogen die aan ons werk kunnen? Als dit niet het geval is, maak je extra gebruikers aan.
    1. De nieuwe gebruiker hacker maak je aan met de opdracht:
      pi@raspberrypi:~ $ sudo adduser hacker
      Toevoegen van gebruiker `hacker'...
      Toevoegen nieuwe groep `hacker' (1001).
      Toevoegen nieuwe gebruiker `hacker' (1001) met groep `hacker'.
      Aanmaken gebruikersmap `/home/hacker'...
      Kopiëren bestanden van `/etc/skel' ...
      Nieuw wachtwoord: 
      Nieuw wachtwoord herhalen: 
      passwd: wachtwoord is met succes aangepast
      De gebruikersinformatie over hacker wordt veranderd
      Voer de nieuwe waarde in of druk op Enter voor de standaardwaarde
              Volledige naam []: 
              Kamernummer []: 
              Telefoon werk []: 
              Telefoon thuis []: 
              Varia []: 
      Is deze informatie correct? [Y/n]
      Je gebruikt sudo omdat het aanmaken van een gebruiker een systeemopdracht is. Bij het aanmaken moet je voor de aan te maken gebruiker een wachtwoord blind ingeven (tweemaal om eventuele tikfouten uit te sluiten). Daarna wordt gebruikersinformatie gevraagd, dit is optioneel en kan je overslaan door Return te drukken. De laatste vraag is of de opgegeven informatie juist is. Door opnieuw Return te drukken, geef je het standaard antwoord (hoofdletter tussen haakjes, hier Y van Yes).
    2. Onze nieuwe hacker gebruiker, heeft geen Super Powers en kan dus geen systeemopdrachten uitvoeren. Om een gebruiker toegang te geven tot systeemopdrachten, moet deze lid worden van de bevoorrechte sudo groep. Om de hacker gebruiker toe te voegen aan de sudo groep gebruik je de opdracht:
      pi@raspberrypi:~ $ sudo adduser hacker sudo
      Toevoegen gebruiker `hacker' aan groep `sudo'...
      Gebruiker hacker wordt toegevoegd aan groep sudo
      Klaar.
    3. We testen onze nieuwe gebruiker door verder te werken als de gebruiker hacker. We switchen naar de gebruiker hacker met de opdracht (switch user):
      pi@raspberrypi:~ $ su hacker
      Wachtwoord: 
      hacker@raspberrypi:/home/pi $
      Na het ingeven van het bij de gebruiker hacker horende wachtwoord, werken we als gebruiker hacker.
    4. We werken echter nog steeds in de gebruikersmap van de pi gebruiker. Ga naar de gebruikersmap van de gebruiker hacker met de opdracht:
      hacker@raspberrypi:/home/pi $ cd
      Zo heeft elke gebruiker zijn eigen gebruikersmap met zijn eigen bestanden en mappenstructuur. Gebruikers met Super Powers kunnen echter alle bestanden op het systeem aanpassen en/of verwijderen, dus ook de bestanden van andere gebruikers en het systeem. Gebruikers die geen lid zijn van de groep sudo, kunnen deze bestanden meestal wel openen maar niet aanpassen of verwijderen, enkel bestanden in hun eigen gebruikersmap kunnen ze zelf beheren.
    5. Je kunt de hacker gebruiker terug afmelden met de volgende opdracht:
      hacker@raspberrypi:~ $ exit
      exit
  8. Opdrachten met tekstbestanden:
    1. We beginnen met het maken van een bestand:
      pi@raspberrypi:~ $ echo "Dit is een bestand." > mijnbestand
      De opdracht `echo` doet wat zijn naam reeds zegt. Probeer maar eens:
      pi@raspberrypi:~ $ echo Hallo
      Hallo
      Met het symbool > (groter-dan-teken) stoppen we de uitkomst van de voorafgaande opdracht in het hiernavolgende bestand; als dit bestand al bestaat, overschrijf het dan.
    2. Nu hebben we een bestand gemaakt en er iets ingestopt, maar dat willen we ook kunnen zien. Hiervoor gebruiken we de opdracht `cat` (concatenate).
      pi@raspberrypi:~ $ cat mijnbestand
      Dit is een bestand.
    3. cat kunnen we gebruiken om de inhoud van een bestand te laten zien of om bestanden aan elkaar te knopen. Dat gaan we meteen proberen en we maken daarom snel een tweede bestand aan:
      pi@raspberrypi:~ $ echo "Dit is het tweede bestand." > tweedebestand
      Nu gaan we onze bestanden aan elkaar knopen:
      pi@raspberrypi:~ $ cat mijnbestand tweedebestand > derdebestand
      en vragen de inhoud van het derde bestand op:
      pi@raspberrypi:~ $ cat derdebestand
      Dit is een bestand.
      Dit is het tweede bestand.
      We zien nu dat we beide bestanden aan elkaar geknoopt (gecat) hebben.
    4. Van een aantal van de hier gebruikte opdrachten kunnen we de werking beïnvloeden door middel van zogenaamde argumenten. Dat zijn toevoegingen aan een opdracht die er een nauwkeuriger richting aan geven. Zo kent cat het argument -n:
      pi@raspberrypi:~ $ cat -n derdebestand
           1  Dit is een bestand.
           2  Dit is het tweede bestand.
      We zien dat cat nu bij het tonen van de inhoud van het bestand de regels voorafgegaan worden door een volgnummer.
    5. Wie wil weten welke argumenten cat allemaal kent en wat hun werking is, vraagt dat eenvoudig aan cat:
      pi@raspberrypi:~ $ cat --help
      Gebruik:  cat [OPTIE...] [BESTAND...]
      
      Stuurt gegeven BESTAND(en achter elkaar) naar standaarduitvoer.
      
      Zonder BESTAND, of wanneer BESTAND '-' is, wordt standaardinvoer gelezen.
      
        -A, --show-all           hetzelfde als '-vET'
        -b, --number-nonblank    niet-blanco uitvoerregels nummeren (negeert '-n')
        -e                       hetzelfde als '-vE'
        -E, --show-ends          een $ weergeven aan het einde van elke regel
        -n, --number             alle uitvoerregels nummeren
        -s, --squeeze-blank      opeenvolgende blanco regels comprimeren tot één
        -t                       hetzelfde als '-vT'
        -T, --show-tabs          tab-tekens weergeven met ^I
        -u                       (genegeerde optie)
        -v, --show-nonprinting   notatie met ^ en M- gebruiken, behalve voor LF/TAB
            --help      deze hulptekst tonen en stoppen
            --version   programmaversie tonen en stoppen
      
      Voorbeelden:
        cat f - g   Toont de inhoud van f, dan standaardinvoer, dan de inhoud van g.
        cat         Kopieert standaardinvoer naar standaarduitvoer.
      
      Online hulp bij GNU coreutils: 
      Meld vertalingsfouten aan .
      Full documentation 
      of lokaal via: info '(coreutils) cat invocation'
    6. Voor onze volgende probeersels hebben we wat grotere bestanden nodig. We gaan een bestand maken met op de eerste regel een aaa, op de tweede regel bbb, op de derde regel ccc enz. tot en met de 26-ste regel waar we zzz inzetten. Dit bestand maken we met cat:
      pi@raspberrypi:~ $ cat > nieuwbestand
      aaa
      bbb
      ccc
      ddd
      eee
      fff
      ggg
      hhh
      iii
      jjj
      kkk
      lll
      mmm
      nnn
      ooo
      ppp
      qqq
      rrr
      sss
      ttt
      uuu
      vvv
      www
      xxx
      yyy
      zzz
      De shell toont ons een lege regel en wacht op onze invoer. We kunnen nu een aantal regels tekst typen en sluiten dit af met een einde-invoer-teken, Ctrl+D.
      Dus na `cat > nieuwbestand` toets je aaa in, gevolgd door een Return, dan bbb gevolgd door een Return, enz. Na de zzz en Return sluiten we af met Ctrl+d.
    7. We hebben nu een bestand met 26 regels. Die kunnen we tellen met behulp van
      pi@raspberrypi:~ $ cat -n nieuwbestand
           1  aaa
           2  bbb
           3  ccc
           4  ddd
           5  eee
           6  fff
           7  ggg
           8  hhh
           9  iii
          10  jjj
          11  kkk
          12  lll
          13  mmm
          14  nnn
          15  ooo
          16  ppp
          17  qqq
          18  rrr
          19  sss
          20  ttt
          21  uuu
          22  vvv
          23  www
          24  xxx
          25  yyy
          26  zzz
      
      Dat toont ons de inhoud van het bestand.
    8. Maar wie alleen geïnteresseerd is in het aantal regels neemt hiervoor de opdracht `wc` (word count):
      pi@raspberrypi:~ $ wc nieuwbestand
       26  26 104 nieuwbestand
      wat betekent dat we 26 regels, 26 woorden en 104 karakters in het bestand nieuwbestand hebben staan. Wie alleen het aantal regels wil weten, kiest voor `wc -l nieuwbestand`.
    9. We gebruiken dit bestand nu om een bestand van 78 regels te maken:
      pi@raspberrypi:~ $ cp nieuwbestand langbestand
      pi@raspberrypi:~ $ cat nieuwbestand >> langbestand
      pi@raspberrypi:~ $ cat nieuwbestand >> langbestand
      Met behulp van het teken >> (twee maal groter-dan-teken) voegen we de uitvoer van de voorafgaande opdracht aan het einde van het navolgende bestand toe.
    10. Wanneer we nu de inhoud van het bestand langbestand opvragen, dan past dat niet meer in ons venster. Dit kunnen we oplossen door de uitvoer van cat te pipen naar de invoer van het programma more:
      pi@raspberrypi:~ $ cat langbestand | more
      aaa
      bbb
      ...
      yyy
      zzz
      Met pipen bedoelen we de uitvoer van het ene programma gebruiken als invoer voor het andere. Met de opdracht more en de spatiebalk kunnen we nu scherm voor scherm de inhoud van dit bestand bekijken.
    11. Willen we alleen het begin of juist alleen het einde van dit bestand zien, dan gebruiken we de opdrachten head en tail:
      pi@raspberrypi:~ $ head langbestand
      aaa
      bbb
      ccc
      ddd
      eee
      fff
      ggg
      hhh
      iii
      jjj
      pi@raspberrypi:~ $ tail langbestand
      qqq
      rrr
      sss
      ttt
      uuu
      vvv
      www
      xxx
      yyy
      zzz
      
    12. Zijn we alleen in de eerste 3 regels geïnteresseerd, dan doen we dat met behulp van:
      pi@raspberrypi:~ $ head -3 langbestand
      aaa
      bbb
      ccc
    13. Slimmeriken hebben in de gaten dat je op de volgende wijze de 12e regel kunt opvragen:
      pi@raspberrypi:~ $ head -12 langbestand | tail -1
      lll
    14. We kunnen ook alle identieke regels bij elkaar zetten, of sorteren, met:
      pi@raspberrypi:~ $ sort langbestand | more
      aaa
      aaa
      aaa
      bbb
      bbb
      bbb
      ...
      yyy
      yyy
      yyy
      zzz
      zzz
      zzz
    15. We zien direct dat een aantal regels meerdere malen voorkomen en vragen ons af hoeveel verschillende unieke regels er zijn. Die unieke regels krijgen we te zien met:
      pi@raspberrypi:~ $ sort langbestand | uniq
      aaa
      bbb
      ccc
      ddd
      eee
      fff
      ggg
      hhh
      iii
      jjj
      kkk
      lll
      mmm
      nnn
      ooo
      ppp
      qqq
      rrr
      sss
      ttt
      uuu
      vvv
      www
      xxx
      yyy
      zzz
    16. Maar we willen natuurlijk niet tellen. Als we de uitkomst als invoer voor `wc -l` gebruiken, dan krijgen we dus het antwoord op onze vraag kant en klaar voorgeschoteld:
      pi@raspberrypi:~ $ sort langbestand | uniq | wc -l
      26
    17. Wanneer we willen weten of de lettercombinatie ccc in ons bestand voorkomt, dan gebruiken we hiervoor grep:
      pi@raspberrypi:~ $ grep ccc langbestand
      ccc
      ccc
      ccc
    18. Weten we niet precies in welk bestand we willen zoeken, dan kiezen we voor een jokerteken:
      pi@raspberrypi:~ $ grep ccc *
      grep: Bookshelf: Is een map
      grep: Desktop: Is een map
      grep: Documents: Is een map
      grep: Downloads: Is een map
      langbestand:ccc
      langbestand:ccc
      langbestand:ccc
      grep: Music: Is een map
      nieuwbestand:ccc
      grep: Pictures: Is een map
      grep: Public: Is een map
      grep: Templates: Is een map
      grep: Videos: Is een map
    19. Willen we alleen maar weten in welke bestand(-en) deze combinatie voorkomt, dan doen we dat door:
      pi@raspberrypi:~ $ grep -l ccc *
      grep: Bookshelf: Is een map
      grep: Desktop: Is een map
      grep: Documents: Is een map
      grep: Downloads: Is een map
      langbestand
      grep: Music: Is een map
      nieuwbestand
      grep: Pictures: Is een map
      grep: Public: Is een map
      grep: Templates: Is een map
      grep: Videos: Is een map
  9. De volgende stap (iets moeilijker):
    1. Met welke opdracht kom je te weten in welke map je werkt? ......
    2. Welke opdracht toont een lijst met de bestanden en mappen in die map? ......
    3. Welk bestand staat op de laatste plaats na het uitvoeren van de opdracht `ls -a` (alle bestanden in een map tonen)? ......
    4. Wat stelt de laatste kolom voor als je de opdracht `ls -al` uitvoert? ......
    5. Toon de inhoud van het bestand '.bashrc' en schrijf de laatste regel over: ......
    6. Maak de map 'opdrachtmap'.
    7. Open de map opdrachtmap/.
    8. Ga terug naar jouw Persoonlijke map.
    9. Verwijder de map opdrachtmap/.
    10. Kopieer het bestand '.bashrc' naar het bestand met als naam 'bashconfiguratie'.
    11. Tel het aantal lijnen, woorden en tekens in het bestand 'bashconfiguratie': ......
    12. Tel enkel het aantal lijnen in het bestand 'bashconfiguratie' met de opdracht ......
    13. Verwijder het bestand 'bashconfiguratie'.
    14. Kopieer het bestand '.bashrc' naar het bestand met de naam 'bashinstellingen'.
    15. Toon de inhoud van het bestand 'bashinstellingen'. Schrijf de eerste regel over: ......
    16. Met de opdracht `ls -l bashinstellingen` kun je de details van het bestand opvragen.
      Hoe groot is het? ......
    17. Verwijder het bestand 'bashinstellingen'.
    18. Vraag nogmaals de details van het bestand op. Welke foutmelding krijg je? ......
  10. Je kunt gemakkelijk naar de Persoonlijke map gaan met de opdracht `cd` zonder argumenten.
    1. Zorg ervoor dat je in je Persoonlijke map (home-directory) werkt.
    2. Maak het bestand 'eerste' met de tekst “alpha” (inhoud) aan.
    3. Maak het bestand 'tweede' met de tekst “beta” aan.
    4. Maak het bestand 'derde' met de tekst “gamma” aan.
    5. Voeg de drie bestanden samen tot het bestand met de naam 'grieks'.
    6. Toon de inhoud van het bestand 'grieks'.
  11. Zorg ervoor dat je in de Persoonlijke map werkt.
    1. Hoeveel bestanden bevat de map? ................. (probeer ook eens de `dir` opdracht).
    2. Gebruik nu ls met het -a argument. Hoeveel bestanden zie je nu? ............ (merk op dat de bijgekomen bestandsnamen allemaal beginnen met een .........., dit zijn verborgen bestanden.
    3. Recente linuxdistributies gebruiken kleuren om het onderscheid tussen mappen en bestanden te tonen. Indien je niet beschikt over een kleurenterminal kan het -F argument nuttig zijn. Welk verschil merk je op tussen de weergave van de opdrachten `ls` en `ls -F`? .....
    4. Met welke toetscombinatie kun je een lopende opdracht afbreken? ......
    5. Recursieve lijsten kunnen zeer nuttig zijn. Probeer de volgende opdrachten. Breek ze indien nodig af.
      ls -R /usr/
      
      ls -R1 /usr/
      Wat verschil merk je in de uitvoer? ......
  12. Gebruik de more opdracht om het bestand services te lezen: more /etc/services
    1. Merk bij het lezen de “--More--(4%)” prompt op onderaan de bladzijde.
    2. Druk op de Return of Enter toets. Wat gebeurt er? ......
    3. Druk éénmaal op de Spatiebalk. Wat gebeurt er? ......
    4. Typ een letter b. Wat gebeurt er? ......
    5. Gebruik de voorwaarts zoeken mogelijkheid om het woord “http” te vinden met de opdracht: /http (m.a.w. typ /http[Return])
    6. Ga na welke mogelijkheden er nog zijn door hulp te vragen met het ?-teken.
    7. Welke toetscombinatie doet hetzelfde als drukken op de toets 'b'? ......
    8. More gaat verder tot het einde van het bestand of tot je q (quit) typt om het programma te verlaten.
      Typ een q om het programma te verlaten.
  13. Toon het begin van het bestand '/etc/services' met de opdracht `head`.
    1. Hoeveel regels tel je? ......
    2. Welk argument (optie) moet je tussenvoegen om de eerste 5 regels te zien? ......
    3. Toon nu hetzelfde bestand met de `tail` opdracht.
    4. In hoeverre is hetgeen getoond wordt verschillend? ......
    5. Gebruik de opdracht `tail -f .bash_history` om de aanpassingen op het einde van het bestand te volgen. Indien je een foutmelding krijgt, sluit je de SSH verbinding af en start je deze opnieuw op en probeer je nogmaals.
    6. Start een tweede SSH verbinding.
    7. Typ de volgende opdrachten en bevestig telkens met Return:
      pwd
      ls -l
      dir
      exit
      De laatste opdracht heeft de tweede SSH verbinding beëindigd.
    8. Wat merk je in het venster van de eerste SSH verbinding? ......
    9. Breek de lopende tail opdracht af.
  14. Kopieer het bestand '/etc/services' (in de configuratie folder) naar het bestand 'netwerkdiensten' in jouw Persoonlijke map.
    1. Bekijk de inhoud van de map om na te gaan of de vorige opdracht gelukt is.
    2. Gebruik de kopieer opdracht `cp -i /etc/services netwerkdiensten` (met het "interactive" argument).
      Wat gebeurt er? ......
    3. Gebruik de recursieve optie (`cp -r /usr/bin kopie`) om een volledige submap te kopiëren naar een nieuwe submap.
      Bij het kopiëren kunnen er toegangsfouten optreden. Dit is normaal.
      Bekijk de inhoud van beide mappen om na te gaan of het heeft gewerkt.
    4. De copy opdracht aanvaardt jokers.
      1. Probeer de opdracht `cp /etc/*conf kopie`.
      2. Wat gebeurt er? (tip: doe een `ls *conf` in de map kopie).
    5. Zorg ervoor dat je in de Persoonlijke map werkt.
    6. Indien je een bestand kopieert van een andere locatie naar de huidige map en je wil de bestandsnaam behouden, kun je "." gebruiken om de huidige map aan te duiden.
      Probeer `cp /etc/issue .`.
  15. De mv opdracht kan gebruikt worden om bestanden te hernoemen. Gebruik de opdracht `mv issue begroeting` om de naam van het bestand 'issue' te veranderen naar 'begroeting'.
    1. Controleer de inhoud van de map om te tonen dat de opdracht heeft gewerkt.
    2. De mv opdracht wordt ook gebruikt om mappen te hernoemen. Gebruik deze opdracht om de naam van de directory 'kopie' te veranderen naar 'mijnkopie' en controleer of de opdracht gelukt is.
    3. Gebruik nu de mv opdracht om het bestand 'netwerkdiensten' te verplaatsen naar de map 'mijnkopie'.
  16. Verwijder de map "mijnkopie" met de opdracht `rm -rf mijnkopie`.
    1. Waarvoor zorgt het argument -f? ......
    2. Verwijder nu de volgende bestanden in jouw thuismap: begroeting, eerste, tweede, derde en grieks.
  17. Gebruik de opdracht `file /bin/su` om het type van het bestand 'su' te bepalen: ......
    Gebruik de file opdracht om het type van volgend bestanden te bepalen:
    1. /etc/shadow
    2. /usr/share/man/nl/man1/*
  18. Open de map /etc/.
    1. Zoek nu met `find . -name "*deny"` naar bestanden waarvan de naam eindigt op 'deny'.
      Hoeveel bestanden worden gevonden? ......
    2. Zoek enkel mappen (argument '-type d') die beginnen met de letters "rc".
      Hoeveel mappen worden er gevonden? ......
  19. Wees er zeker van dat je in je Persoonlijke map werkt.
    1. Creëer dan de nieuwe map 'Boeken' met de mkdir opdracht.
    2. Creëer de volgende submappen in Boeken: Handleidingen, Tijdschriften en Literatuur.
    3. Probeer een map te creëren in een map waar je geen rechten hebt (vb: /etc).
      Welke melding krijg je? ......
  20. Linux bestandspermissies

    Windows, macOS en Linux ondersteunen ACL (Access Control Lists). ACL is een nieuwere vorm voor het toekennen van gebruikersrechten op bestanden. Het heeft als voordeel dat je permissies van meerdere gebruikers en groepen kan koppelen aan een bestand (het is flexibel). ACL onder Linux is een uitbreiding op de Linux bestandspermissies. Zelfs indien er ACL voorhanden is, kan het nog altijd nuttig zijn om kennis te hebben van de structuur van Linux toegangsrechten.

    Voor een bestand zijn er drie soorten gebruikers: owner (eigenaar), group (groep), other (rest).

    • Owner
      Staat voor de gebruiker zelf. De gebruiker kan instellen welke rechten hij of zij op de bestanden heeft.
    • Group
      Je kunt hiermee instellen welke rechten de gebruikers hebben die in dezelfde groep zitten als de gebruiker.
    • Other
      Hier kan men de toegangsrechten instellen van iedere andere gebruiker.

    Aan ieder van deze drie soorten gebruikers kun je volgende rechten toekennen: read (lees), write (schrijf) en execute (uitvoeren).

    Voorbeeld: Na het uitvoeren van de opdracht `ls -l` staat de volgende regel op het scherm:

    -rw-r--r-- 1 pi pi 47 19 aug 14:43 derdebestand

    De eerste kolom bevat de toegangsrechten en heeft de volgende structuur:

    • De eerste letter bepaald of we te maken hebben met een bestand (-), een directory (d) of een koppeling (l).
    • Dan volgen drie groepen van drie letters met de toegangsrechten voor respectievelijk de Eigenaar (Owner), de Groep (Group) en de Rest (Other).

    De drie letters stellen respectievelijk de volgende rechten voor:

    Recht Recht aanwezig Geen recht
    Read r -
    Write w -
    Execute x -
    Verzeker je ervan dat je in je Persoonlijke map bent.
    1. Kopieer de inhoud (argument -r) met de opdracht `cp -r /etc ~/instellingen` van de map /etc/ naar de map instellingen/ in uw Persoonlijke map (toegangsfouten mag je negeren).
    2. Open de map ~/instellingen/.
    3. Toon de inhoud van alle bestanden in de lange vorm (veel details) in deze map.
    4. Welke letterpositie in de eerste kolom bepaalt of je te maken hebt met een directory (letter 'd')? ......
    5. Welke letter bepaalt in de eerste kolom of een bestand uitvoerbaar is? ......
    6. Welke letterposities in de eerste kolom bepalen de rechten van de eigenaar? ......
    7. Welke letterpositie in de eerste kolom bepaalt de leesrechten van de groep waartoe je behoort? ......
    8. Wie is eigenaar van de meeste bestanden? ......
    9. Tot welke groep behoort de eigenaar van de meeste bestanden? ......
    10. Welke letterposities bepalen de rechten die de onbekende gebruikers hebben? ......
    11. Gebruik de opdracht `ls -l issue` om de toegangsrechten van 'issue' te bekijken.
    12. Gebruik de opdracht `chmod o-r issue` om de rechten te wijzigen.
    13. Gebruik nogmaals de opdracht `ls -l issue` om de toegangsrechten van 'issue' te bekijken en te bepalen welk toegangsrecht aangepast werd.
      Achterhaal daarmee de werking van het argument 'o-r' in de vorige opdracht: ......
    14. Ga op de dezelfde manier te werk om de volgende rechten aan te passen en probeer telkens te achterhalen welke rechten door de argumenten werden aangepast:
      1. Gebruik het argument 'ugo+wx' met het programma chmod op het bestand 'issue'.
        ugo+wx: aangepaste rechten: ......
      2. Gebruik het argument 'g-x' met het programma chmod op het bestand 'issue'.
        g-x: aangepaste rechten: ......
    15. De opdracht chown dient om de eigenaar van een bestand te wijzigen.
      Probeer volgende opdracht `chown root issue`.
      Waarom [lukt dit]/[lukt dit niet]? ......

Openbare reacties op deze pagina (kunnen door alle bezoekers gelezen worden)

, vrijdag 2 juni 2023 19:28