Beetje Coderen

Les 2

Bestanden en mappen

Bestanden en mappen maken, kopiëren, verplaatsen en verwijderen, en wildcards gebruiken.

⏱ 45–60 minuten leestijd + oefenen

🎯 Na deze les kun je

  • bestanden en mappen beheren met mkdir, cp, mv en rm
  • wildcards gebruiken
  • de mappenstructuur van Linux (FHS) uitleggen

In les 1 heb je rondgelopen door het bestandssysteem. Nu ga je het zelf inrichten: mappen maken, bestanden kopiëren, verplaatsen, hernoemen en verwijderen. Op de commandline gaat dat vaak sneller dan met een muis, vooral als het om veel bestanden tegelijk gaat. Met wildcards verplaats je in één commando alle foto's uit een map. Maar met dezelfde kracht gooi je in één commando ook alles weg. Daarom leer je in deze les ook voorzichtig te werken.

Mappen en lege bestanden maken

mkdir projecten
mkdir -p projecten/website/css
touch notities.txt
ls -R projecten
projecten:
website

projecten/website:
css

projecten/website/css:
  • mkdir (make directory) maakt een map.
  • mkdir -p maakt ook alle tussenliggende mappen aan, en geeft geen fout als de map al bestaat.
  • touch maakt een leeg bestand (of werkt de tijd bij van een bestaand bestand).
  • ls -R toont de inhoud recursief: ook alle submappen.

Kopiëren met cp

cp notities.txt notities.bak          # kopie met een andere naam
cp notities.txt projecten/            # kopie in een andere map
cp -r projecten projecten-backup      # een hele map kopiëren

cp bron doel: eerst wat je kopieert, dan waarheen. Een map kopiëren kan alleen met -r (recursive). Zonder -r krijg je cp: -r not specified; omitting directory 'projecten'.

Bestaat het doelbestand al, dan overschrijft cp het zonder te vragen. Met cp -i (interactive) vraagt het eerst om bevestiging.

Verplaatsen en hernoemen met mv

Linux kent geen apart commando om te hernoemen. Hernoemen is verplaatsen naar een nieuwe naam:

mv notities.bak oud.txt               # hernoemen
mv oud.txt projecten/                 # verplaatsen naar een map
mv projecten/oud.txt ~/archief.txt    # verplaatsen én hernoemen

Net als cp overschrijft mv zonder waarschuwing; mv -i vraagt het eerst. Voor mappen heeft mv geen -r nodig.

Verwijderen met rm en rmdir

rm archief.txt                # een bestand verwijderen
rmdir lege-map                # een LEGE map verwijderen
rm -r projecten-backup        # een map met alle inhoud verwijderen

rmdir weigert als de map niet leeg is (Directory not empty). Dat is een veiligheid. rm -r verwijdert alles eronder.

Op de commandline bestaat geen prullenbak. Wat rm verwijdert, is weg.

Wildcards

Met wildcards (jokertekens) beschrijf je een groep bestandsnamen:

Wildcard Betekent Voorbeeld Past op
* nul of meer willekeurige tekens *.jpg foto1.jpg, vakantie.jpg
? precies één teken factuur-2026-0?.pdf factuur-2026-01.pdf t/m -09
[abc] één van deze tekens foto[12].jpg foto1.jpg, foto2.jpg
{a,b} elk van deze woorden mkdir {fotos,facturen} maakt twee mappen

Neem een rommelige downloadmap:

$ ls
factuur-2026-01.pdf  foto1.jpg  notities.txt  vakantie.JPG
factuur-2026-02.pdf  foto2.jpg  setup.exe
$ ls *.jpg
foto1.jpg  foto2.jpg

vakantie.JPG doet niet mee: Linux is hoofdlettergevoelig (les 1). Met *.[jJ][pP][gG] vang je beide schrijfwijzen.

Belangrijk om te snappen: niet het commando, maar de shell vult de wildcard in. Je typt ls *.jpg, maar de shell maakt daar ls foto1.jpg foto2.jpg van, en pas dan start ls. Daarom werken wildcards bij elk commando.

Twijfel je wat een wildcard raakt? Kijk eerst met ls of echo: echo *.jpg laat precies zien welke namen de shell invult. Pas daarna vervang je ls door mv of rm.

De Linux-mappenboom (FHS)

In les 1 zag je al een paar mappen onder /. Hun indeling ligt vast in de Filesystem Hierarchy Standard (FHS), zodat je op elke Linux-machine weet waar je moet zoeken:

Map Inhoud
/bin, /usr/bin programma's voor iedereen (ls, cp)
/sbin, /usr/sbin programma's voor systeembeheer
/etc configuratiebestanden (les 5)
/home thuismappen van gebruikers
/root thuismap van de beheerder root
/var gegevens die veranderen: logs (/var/log), websites (/var/www), databases
/tmp tijdelijke bestanden, vaak gewist bij herstart
/usr geïnstalleerde software en bibliotheken
/opt losse software van derden
/dev apparaten als bestanden (schijven, /dev/null)
/proc informatie over draaiende processen, gemaakt door de kernel (les 6)
/mnt, /media koppelpunten voor extra schijven en USB-sticks (les 13)

