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 u 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 kunt u ook andere directories tonen. Dit kunt u 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 kunt u de huidige werkdirectory veranderen:

$ cd /home/danieldk/

Met het pwd commando kunt u zien dat u zich in de opgegeven directory directory bevindt:

$ pwd
/home/danieldk

mkdir

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

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

Het kan voorkomen dat u een directory aan wilt maken waarvan de bovenliggende directory nog niet bestaat. Stel we willen de directory test2/hallo/ aanmaken in de huidige directory, maar de directory test2 bestaat nog niet. Dan kunt u 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 kunt u 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 kunt u 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 u misschien al gezien heeft kunt u 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 u 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/