<!-- $Id: bestandssysteem.xml,v 1.1.1.1 2004/03/21 21:02:22 cor Exp $ -->

<chapter> <?dbhtml filename="bestandssysteem.html"?>
<title>Bestanden en directories</title>

<sect1>
<title>De basis</title>

<bridgehead>pwd</bridgehead>

<para>
<command>pwd</command>(1) is een eenvoudige utility die de directory
waarin je werkt toont. Voor het gebruik van <command>pwd</command> is
het niet nodig een extra parameter te geven. Hier is een voorbeeld van
de uitvoer van <command>pwd</command>:
</para>

<screen>
$ <command>pwd</command>
/home/danieldk
</screen>

<bridgehead>ls</bridgehead>

<para>
<command>ls</command> lijkt veel op het <command>dir</command> commando in 
DOS en Windows. Het is een commando dat de bestanden en directories in 
verschillende directories kan tonen. Door <command>ls</command> uit te 
voeren zonder extra parameters wordt de inhoud van de huidige directory 
directory getoond:
</para>

<screen>
$ <command>ls</command>
slackware-beginselen  slackware-beginselen-20december2002.tar.gz
</screen>

<para>
Natuurlijk kun je ook andere directories tonen. Dit kun je doen door
simpelweg het pad te specificeren achter het <command>ls</command>
commando:
</para>

<screen>
$ <command>ls /</command>
bin   dev  home  lost+found  opt   root  tmp  var
boot  etc  lib   mnt         proc  sbin  usr
</screen>

<para>
Het nadeel van de normale uitvoer is dat er weinig informatie gegeven wordt.
Zo is het bijvoorbeeld niet mogelijk te zien of iets een bestand of directory
is, wat de bestandsgrootte is en wie de eigenaar van een bestand is. Om
meer informatie te tonen heeft <command>ls</command> de "-l" parameter:
</para>

<screen>
$ <command>ls -l</command>
total 20
drwxr-xr-x    7 danieldk users        4096 Dec 21 09:24 slackware-beginselen
-rw-r--r--    1 danieldk users       14317 Dec 21 08:35 slackware-beginselen-20december2002.tar.gz
</screen>

<bridgehead>cd</bridgehead>

<para>
Een ander onmisbaar commando is het <command>cd</command>. Met
<command>cd</command> kun je de huidige werkdirectory veranderen:
</para>

<screen>
$ <command>cd /home/danieldk/</command>
</screen>

<para>
Met het <command>pwd</command> commando kun je zien dat je in de
opgegeven directory directory staat:
</para>

<screen>
$ <command>pwd</command>
/home/danieldk
</screen>

<bridgehead>mkdir</bridgehead>

<para>
Zoals je waarschijnlijk wel kunt raden kun je met het
<command>mkdir</command>(1) commando directories aanmaken. Een
voorbeeld:
</para>

<screen>
$ <command>pwd</command>
/home/danieldk
$ <command>mkdir test</command>
$ <command>cd test</command>
$ <command>pwd</command>
/home/danieldk/test
</screen>

<para>
Het kan voorkomen dat je een directory aan wil maken waarvan
de bovenliggende directory nog niet bestaat. Stel je wilt
de directory <filename>test2/hallo/</filename> aanmaken in de
huidige directory, maar de directory <filename>test2</filename>
bestaat nog niet. In dat geval kun je beide directories op de volgende
manier aanmaken:
</para>

<screen>
$ <command>mkdir -p test2/hallo</command>
</screen>

<bridgehead>rm</bridgehead>

<para>
<command>rm</command>(1) kan gebruikt worden om zowel bestanden
als directories te wissen. Laten we eerst eens naar een eenvoudig
voorbeeld kijken:
</para>

<screen>
$ <command>rm hello.c</command>
</screen>

<para>
Dit commando verwijdert het bestand <filename>hello.c</filename>. Soms
vraag <command>rm</command> om bevestiging alvorens bestanden te
verwijderen. Dit kun je omzeilen met de '-f' parameter:
</para>

<screen>
$ <command>rm -f *</command>
</screen>

<para>
Dit commando verwijdert alle bestanden in de huidige directory zonder
daarbij om bevestiging te vragen. Het komt vaak voor dat we ook directories
willen verwijderen, of zelfs hele directorystructuren. <command>rm</command>
heeft hiervoor de '-r' parameter. Stel dat we de directory
<filename>ogle</filename> met alle subdirectories willen verwijderen
zonder hier bevestiging voor te geven. Dit kun je met het volgende commando
doen:
</para>

<screen>
$ <command>rm -r -f ogle/</command>
</screen>

<para>
Het is bij veel commando's ook mogelijk parameterletters samen te voegen
om wat tikwerk te besparen. Het volgende voorbeeld is dan ook het
equivalent van het vorige:
</para>

<screen>
$ <command>rm -rf ogle/</command>
</screen>

</sect1>

<sect1>
<title>Permissies</title>

<bridgehead>Een korte inleiding</bridgehead>
<para>
In Linux heeft elk bestand zogenaamde permissies. Zoals je misschien
al gezien hebt kun je de permissies van een bestand met het
<command>ls -l</command> commando zien:
</para>

