Gebruikerstip 28 (Juni 2003)

 

De structuur van het Linux bestandssysteem

Linux zit vooral de laatste maanden ontzettend in de lift. Veel bedrijven, maar ook overheden hebben besloten om over te stappen of zijn overgestapt op Linux. Ook voor de eindgebruiker is Linux zeker niet te hoog gegrepen, maar ook in dit besturingssysteem geldt, net als bij MS-Dos of MS-Windows, dat u wel enige basiskennis van het systeem nodig heeft om er goed mee om te kunnen gaan. Daarom deze maand een tip over de (globale) indeling van een Linux systeem, zodat u tenminste een idee heeft van welk deel van het systeem u waar mag, en kunt, verwachten.

Voordat de specifieke directory structuur van Linux aan bod komt, eerst een kort stuk over de mogelijke bestandssystemen. Linux kan met zeer veel verschillende bestandssystemen uit de voeten, maar er zijn er slechts enkelen die over het algemeen in de kernel zitten, en waar vanaf het systeem kan opstarten. (Deze beperking is echter te omzeilen door uw eigen kernel samen te stellen en te compileren, zodat het bestandssysteem van uw keuze kan worden gebruikt om van op te starten). Van oudsher bevat de kernel het extended2 (ext2) bestandssyteeem, deze opvolger van het extended bestandssysteem wordt al heel lang, en heel compleet ondersteund. Iedere Linux distributie ondersteunt dit bestandssyteem. Volledig compatible met ext2, maar met als extra een zogenaamde "journalising"-functie, is het extended3 bestandssysteem (ext3). Het voordeel hiervan is dat het bestandssysteem ook bij vastlopen of crashen van een machine intact blijft, en een controle op het bestandssysteem tijdens het opstarten dus niet meer nodig is. Bovendien is de "journalising"-functie ook een controle op de integriteit van het bestandssysteem tijdens het draaien. Zoals gezegd is ext3 volledig compatible met ext2 en alle moderne distributies ondersteunen het dan ook. Tenslotte zijn er nog JFS (journalising file system), dat IBM aan de Linux kernel gedoneerd heeft, en het Reiser FS (Reiser file system), van Hans Reiser. Deze bestandssystemen zullen in toekomstige kernel (en dus ook in toekomstige distributies) zitten, maar ook nu al worden deze bestandssystemen door veel distributies volledig ondersteund. Het voordeel van zowel JFS als ReiserFS boven ext3 is dat ze vele malen sneller zijn. Het nadeel is dat ze niet compatible zijn met oudere kernels. Het is dus vooral een kwestie van smaak welk bestandssysteem u kiest. Hier zal ik er geen aanraden, omdat ze allemaal hun voor en nadelen hebben, maar in principe zijn ze allen zeer goed, en eenvoudig te gebruiken.

De Linux directory structuur lijkt zeer veel op de directory structuur van andere Unix systemen, zoals BSD, AIX, HP-UX, Mac OSX enzovoorts. Dus de uitleg hieronder zal voor een deel ook van toepassing zijn op die systemen.

  / root
  |______ /bin
  |______ /boot
  |______ /cdrom (bij bijvoorbeeld Debian; bij anderen is deze directory niet aanwezig)
  |______ /dev
  |______ /etc
  |______ /floppy (bij bijvoorbeeld Debian; bij anderen is deze directory niet aanwezig)
  |______ /home
       |______ /gebruiker1
       |______ /gebruiker2
  |______ /initrd
  |______ /lib
       |_____ /modules
  |_______ /mnt
       |_____ /cdrom (bij bijvoorbeeld Mandrake)
       |_____ /floppy (bij bijvoorbeeld Mandrake)
  |______ /opt
  |______ /proc
  |______/root (de persoonlijke directory van de root gebruiker)
  |______ /sbin
  |______ /tmp
  |______/usr
       |_____ /X11R6
       |_____ /bin
       |_____ /local
       |_____ /sbin
  |______ /var
       |_____/log
       |_____/www

Deze boom geeft grofweg aan hoe de Linux directory structuur in elkaar zit. Voor de duidelijkheid zijn er delen weggelaten, dus deze afbeelding is niet compleet. Het verschilt per distributie (en gebruikers instellingen) hoe de structuur er verder uitziet, maar de hoofdlijnen zijn altijd zoals hier geschetst. De locatie van /floppy (het koppelpunt voor de floppy disk), en /cdrom (het koppelpunt voor de cdrom), die echt op een andere plaats zitten. Voor RedHat / Mandrake zitten dezen (met partities van andere aanwezige bestandssytemen), onder /mnt. Bij Debian (en afgeleiden daarvan) zitten deze twee echter direct in aan de root directory.