Op moderne systemen zijn /bin en /sbin vaak verwijzingen naar /usr/bin en /usr/sbin; het maakt voor jou geen verschil.

Typische fout: rm -r zonder nadenken

De gevaarlijkste combinatie op de commandline is rm -r met een wildcard of een variabele. Een paar echte valkuilen:

  • Een spatie te veel. rm -r oud * in plaats van rm -r oud* verwijdert de map oud en alles in de huidige map.
  • Verkeerde map. Je denkt dat je in ~/downloads staat, maar je staat in ~. Controleer met pwd voordat je met wildcards verwijdert.
  • rm -rf. De -f (force) zet alle waarschuwingen uit. Gebruik het alleen als je precies weet wat je doet.

Een veilige werkwijze:

  1. pwd: sta ik waar ik denk?
  2. ls patroon: wat raakt dit patroon precies?
  3. Pas dan rm, en bij twijfel rm -i.

Oefenen

Oefening 1. Maak in één commando de mappen school/wiskunde, school/engels en school/informatica.

Modelantwoord oefening 1
mkdir -p school/{wiskunde,engels,informatica}

De accolades maken er drie paden van; -p maakt school er vanzelf bij.

Oefening 2. In een map staan rapport-v1.docx, rapport-v2.docx, rapport-v10.docx en rapport-def.docx. Welke bestanden raakt rapport-v?.docx? En rapport-v*.docx?

Modelantwoord oefening 2

rapport-v?.docx: alleen rapport-v1.docx en rapport-v2.docx (? is precies één teken). rapport-v*.docx: ook rapport-v10.docx. rapport-def.docx doet bij geen van beide mee.

Oefening 3. Wat is het verschil tussen cp map nieuwe-map en cp -r map nieuwe-map? En wat doet mv map nieuwe-map?

Modelantwoord oefening 3

cp map nieuwe-map weigert: zonder -r kopieert cp geen mappen. cp -r kopieert de map met alle inhoud; het origineel blijft bestaan. mv hernoemt de map naar nieuwe-map (bestaat nieuwe-map al als map, dan wordt map daarin geplaatst).

Lab: een rommelige downloadmap opruimen

  1. Start het lab: docker run -it --rm registry.wizg.it/webhosting/beetje-labs:les2.
  2. In ~/downloads staan tientallen bestanden door elkaar: foto's (.jpg en .JPG), pdf's, installatiebestanden (.exe, .deb) en tekstbestanden.
  3. Maak in je thuismap de mappen opgeruimd/fotos, opgeruimd/documenten en opgeruimd/software.
  4. Verplaats met wildcards elk soort bestand naar de juiste map. Controleer eerst met ls wat je patroon raakt.
  5. Maak een kopie van alle facturen (factuur-*.pdf) in opgeruimd/belasting.
  6. Verwijder de lege map ~/downloads met rmdir (lukt dat niet, dan is hij nog niet leeg).
  7. Controleer met beetje check les2.

Samenvatting

  • mkdir -p maakt mappen (ook tussenliggende), touch maakt een leeg bestand.
  • cp bron doel kopieert (-r voor mappen), mv verplaatst of hernoemt, rm verwijdert (-r voor mappen), rmdir verwijdert alleen lege mappen.
  • cp en mv overschrijven zonder te vragen; -i vraagt eerst. rm heeft geen prullenbak.
  • Wildcards *, ?, [ ] en { } worden door de shell ingevuld. Kijk eerst met ls of echo wat ze raken.
  • De FHS bepaalt waar wat staat: configuratie in /etc, logs in /var/log, programma's in /usr/bin.

In les 3 ga je in bestanden kijken en zoeken, en commando's aan elkaar koppelen met pipes.

Lab

Een rommelige downloadmap opruimen

💻 Dit lab doe je op je eigen computer met Docker. Start de lab-container met (geeft de opdracht een eigen startcommando, gebruik dan dat):

$ docker run -it --rm registry.wizg.it/webhosting/beetje-labs:les2

Volg daarna de stappen van de opdracht hierboven. Nog geen Docker? Zie les 14 van Een beetje Linux & Docker. Voor dit lab is er geen live lab in de browser.

Klaar? Controleer je werk met:

$ beetje check les2

📝 Quiz: bestanden en mappen

6 vragen · 70% nodig om te slagen

1. Hoe hernoem je `oud.txt` naar `nieuw.txt`?
2. Welke bestanden raakt `foto?.jpg`?
3. Waarom weigert `rmdir projecten`?
4. In welke map staan op Linux de configuratiebestanden?
5. Wie vult een wildcard als `*.txt` in?
6. Wat is een veilige werkwijze voor `rm` met een wildcard?