Hoofdstuk 8. Files en directories

Inhoudsopgave
8.1. De basis
8.2. Permissies

8.1. De basis

pwd

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

$ pwd
/home/danieldk

ls

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

$ ls
slackware-beginselen  slackware-beginselen-20december2002.tar.gz

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

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

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 ls de "-l" parameter:

$ ls -l
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

cd

Een ander onmisbaar commando is het cd. Met cd kun je de huidige werkdirectory veranderen:

$ cd /home/danieldk/

Met het pwd commando kun je zien dat je in de opgegeven directory directory staat:

$ pwd
/home/danieldk

mkdir

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

$ pwd
/home/danieldk
$ mkdir test
$ cd test
$ pwd
/home/danieldk/test

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

$ mkdir -p test2/hallo

rm

rm(1) kan gebruikt worden om zowel files als directories te wissen. Laten we eerst eens naar een eenvoudig voorbeeld kijken:

$ rm hello.c

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

$ rm -f *

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. rm heeft hiervoor de '-r' parameter. Stel dat we de directory ogle met alle subdirectories willen verwijderen zonder hier bevestiging voor te geven. Dit kun je met het volgende commando doen:

$ rm -r -f ogle/

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:

$ rm -rf ogle/

8.2. Permissies

Een korte inleiding

In Linux heeft elk bestand zogenaamde permissies. Zoals je misschien al gezien hebt kun je de permissies van een bestand met het ls -l commando zien:

$ ls -l logo.jpg
-rw-r--r--    1 danieldk users        9253 Dec 23 19:12 logo.jpg

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ë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.

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

chown

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

$ chown danieldk logo2.jpg

We kunnen nu met ls zien dat de eigenaar danieldk is geworden:

$ ls -l logo2.jpg 
-rw-r--r--    1 root     root        9253 Dec 29 11:35 logo2.jpg
$ chown danieldk logo2.jpg
$ ls -l logo2.jpg 
-rw-r--r--    1 danieldk root        9253 Dec 29 11:35 logo2.jpg

Maar de groepspermissies gelden nog steeds voor de groep root. 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 nedslackers):

$ chown danieldk.nedslackers logo2.jpg
$ ls -l logo2.jpg
-rw-r--r--    1 danieldk nedslackers        9253 Dec 29 11:35 logo2.jpg

Natuurlijk is het ook mogelijk in één keer de rechten van een directorystructuur te veranderen dit kan met behulp van de recursive (-R) parameter:

$ chown -R danieldk.users oggs/

chmod

Permissies voor bestanden kunnen gewijzigd worden met het chmod(1) commando. De meest basale syntax van het chmod commando ziet er als volgt uit: chmod [u,g,o][+/-][r,w,x] bestandsnaam. De eerste parameter is dus een samenvoegsel 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 notities schrijfbaar maken voor de eigenaar van het bestand en de groep die voor het bestand ingesteld is, dan voer je het volgende commando uit:

$ chmod ug+w notities

Zoals je hieronder ziet wordt notities voor de eigenaar en de groep schrijfbaar:

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

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

$ chmod -R go-r geheim/