Ik Van Linux

Spelen Met Directories


In Windows zijn we gewend om met driveletters te werken. Linux kent geen driveletters. Er is slechts een boomstructuur, die begint bij de wortel (de root). Windows gebruikers die wel eens in een Dosbox werken weten dat directories daar van elkaar gescheiden worden door het \ teken. Dat doen we bij Linux anders. Bij Linux is het scheidingsteken de voorwaartse schuine streep / .
Dus ls / geeft de inhoud weer van de root directory. En ls /etc geeft de inhoud weer van de directory etc, die direct onder de root directory hangt. En ls /var/log geeft de inhoud weer van de directory log, die onder directory var hangt, die op zijn beurt weer onder de root directory valt. We noemen een aaneenschakeling van directories ook wel een pad, ofwel path in het Engels.

Hoe weet je nu of een bestandsnaam nu een normaal bestand is of dat het een directory is? Voer maar eens het command ls -l /etc uit.

ls -l /etc
    ...
drwxr-xr-x 2 root root    4096 Dec  9  2017 profile.d
-rw-r--r-- 1 root root    2932 Dec 26  2016 protocols
    ...

Wanneer de eerste letter van een regel met een d begint betreft het een directory. Een normale file wordt door een streepje aangegeven. Er zijn nog meer mogelijkheden, maar daarover wellicht later meer. En ook de rest wat hier allemaal staat ga ik je later nog uitleggen.
Soms worden directories ook met een aparte kleur aangegeven. Maar dat is heel erg afhankelijk van de instellingen en van de mogelijkheden van de terminal. Daarom beschouw ik op dit moment de kleuren even als bijzaak.

De Home Directory

Normaal, als je inlogt op de terminal, kom je in je home directory uit. Dat is een directory waarin jij zowat alles mag. Je mag files aanmaken, wijzigen, wissen en hernoemen. Je mag er een grote puinhoop van maken, of zelfs alles weggooien. En het systeem zal niet klagen, het is immers jouw feestje. Wat jij met jouw werk doet interesseert het systeem niet. Doorgaans is jouw home directory ook de enige directory waarin jij die vrijheden hebt. Dat is zo omdat Linux een multi-user systeem is. Je wil niet hebben dat jij bestanden van een ander weg kunt gooien bijvoorbeeld.
Er is één uitzondering op deze regel. Doorgaans mag iedereen ook zomaar wat aanrommelen in de /tmp directory. Dat is een directory speciaal voor tijdelijke bestanden. Je mag er dan ook niet van uitgaan dat die bestanden ook blijven staan na een systeem reboot.

Alle home directories zijn in de directory /home te vinden. Als er maar één gebruiker aan een systeem is gekoppeld staat daar slechts een directory in, die dezelfde naam draagt als die ene gebruiker. Bij de Raspberry Pi staat daar dus alleen /home/pi in.

Waar ben ik?

De Prompt geeft normaal gesproken weer in welke directory je je bevindt. Er is echter nog een andere manier om te zien waar je ergens in de boomstructuur bent. Het pwd commando toont het volledige, absolute pad van waar je op dat moment staat.

pwd
/home/pi

Als je net bent ingelogd op de terminal is dat dus je home directory, wat op de Raspberry Pi dus de directory /home/pi zal zijn. pwd is een afkorting van Print Working Directory.

Van directory wisselen

Het cd commando wordt gebruikt om van huidige directory te wisselen. cd staat voor Change Directory, ofwel wijzig directory.
Doe maar eens cd / . In de Prompt zie je dan pi@raspberrypi:/ $ , waarbij de / aangeeft dat je in de root directory staat. Of doe maar eens cd /var . Nu zie je aan de Prompt dat je in de /var directory staat. Het pwd commando zal dat bevestigen.

Het cd commando kent twee slimme trucjes. Geef je alleen het cd commando, dan ga je terug naar je home directory, ongeacht waar je op dat moment staat. En doe je cd - dan ga je terug naar de vorige directory, de directory dus waar je vandaan kwam toen je de vorige keer het cd commando uitvoerde. Zo kun je dus gemakkelijk tussen twee directories heen en neer schakelen.

Directories maken en wissen

Met het mkdir commando kun je een nieuwe directory aanmaken, vooropgesteld dat je daar de rechten voor hebt. Je hebt die rechten gegarandeerd in je eigen home directory. Daarom voeren we eerst het cd commando uit om er zeker van te zijn dat we daar staan.
We maken nu een directory aan met de naam konijn:

