Terug naar Linux


Hoofdstuk III - Bestanden en directories

Het bestandssysteem
      De hoofddirectories
Het beheer van bestanden en directories
      Directories
      Koppelingen
      Device drivers
Commando's voor directory-beheer
     
ls - cd - cp - mv - more - rm - rmdir - mkdir - mc - pico - find - updatedb
      locate - chmod - chown - mount - df - du
Belangrijke bestanden
      passwd - pap-secrets - inetd.conf - profile - rc.local - messages - maillog - secure

Het bestandssysteem

De directory-indeling van een DOS machine is vrijwel geheel willekeurig. Mogelijk wordt er een directory DOS aangemaakt door het installatieprogramma, maar voor het overige mag u het allemaal zelf weten. Onder Win95 is het nog erger. Er is een directory WINDOWS, met een subdirectory SYSTEM en een subdirectory DLL. En er is een directory PROGRAM bestanden. Voor de rest is elk overzicht tamelijk zinloos. Want elk nieuw geinstalleerd programma plempt hier naar hartelust zijn programma-, systeem- en library-bestanden in, zodat u weldra door de bomen het bos niet meer ziet. Over alle Registry en .INI ellende heb ik het dan nog niet eens. Probeert u in Win95 maar eens handmatig een programma te de-installeren! ;-(

Onder Linux is dat anders. Het systeem maakt bij installatie een set standaard directories aan, waarbij de verschillende soorten bestanden over deze directories verdeeld worden. Welke dat zijn staat in de Linux bestand System Standard, een document waarin de namen en locaties van vele standaard bestanden en directories zijn vastgelegd.

Terug naar begin

De hoofddirectories zijn de volgende:
/etc zeer belangrijk: gereserveerd voor systeem configuratiefiles en opstart scripts.
/X11 bevat configuratiebestanden als XF86Config
/skel bevat standaard gebruikersbestanden, die worden gekopieerd als een nieuwe gebruiker wordt aangemaakt.
/lib bevat die libraries, die nodig zijn om de binaries uit /bin en /sbin uit te voeren
/dev hier staan de zogenaamde 'device files', die gebruikt worden om de verschillende soorten hardware van uw computer te benaderen: monitor, harddisk, floppy, seriele poorten, modems, enzovoorts.
/sbin hier staan die executables van de root, die nodig zijn om op te starten, /usr te mounten en systeem recovery acties te plegen. Tekst van de FSSTND: "/sbin bevat bestanden nodig voor booten samen met de binaries uit /bin. Alwat uitgevoerd wordt nadat /usr zonder problemen gemount is, moet in /usr/sbin komen. Binaries voor locaal systeem-beheer horen thuis in /usr/local/sbin.
In elk geval horen de volgende programma's in /sbin:
clock, getty, init, update, mkswap, swapon, swapoff, halt, reboot, shutdown, fdisk, fsck.*, mkfs.*, lilo, arp, ifconfig, route
/usr hier staan de bestanden die op de hele machine door gebruikers gestart kunnen worden. Gewoonlijk staat /usr op een eigen partitie, en dient hij readonly gekoppeld te worden. Onder andere horen hier de volgende subdirectories thuis:
/X11R6 - directory voor het Xwindow systeem
/bin - executables
/doc - willekeurige niet-man documentatie
/etc - configuratie bestanden voor op de hele machine
/games - duidelijk
/include - C header bestanden
/info - GNU info bestanden
/lib - libraries
/var bevat bestanden die de neiging hebben nogal te varieren in omvang. Vooral logfiles bevinden zich hier. In /var/spool en subdirectories staan data die regelmatig veranderen. Zo bevindt zich de post in /var/spool/mail ...
enzovoorts ...

U doet het beste met over deze zaak een van de vele handboeken te lezen, als u het allemaal heel precies wilt weten. Maar u kunt zich de zaak het best voorstellen als een omgekeerde boom, waarvan de root-directory ('/') de stam is en bovenstaande subdirectories de (steeds verder uitgesplitste) takken zijn.

Terug naar begin

Het beheer van bestanden en directories

Er zijn vier types bestanden: gewone bestanden, directories, koppelingen en speciale bestanden. Met het commando 'file' kunt u het type van een bestand vaststellen.

Het meest heeft u natuurlijk te maken met gewone bestanden. Dat kunnen tekst, scripts, binaire, data- of uitvoerbare bestanden zijn.

Directories zijn bestanden die de namen bevatten van gewone bestanden en subdirectories en pointers daar naar toe. Alleen in directory bestanden worden bestandsnamen opgeslagen. Copieren van een bestand is alleen verplaatsen van een bestandsnaam. Tenzij naar andere disk of partitie. Dan per byte letterlijke copie naar andere locatie.

Elke bestand onder Linux heeft een uniek nummer: een 'inode'. Dat nummer staat in de 'inode tabel', die wordt aangemaakt bij het formatteren van de schijf. Elke fysieke schijf of partitie heeft zijn eigen tabel. Een inode bevat alle informatie over de bestand, inclusief het adres van de data en het type bestand.

De root directory krijgt inode nummer 1. De root directory bestand bevat een lijst van de bestand en directory namen met de bijbehorende inode nummers. Ziet er als volgt uit:

1 .
1 ..
45 etc
230 dev
420 home
123 .profile

Ook de bestanden . (= huidige of actieve directory) en .. (= hogere directory) staan in de lijst. Omdat het hier om de root directory gaat hebben ze hetzelfde nummer. De actieve en de hogere directory zijn in het geval van de root directory immers identiek! In de directory /home echter zijn ze uiteraard verschillend:

420 .
1 ..
643 henkie

Zoals u ziet is het nummer van de huidige directory hetzelfde (420) als het nummer voor /home in de root lijst. En het nummer van de hogere directory is hetzelfde als dat van de root directory.

Op deze manier houdt Linux bij waar de verschillende bestanden op de schijf te vinden zijn. Bij verplaatsing van bestanden worden ook alleen maar de inode tabellen veranderd. En niet de bestanden zelf! Tenzij de bestand wordt gewist of gecopieerd naar een andere schijf of partitie. Dan wordt het bijbehorende inode nummer vrijgegeven.

Terug naar begin

Koppelingen (of in slecht computerbargoens: 'links') zijn eigenlijk helemaal geen bestanden. Het zijn alleen een soort ANWB borden in een directory bestand, die verwijzen naar een inode. De inode tabel houdt ook bij hoeveel koppelingen naar een bestand er bestaan. Alleen als de laatste directory verwijzing gewist is, wordt het inode nummer vrijgegeven.

Een bijzonder soort koppeling is de symbolische koppeling. Een dergelijke koppeling verwijst naar een inode, die op zijn beurt weer een verwijzing is naar een andere bestand elders in het bestandssysteem. Een dergelijke koppeling kan (in tegenstelling tot een gewone koppeling) wel verwijzen naar een bestand op een andere schijf of een andere computer. Het belangrijkste verschil tussen een gewone en een symbolische koppeling is, dat een gewone koppeling wordt behandeld als de bestand zelf. De feitelijke bestand wordt niet gewist tenzij de laatste gewone koppeling gewist is. U kunt de bestand dus ook niet wissen zolang er nog een gewone koppeling naar de bestand bestaat. Bij symbolische koppelingen is dat anders: als de bestand gewist wordt, gaan ook alle symbolische koppelingen eraan!

Overigens worden koppelingen net zo behandeld als de bestanden waarnaar ze verwijzen. U kunt zien of een bestand eigenlijk een koppeling is door het commando 'ls -l'. In de uitvoer wordt eerst de bestandsnaam getoond en daarna een verwijzing naar de gekoppelde bestand:

lrwxrwxrwx 1 root root 5 Jan 17 18:30 Tekst -> tekst/

Terug naar begin

En dan nog de speciale bestanden. Elk fysiek apparaat dat aan een Linux systeem hangt (disks, terminals en printers) wordt als een directory in het bestandssysteem weergegeven. Meestal staan ze in de directory /dev. Neemt u daar maar eens een kijkje. De inhoud van de verschillende apparaten worden gewoonlijk onder de directory /mnt getoond. Werpt u ook daar maar eens een blik.

Terug naar begin

Commando's voor bestands- en directorybeheer.

Hieronder volgt een aantal commando's, die u kunnen helpen bij het beheer van bestanden en directories. Onder elk commando staat een korte beschrijving van de werking. Uitgebreidere informatie kunt u onder Linux zelf krijgen, als u op de commandoregel invoert 'man <commando>' of 'man <onderwerp>', waarbij u op de plaats van het met <> omgeven woord natuurlijk een echt commando of een Linux onderwerp moet invoeren. U krijgt dan een of meer schermen met verklarende tekst over de door u genoemde term. Inderdaad ja ... helaas wel in het Engels! ;-)

Terug naar begin

ls
Dit commando toont bestanden en directories en is vergelijkbaar met het DOS commando 'dir', dat u in een bash shell trouwens ook kunt gebruiken. U kunt dit commando voorzien van allerlei extra opties, die betrekking hebben op de manier waarop de directory getoond wordt. Geeft u bijvoorbeeld maar eens de optie -all mee en ziet u maar eens hoe de uitvoer van het commando dan op het scherm verschijnt. Nadere uitleg vindt u (zoals gemeld) met 'man ls'.

Terug naar begin

cd
Met dit commando verandert u van directory, eveneens weer net als vroeger onder DOS. Het enkele commando 'cd' brengt u in een keer naar uw home directory op het systeem en met 'cd ..' gaat u telkens een directory terug. Met 'cd /' (let op de gewone 'slash', alleen DOS gebruikt de 'backslash' in directorynamen!) gaat u in een keer naar de basisdirectory van het systeem. Probeert u maar eens met dit commando door de verschillende directories te stappen en bekijkt u met 'ls' dan maar eens uit wat u dan te zien krijgt.

Terug naar begin

cp <bestand> <locatie>
Hiermee copieert u <bestand> naar <locatie>, zoals onder DOS gebeurt met het commando 'copy'. Een al bestaand bestand van dezelfde naam wordt niet zonder vragen overschreven. Redelijk safe dus.

mv <bestand> <locatie>
Het 'move' commando. Vergelijkbaar met 'cp'. Alleen wordt nu het bestand van de oude locatie verwijderd. Controleert u wel even of de <locatie> wel bestaat? Als u namelijk als doel een niet bestaande directory opgeeft kan 'mv' denken, dat u een nieuwe bestandsnaam bedoelt en bent u opeens (schijnbaar!) uw hele bestand kwijtgeraakt!

more <bestandsnaam>
Vergelijkbaar met het DOS commando 'type'. Alleen komt de tekst telkens met een scherm tegelijk voorbij. U stapt uit door op de toets 'q' (van 'quit') te drukken. Er zijn trouwens meer commando's onder Linux om tekstfiles te bekijken. Probeert u maar eens 'less <bestandsnaam>', 'cat <bestandsnaam>' en 'tail <bestandsnaam>'. U zult merken dat ze allemaal hun eigenaardigheden hebben. Met 'less' kunt u de tekst met de pijltoetsen laten terugrollen. En met 'cat' kunt u teksten aan elkaar plakken tot een nieuwe tekst. En 'tail' ... nou ja, kijkt u zelf maar!

Terug naar begin

rm <bestandsnaam>
Met dit commando (afkorting van 'remove') verwijdert u <bestandsnaam> van uw schijf, nadat u gevraagd is met Y of N aan te geven of u het echt zeker weet. Weet u het bij voorbaat al zeker, dan kunt u ook de optie -f tussen commando en <bestandsnaam> invoegen. Dan blijft de vraag namelijk achterwege. Met 'rm -r <directory>' kunt u complete directories en (eventueel) subdirectories verwijderen. Bij elke verwijdering wordt u weer gevraagd of u het zeker weet (Y/N). Ook van die vragen kunt u verlost worden door 'rm -f -r <directory>'. Alleen moet u dan wel heel erg goed weten waar u precies mee bezig bent! Hopelijk beseft u, dat dit commando dus echt LEVENSGEVAARLIJK kan zijn. Vooral wanneer u het als root gebruikt. U kunt het complete Linux systeem hiermee in een keer wissen! En onder Linux geldt: weg is weg! ;-(

rmdir <directory>
Verwijdert lege directory. Mocht de directory niet leeg zijn, dan krijgt u een melding dat de verwijdering om die reden niet is doorgegaan.

Terug naar begin

mkdir <directory>
Dit commando maakt een directory aan. Geen verdere bijzonderheden.

mc
Al het bovenstaande tesamen (en nog veel meer!) kunt u ook regelen met het commando 'mc', wat staat voor 'Midnight Commander', de Linux versie van 'Norton Commander'. U krijgt een NC-achtig schermpje te zien met menutoetsen en uitleg aan boord. Zeer krachtig programma!

pico <bestandsnaam>
Een eenvoudige teksteditor voor Linux. Natuurlijk zou u volgens de echte freaks eigenlijk 'vi' moeten gebruiken. En u zult ook wel merken, dat 'vi' nog wendbaarder is dan 'pico'. Zo kunt u 'vi' zelfs in een Telnet sessie gebruiken! Maar pico is eenvoudiger te gebruiken. De bedieningstoetsen staan namelijk in een klein menu onder op het scherm vermeld als geheugensteuntje. Probeert u het maar eens uit.

Terug naar begin

find . -name <bestandsnaam>
Met de uitgebreide directory boom van Linux is het vaak lastig zoeken naar die ene file, waarvan u net niet meer precies weet waar u hem ook alweer gelaten hebt. Het bovenstaande commando kan dan erg handig zijn. Het zoekt <bestandsnaam> vanaf de huidige directory verder naar beneden. Als u in plaats van de punt ('.') een directorynaam invoert, zal dat het uitgangspunt voor de zoekactie worden.

updatedb en locate <bestandsnaam>
Aan de andere kant kan 'find' (vooral als u laat zoeken vanaf de root-directory) een behoorlijk poosje aan het zoeken zijn. Daar wilt u niet altijd op wachten. Er is een alternatief. Met het commando 'updatedb' wordt een kleine database aangemaakt van alle bestanden en directories op uw machine. Met het commando 'locate <bestandsnaam>' wordt vervolgens in een flits <bestandsnaam> uit die gegevensbron opgehaald en op het scherm gezet. Het aanmaken van de database duurt natuurlijk even. Maar daarna verloopt een zoekactie aanzienlijk sneller dan met 'find'.

Terug naar begin

chmod a/ugo +/-xrw <bestand>
Met dit commando kunt u de rechten van een bestand veranderen. De verschillende opties werken als volgt. Bestandsrechten kunnen worden toebedeeld aan u (user = gebruiker, eigenaar van de file), g (group = werkgroep, die de file eveneens mag gebruiken) of o (other = alle anderen). Per onderdeel kunt u drie rechten toedelen: x (execute = uitvoeringsbevoegdheid), r (read = leesbevoegdheid) en w (write = schrijfbevoegdheid). Een + deelt het recht toe, een - neemt het recht weer weg. Uiteraard moet u zelf eigenaar van het bestand (of root) zijn om de rechten te kunnen veranderen. U kunt de zaak ook aan alle drie groepen tegelijk toedelen door de optie a (all) te gebruiken. Met de toevoeging <directory> in plaats van <bestand> kunt u dezelfde rechten ook m.b.t. een directory toedelen.

chown user,group <bestand>
Hiermee verandert u de eigendom van een bestand. Met 'ls -all' kunt u zien hoe de huidige stand van zaken is. En met chown kunt u het dan naar eigen inzichten veranderen. Uiteraard moet u ook voor deze actie of eigenaar van het bestand of root zijn.

Terug naar begin

mount /dev/cdrom /mnt/cdrom
Met dit commando koppelt u een cdrom aan uw Linux systeem, waarna u de inhoud van de cdrom kunt lezen in de directory /mnt/cdrom. Met 'cd' gaat u daarheen en met 'ls' kunt u de inhoud bekijken. Dit is trouwens een nogal belangrijk verschil in werking vergeleken bij een operating system als bijvoorbeeld DOS. Onder DOS worden de randapparaten bij het opstarten automatisch aan het systeem gekoppeld. En u kunt er ook zonder verdere poespas gebruik van maken.

Onder Linux is dat anders. Pas als een schijf gekoppeld is met het 'mount' commando kan er gebruik van gemaakt worden. Het eerste argument (/dev/cdrom) is daarbij de apparaat-driver. En het tweede argument (/mnt/cdrom) is het zogenaamde koppelingspunt. Dat wil zeggen: de plek waar de inhoud van de schijf binnen het systeem verschijnt in de vorm van een extra directory. Zo kan een floppy gekoppeld worden met het commando 'mount /dev/fd0 /mnt/floppy'. De apparaat-driver is standaard aanwezig in de /dev directory. Maar de directory /mnt/floppy moet door uzelf aangemaakt zijn (of anders eerst aangemaakt worden)! De inhoud van de floppy kan daarna bekeken worden in de directory /mnt/floppy.

N.B.: deze koppeling geldt voor elke floppy en voor elke CDROM-schijf apart!! U koppelt dus niet de floppy-drive of de CDROM-drive!! En u kunt/mag na koppeling een schijf ook niet zonder meer uit de drive verwijderen! U dient dan eerst gebruik te maken van het commando 'umount /mnt/floppy' of 'umount /mnt/cdrom'. Pas dan mag de schijf uitgenomen worden. En een nieuwe schijf moet eerst weer met het 'mount' commando gekoppeld worden.

N.N.B.B.: dit is ook de reden dat de CDROM na koppeling zijn schijf niet meer lijkt te willen teruggeven! ;-) Geen sprake van dat opeens uw CDROM-drive kapot zou zijn. Maar de schijf moet eerst ontkoppeld worden voor de eject-knop weer normaal werkt. De floppy heeft een dergelijk veiligheidsmechanisme niet. De uitstootknop werkt immers puur mechanisch. Fysiek kunt u dus heel makkelijk een gekoppelde floppy uit de drive verwijderen. Maar Linux zal u dat niet in dank afnemen! Ook een floppy moet voor verwijdering uit de drive eerst netjes ontkoppeld worden met 'umount'.

N.N.N.B.B.B.: u kunt via de mogelijkheid om aliassen in te stellen uzelf het typewerk om deze apparaten elke keer aan- en af te koppelen, besparen. Zie daarvoor hoofdstuk IV.

Terug naar begin

df
Staat voor 'diskfree'. Met dit commando krijgt u een overzicht van de ruimte die nog beschikbaar is op de gekoppelde harddisks.

du [-a] [-s]
Zal wel staan voor 'disk-used' en toont de grootte van bestanden (met de optie -a) of van directories (met de optie -s).

Terug naar begin

Belangrijke bestanden.

Tot slot van dit hoofdstuk noem ik hier nog een paar onder Linux belangrijke bestanden. Mogelijk wordt het een enigszins willekeurige opsomming, maar dat zij dan zo:

passwd - dit bestand staat in de directory /etc en bevat de inlognamen en versleutelde wachtwoorden van gebruikers. Normaliter verandert u dit bestand niet met de hand. Het beste kunt u hem laten aanmaken en beheren door het commando 'passwd' of (onder XWindows) door de User Management Tool. Er is echter een gelegenheid, waarbij het editten van deze file belangrijk kan zijn. En dat is als een gebruiker zijn wachtwoord vergeten is. U kunt dan de versleutelde tekst in de regel van betreffende gebruiker weghalen, zodat er twee dubbele punten vlak naast elkaar komen te staan. De gebruiker kan dan zonder wachtwoord inloggen en daarna zijn wachtwoord met 'passwd' weer instellen.

Terug naar begin

pap-secrets - dit bestand staat in /etc/ppp en bevat (in vier velden) de gegevens voor gebruikers die per modem inloggen. De wachtwoorden staan hier echter in klare taal (!) vermeld. De pap-authenticatie maakt van dit bestand gebruik.

inetd.conf - dit bestand staat in /etc en regelt de verleende services onder TCP/IP, dus of u via het netwerk kunt ftp-en, telnetten en dergelijke. Als u dat allemaal niet wilt toestaan, dient u de betreffende regels in dit bestand weg te commentarieren (door er een # voor te zetten).

profile - ook dit bestand staat in de directory /etc. Het bevat algemene declaraties voor uw systeem. Als u het pad wilt aanpassen in uw hele systeem, kunt u de zaak hier regelen.

Terug naar begin

rc.local - in dit bestand (dat zich bevindt in de directory /etc/rc.d) staan de eigen initialisatie zaken. Laadt u het maar eens in 'pico' en kijkt u maar eens wat u hier kunt regelen.

messages - is een logfile van systeemmeldingen, die zich bevindt in /var/log. U kunt hier zien wie er per modem inlogt. Ook kunt u dit bestand gebruiken om evt. systeemfouten op te sporen. Ook foutmeldingen komen hier namelijk terecht.

maillog - ook dit is een logbestand dat staat in /var/log. Hier gaat het over meldingen m.b.t. de postbehandeling door de mailserver.

Terug naar begin

secure - dit bestand (eveneens als logbestand in /var/log) bevat meldingen m.b.t. telnet en ftp

O ja ... graag herinner ik nog even aan de opmerking uit hoofdstuk I, toen het ging over het opstarten van programma's onder Linux.
Programma's kunnen in Linux niet zonder meer gestart worden vanuit de directory waarin het programma zelf staat. Typt u in die directory (naar analogie van DOS, waar dit wel kan!) de naam van het programma dan gebeurt er helemaal niets. Onder Linux zult u uitdrukkelijk moeten aangegeven dat u dit echt wilt door in te tikken './<programma> <ENTER>'. U geeft middels de punt dus de huidige directory aan om duidelijk te maken dat u zich echt niet vergist en geeft dan het commando! Ik herhaal deze opmerking hier, omdat vooral voormalige DOS gebruikers zich hier regeltmatig mee vergissen. Ikzelf dus incluis! ;-)

Terug naar begin