In de directory's /bin en /sbin zitten de meest noodzakelijke commandoregel gereedschappen, om bijvoorbeeld nieuwe apparaten te installeren ("lsmod", "insmod" enz.), uw netwerk in te stellen, het bestandssyteem te controleren en om andere primaire systeemtaken en reparaties uit te kunnen voeren.
In de directory /boot staan de opstart-images voor uw systeem. Dit zijn ingepakte bestanden van ongeveer 1Mb. groot waarmee de basis van het systeem wordt opgestart. De bootloader, onder Linux is dat meestal Lilo of Grub (maar er bestaan er nog veel meer), verwijst naar het opgegeven opstart-image. Pas hierna is de rest van het bestandssysteem beschikbaar en kunnen er programma's en modules (=>drivers) worden ingeladen.
In /dev staat een opsomming van alle (mogelijke) apparaten op- en aan uw computer. Het aanspreken van apparaten in Linux gaat altijd via deze directory. De eerste ide-harde schijf in een systeem is bijvoorbeeld altijd /dev/hda; de printerpoort is /dev/lp0 (tip: u kunt dus een tekst direct van de commandoregel naar de printer afdrukken, probeert u, als root, het volgende maar eens: "echo "hallo dit is een printertest" > /dev/lp0". Let hierbij wel op een ding: netwerk-apparaten zijn altijd virtueel. Dit houdt in dat ze dus nooit in /dev/te vinden zijn!
In /etc kunt u de instelling van de meeste programma's, en van een groot deel van het systeem vinden. Hier kunt u bijvoorbeeld in het bestand /etc/modules aangeven welke modules er bij het opstarten worden ingeladen. Wanneer u merkt dat een programma niet goed is ingesteld, kunt u het meestal hier in het bijbehorende configuratie bestand wijzigen.
In /home zitten de gebruikersdirectories, hier worden alle instellingen en bestanden van een gebruiker in eerste instantie in gezet. Wanneer u dus iets wilt bewaren, bijvoorbeeld een brief of een berekening, is uw eigen home-directory de aangewezen plaats.
de directory /initrd wordt voor en door het systeem ingeladen, hierop wordt tijdens het opstarten het systeem virtueel aangehangen. Deze directory is dus niet voor direct gebruik, maar moet nooit weggehaald worden.
De directory /lib bevat de bibliotheek bestanden die de basis vormen waarom alle Linux programma's draaien. De subdirectory /lib/modules bevat per kernel versie een subdirectory waarin alle in het systeem aanwezige modules te vinden zijn.
In /mnt worden externe partities, bijvoorbeeld Windows partities ingeladen ("mount /dev/hda1 /mnt/c-schijf"). In deze directory kunt u zowel partities van een ander besturingssysteem op de lokale machines inkoppelen, maar u kunt bijvoorbeeld ook (externe) netwerkpartities aankoppelen.
In /opt kunnen optionele programma's en extra's worden geïnstalleerd, deze directory wordt echter vrijwel nooit gebruikt.
In /proc worden de lopende processen op het systeem bijgehouden. Deze directory is erg handig om bij te houden wat er op uw systeem gebeurd, en om te zien welke apparaten wel werken en welke niet en waarom niet. Met het commando "cat /proc/meminfo" kunt u bijvoorbeeld zien hoeveel systeemgeheugen er in gebruik is.
De directory /root is de /home van de hoofdgebruiker van het systeem (de root is het opperhoofd / de god van het Linux systeem, hij kan en mag alles, vandaar ook dat de gebruiker root in principe niet geaccepteerd wordt als standaard gebruiker, maar alleen om een systeem correct te installeren en initialiseren, als gebruiker moet je ook als zodanig werken en inloggen met je eigen gebruikersgegevens).
In /tmp worden tijdelijke bestanden opgeslagen. Dit zijn bestanden die slechts een enkele sessie geldig zijn. In sommige systemen kunt u instellen dat de directory /tmp automatisch wordt geleegd tijdens het opstarten.
De directory /usr bevat een boom die veel lijkt op de standaardboom (dus wat onder / te vinden is). In /usr/bin en /usr/sbin staan de uit te voeren programma's. Vooral onder /usr/bin staan er veel (in de meeste systemen al snel meer dan 10.000(!!!). /usr/local is de directory waarin programma's die later worden geïnstalleerd in moeten worden gezet. In /usr/share is onder andere de documentatie van de meeste programma's te vinden (en anders staat deze onder /usr/share/doc/.... ). /usr/X11R6 is de thuisbasis van de grafische schil, dus van hieruit draait KDE of Gnome.
De directory /var bevat enkele configuratie-instellingen en procesgegevens van verscheidene programma's (zoals bijvoorbeeld de index van de apache webserver: /var/www/html. Systeem log bestanden zijn terug te vinden in /var/log. Deze bestanden zijn onmisbaar voor het vinden en diagnostiseren van een probleem. Met bijvoorbeeld "tail /var/log/messages" krijgt u de laatste commando's te zien die het systeem heeft uitgevoerd waar wat mee was. Helaas is /var nogal een samenraapsel van processen, programma's en instellingen, de directory is daardoor nogal onoverzichtelijk en eigenlijk alleen bruikbaar en interessant voor mensen die specifieke en/of specialistische toepassingen gebruiken.

Wanneer u deze indeling kent en begrijpt, is het diagnostiseren en terugvinden van problemen, en het oplossen daarvan opeens een stuk eenvoudiger. Met deze basiskennis is een Linux systeem geen vreemde "black-box" meer, maar is het vrij helder en duidelijk hoe het systeem werkt, en waarom iets niet werkt, immers u weet nu waar u de foutmelding terug kunt vinden, en waar u de instellingen voor een programma kunt wijzigen zodat de fout niet meer optreedt.

Heeft u nog vragen, of aanvullingen? aarzel dan niet om ons deze te mailen.



home