mkdir konijn

Het mkdir commando is een afkorting van MaKe Directory.
Via het ls commando kunnen we controleren of we inderdaad een directory hebben aangemaakt met de naam konijn.

Let op, bestandsnamen zijn hoofdlettergevoelig. Een directorynaam is eigenlijk ook een bestandsnaam, dus ook die zijn hoofdlettergevoelig.
Om dat te bewijzen maken we ook even een directory aan met de naam Konijn.

mkdir Konijn

Zie je wel, geen foutmelding. Als je een naam gebruikt die al bestaat krijg je namelijk wel een foutmelding:

pi@raspberrypi:~ $ mkdir konijn
mkdir: cannot create directory ‘konijn’: File exists

Weer in het Engels natuurlijk, maar is niet echt moeilijk lijkt me. Door weer een keer het ls -l commando uit te voeren kunnen we zien dat beide directories konijn en Konijn bestaan.
Om verwarring te voorkomen gooien we maar even de directory Konijn weg.

rmdir Konijn

Het commando rm is een afkorting van ReMove DIRectory. Het ls -l commando kan weer gebruikt worden om te bewijzen dat een van de twee konijnen nu vertrokken is.
Je kunt nu, bij wijze van oefening in de directory konijn gaan staan met het cd konijn commando. En daar kun je ook weer een nieuwe directory in aanmaken, bijvoorbeeld met de naam flapoor. Ga daarna weer in je home directory staan, door het cd commando uit te voeren. En probeer dan de directory konijn weg te gooien.

pi@raspberrypi:~ $ rmdir konijn
rmdir: failed to remove 'konijn': Directory not empty

Hmm. Dat ging dus niet. De directory is niet leeg, zegt hij. Dat klopt, want er is nog een directory met de naam flapoor in de directory konijn. Die moet dus eerst weg. Dat doe je dus door rmdir konijn/flapoor in te typen, en dan op de volgende regel gevolgd door rmdir konijn.

Twee speciale directories


In Linux bestaan twee speciale directories. Deze directories staan in elke directory. De speciale directories zijn ook niet te wissen, en je kunt ze niet hernoemen. Ze bestaan gewoon altijd, in elke directory.
Ga voor de zekerheid even terug naar je home directory door het cd commando uit te voeren. En voer dan het commando ls -a uit. De eerste twee entries van de lijst die je dan te zien krijgt zijn de speciale directories. De ene heet punt (.) en de ander heet punt punt (..).

De directory punt betekent zoveel als "deze directory", ofwel de directory waar we nu in staan. Het nut daarvan zullen we straks nog wel een keer zien als we het hebben over het uitvoeren van zelfgemaakte programma’s.
De directory punt punt betekent zoveel als "de directory net onder de huidige directory", dus richting de root directory. Als je vanuit je home directory cd .. doet, ga je een directory terug. Je home directory is bijvoorbeeld /home/pi, dus een directory terug is /home. Als je dan nog een keer cd .. doet ga je er nog een terug. Je staat dan dus in de / directory, ofwel de root directory. Nog een keer cd .. heeft dan geen effect meer, want je kunt niet verder terug dan de root directory.

Indeling Van Directories


Linux kent een bepaalde directory structuur, die vrijwel bij alle Linux versies hetzelfde is. Dat is wel zo gemakkelijk. Hieronder noem ik de meest gebruikte directories. Dat wil niet zeggen dat de andere directories nooit gebruikt worden, je hebt er als gebruiker echter zelden iets te zoeken. Sterker nog, je komt ook zelden in het gros van de hieronder genoemde directories. Het is gewoon handig om de structuur te kennen, mocht je toch een keer iets speciaals zoeken.

/home

De /home directory bevat, ehm, alle home directories van alle gebruikers. Doorgaans is dat bij ons slechts een gebruiker, dus bevat de /home directory dan ook maar een sub-directory, met de naam van de gebruiker. In ons geval is dat dus waarschijnlijk /home/pi .

In je eigen home directory mag je dus doen wat je wil. Alle andere directories zijn waarschijnlijk van iemand anders, dus daar mag je niet zo maar mee doen wat je wil.

/bin /sbin /usr/bin /usr/sbin /usr/local/bin /usr/local/sbin /usr/games

Hierin staan de binaries, ofwel de programma’s die gebruikers of het systeem kunnen aanroepen. Deze directories staan doorgaans ook in het zoekpad, waar het systeem in gaat zoeken naar de commando’s die jij intypt. Type maar eens het volgende commando en je ziet wat er allemaal in het zoekpad zit:

echo $PATH

Je hebt doorgaans alleen lees en uitvoerrechten in deze directories. Dat is ook voldoende om alles te doen wat je moet doen. Sommige bestanden kun je als normale gebruiker echter niet uitvoeren. Meestal zijn dat bestanden die in de sbin versies van de paden staan. Daarin staan namelijk de System programma’s.

Waarom zo veel verschillende directories, die schijnbaar allemaal hetzelfde doen? Dat komt omdat Linux verschillende erfenissen met zich meedraagt van diverse Unix varianten. De ene variant stopt een programma graag in bin, de ander kiest voor /usr/bin, en weer een ander heeft liever /usr/local/bin. Het is voor het systeem om het even, zolang het commando maar via het zoekpad terug te vinden is.

/media /mnt /floppy /cdrom

Dit zijn de mount punten voor het aankoppelen van verwisselbare schijven. /floppy en /cdrom zijn uit de tijd, dus die worden meestal niet meer gebruikt. Alles staat tegenwoordig onder de directory /media. Dus als je een USB staafje, SD kaart of externe schijf aansluit, dan verschijnt meestal een nieuwe directory in de /media directory waarin je het betreffende apparaat kunt benaderen. Of dat automatisch gebeurt hangt echter wel af van of de auto mounter service is ingeschakeld. Dat is niet altijd het geval, maar het voert te ver om dit nu te bespreken.
De /mnt directory wordt doorgaans gebruikt om handmatig externe schijven te koppelen aan het systeem.

Linux is compatibel met Windows. Je kunt dus zonder problemen FAT en NTFS schijven aankoppelen. Let echter wel op dat bestandsnamen bij die systemen NIET hoofdlettergevoelig zijn. Het bestand konijn en Konijn is dus een en hetzelfde bestand bij FAT en NTFS.

/root

Dit is de home directory van de super user root, de administrator dus.

/boot

Hierin staan alle bestanden die het systeem nodig heeft om op te starten. Bij de Raspberry Pi is dat een aparte FAT geformatteerde partitie en is daardoor ook de enige partitie van de SD kaart die door een Windows computer gelezen en beschreven kan worden.

/dev

Hier staan geen echte bestanden in. Hierin staan alle devices die door de kernel herkend en aangekoppeld zijn.
In Linux is alles een bestand. Dus ook devices zijn ook bestanden. Deze bestanden staan echter niet op een filesystem, maar worden aangemaakt wanneer een bepaald device wordt herkend.
Afhankelijk van het type device kun je er naar toe schrijven, of vanaf lezen. Net als bij echte bestanden.

/etc

In deze directory staan alle systeemconfiguratie bestanden, al dan niet in sub-directories. Configuratie bestanden in Linux zijn vrijwel altijd door mensen leesbare tekstbestanden. Soms mag je die zelf aanpassen (als super user natuurlijk). En soms worden die bestanden gegenereerd door het uitvoeren van een configuratieprogramma.

We zullen in de toekomst zeker nog terugkomen op deze configuratie bestanden.

/lib

Hierin staan library bestanden. In Windows zouden dat dus de .lib bestanden zijn. Library bestanden zijn niet op zichzelf niet uitvoerbaar, maar worden gebruikt door andere uitvoerbare bestanden. Ze bevatten functies die door andere programma’s gebruikt kunnen worden.
Doorgaans heb je hier niet veel te zoeken als gebruiker.

/proc

Ook in deze directory staan geen echte bestanden. Het lijken alleen bestanden te zijn. De namen die je hier ziet staan worden continu door het systeem gegenereerd en staan dus nergens op een schijf.

In deze directory staat systeem informatie. Bijvoorbeeld hoe lang de machine al draait, of wat voor processor in je computer zit.

/opt

Hier worden vaak uitvoerbare programma’s opgeslagen die niet door pakketbronnen geïnstalleerd zijn.

/var

Hierin worden systeemdata bestanden opgeslagen. Zo vind je hier bijvoorbeeld log files en www pagina’s, als je computer een www server is. Of database bestanden, als je computer een database server is.

We komen vast nog wel een keer terug in deze directory.

/tmp

Hierin mag iedereen tijdelijke bestanden opslaan. Ga er zeker niet van uit dat deze bestanden een herstart van het systeem zullen overleven. En sla hier ook geen super gevoelige informatie op, want iedereen met toegang tot jouw computer kan hier bij.