<screen>
$ <command>ls -l logo.jpg</command>
-rw-r--r--    1 danieldk users        9253 Dec 23 19:12 logo.jpg
</screen>

<para>
In het eerste kolom worden de permissies afgebeeld. De instelbare
permissies zijn read(r), write(w) and execute(x). Deze permissies
zijn in te stellen voor drie "groepen": owner(u), group(g) en
others(o). Deze permissies zijn zichtbaar als de tweede tot de
negende karakter in het eerste kolom. Deze negen karakters zijn
in drie&euml;n verdeelt. De eerste drie karakters geven de permissies
voor de eigenaar(owner) aan, de drie karakters die daarop volgen de
permissies van de groep(group) en de laatste drie karakters de
permissies van anderen (others). Naar bestand in het bovenstaande
voorbeeld mag dus geschreven worden door de eigenaar en het bestand
mag door iedereen (owner, group en others) gelezen worden.
</para>

<para>
Op het systeem zijn verschillende gebruikers aanwezig (een lijst
is te zien in <filename>/etc/passwd</filename>) en een gebruiker
kan weer lid zijn van bepaalde groepen. Op deze manier is het
mogelijk per bestand vrij gedetailleerd in te stellen wie wat wel
en niet mag doen. In het bovenstaande voorbeeld is te zien dat
<emphasis>danieldk</emphasis> de eigenaar van het bestand is
en dat group rechten gelden voor de groep <emphasis>users</emphasis>.
De groepsrechten verschillen in het bovenstaande voorbeeld niet
van die van andere mensen (others).
</para>

<bridgehead>chown</bridgehead>

<para>
<command>chown</command>(1) is een programma waarmee je de eigenaar
van een bestand in kunt stellen en voor welke groep de groepsrechten
gelden. Stel dat we <emphasis>danieldk</emphasis> eigenaar willen
maken van het bestand <filename>logo2.jpg</filename>, dan kan dat
als volgt:
</para>

<screen>
$ <command>chown danieldk logo2.jpg</command>
</screen>

<para>
We kunnen nu met <command>ls</command> zien dat de eigenaar
<emphasis>danieldk</emphasis> is geworden:
</para>

<screen>
$ <command>ls -l logo2.jpg</command> 
-rw-r--r--    1 root     root        9253 Dec 29 11:35 logo2.jpg
$ <command>chown danieldk logo2.jpg</command>
$ <command>ls -l logo2.jpg</command> 
-rw-r--r--    1 danieldk root        9253 Dec 29 11:35 logo2.jpg
</screen>

<para>
Maar de groepspermissies gelden nog steeds voor de groep
<emphasis>root</emphasis>. De groep waarvoor de groepspermissies
gelden is te veranderen door een punt achter de eigenaar te zetten
en daarachter de groep te vermelden waarvoor groepspermissies moeten
gelden (in dit voorbeeld de groep <emphasis>nedslackers</emphasis>):
</para>

<screen>
$ <command>chown danieldk.nedslackers logo2.jpg</command>
$ <command>ls -l logo2.jpg</command>
-rw-r--r--    1 danieldk nedslackers        9253 Dec 29 11:35 logo2.jpg
</screen>

<para>
Natuurlijk is het ook mogelijk in &eacute;&eacute;n keer de rechten
van een directorystructuur te veranderen dit kan met behulp van de
recursive (-R) parameter:
</para>

<screen>
$ <command>chown -R danieldk.users oggs/</command>
</screen>

<bridgehead>chmod</bridgehead>

<para>
Permissies voor bestanden kunnen gewijzigd worden met het
<command>chmod</command>(1) commando. De meest basale syntax
van het chmod commando ziet er als volgt uit:
<command>chmod [u,g,o][+/-][r,w,x] bestandsnaam</command>.
De eerste parameter is dus een samenvoeging van: 1. voor welke
groepen de operatie geldt, 2. of de gespecificeerde permissies
toegekend moeten worden (+) of afgenomen (-) moeten worden en
3. om welke permissies het gaat. Stel je wilt het bestand
<filename>notities</filename> schrijfbaar maken voor de eigenaar
van het bestand en de groep die voor het bestand ingesteld is,
dan voer je het volgende commando uit:
</para>

<screen>
$ <command>chmod ug+w notities</command>
</screen>

<para>
Zoals je hieronder ziet wordt <filename>notities</filename> voor
de eigenaar en de groep schrijfbaar:
</para>

<screen>
$ <command>ls -l notities</command> 
-r--r--r--    1 daniel   users          12 Mar  9 16:28 notities
bash-2.05b$ <command>chmod ug+w notities</command>
bash-2.05b$ <command>ls -l notities</command> 
-rw-rw-r--    1 daniel   users          12 Mar  9 16:28 notities
</screen>

<para>
Net als bij het <command>chown</command> commando is het met de
recursive (-R) parameter mogelijk de rechten voor een directorystructuur
te veranderen. Het volgende voorbeeld maakt de directory
<filename>geheim/</filename> en alle bestanden en directories daaronder
onleesbaar voor de ingestelde groep en andere gebruikers:
</para>

<screen>
$ <command>chmod -R go-r geheim/</command>
</screen>

</sect1>

</chapter>
