next up previous contents
Nästa: 1.5 Övningar Upp: 1. Introduktion till UNIX Förra: 1.3 Filer

1.4 Kataloger

Kataloger kan inte bara innehålla filer, utan även andra kataloger som då kallas underkataloger till den givna katalogen. Så här tillverkar man en katalog med namnet dikter:$ mkdir dikter
$ ls
bellman   dikter/   lenngren
$
Att dikter är en katalog markeras i listan ovan med ett snedstreck efter dess namn. (Vanligtvis krävs det att man anropar ls med flaggan -F för att kataloger ska markeras så här. En annan flagga, --color, gör att filer och kataloger markeras genom att deras namn skrivs med olika färger.) Nu är alltså dikter en underkatalog till min hemkatalog. Omvänt är min hemkatalog föräldrakatalog till dikter.

Om man vill få en lista över filerna i en annan katalog än den nuvarande, så ska man helt enkelt ange den önskade katalogens namn som argument till ls.$ ls dikter
$
Än så länge är katalogen dikter tom. Men vi ska nu kopiera filerna bellman och lenngren till den. Kommandot cp kan användas på två sätt; dels för att kopiera en fil till en annan, dels för att kopiera en eller flera filer till en katalog. I det senare fallet anger man destinationskatalogen som sista argument. (På motsvarande sätt kan man använda mv för att flytta filer till en annan katalog.)$ cp bellman lenngren dikter
$ ls -l dikter
total 2
-rw-------   1 göran    göran         372 feb  1 17:12 bellman
-rw-rw-r--   1 göran    göran         649 feb  1 17:12 lenngren
$
Figur [*] ger ett diagram över min hemkatalog och dess nuvarande innehåll.

  
Figur 1.2: Katalogstrukturen i min hemkatalog.
\begin{figure}
\small \psset{angleB=90, angleA=-90, levelsep=36pt, armB=14pt,
...
...\Tr{\psshadowbox{\rule{0pt}{6pt}\texttt{lenngren}}}
}
\end{center}\end{figure}

Man kan radera tomma kataloger med rmdir. Vill man radera en katalog inklusive dess innehåll, så ska man använda rm med flaggan -r.$ mkdir sånger
$ ls
bellman   dikter/   lenngren  sånger/
$ rm sånger
rm: sånger: är en katalog
$ ls
bellman   dikter/   lenngren  sånger/
$ rmdir sånger
$ ls
bellman   dikter/   lenngren
$ mkdir visor
$ cp bellman visor
$ ls visor
bellman
$ rmdir visor
rmdir: visor: Katalog inte tom
$ rm -r visor
$ ls
bellman   dikter/   lenngren
$
Ovan skapade jag först katalogen sånger. Det gick inte att ta bort den med rm, utan jag fick använda kommandot rmdir istället. Därefter skapade jag katalogen visor och kopierade bellman dit. Då gick det inte att ta bort katalogen med rmdir eftersom den inte var tom. Däremot kunde jag radera katalogen och dess innehåll med rm -r.

För att förflytta sig till en annan katalog, det vill säga byta nuvarande katalog, använder man kommandot cd med namnet på den katalog man vill komma till som argument.$ cd dikter
$ ls
bellman   lenngren
$
Nu befinner jag mig i underkatalogen dikter till min hemkatalog. Men om jag vill komma tillbaka dit jag var nyss, hur gör jag då? Ett sätt är att använda en mycket viktig finess, nämligen att namnet .. (två punkter) betecknar föräldrakatalogen till den katalog man befinner sig i.$ cd ..
$ ls
bellman   dikter/   lenngren
$
Nu slår oss tanken att den egna hemkatalogen kanske är underkatalog till en annan! Vi undersöker detta genast:$ cd ..
$ ls
eva/           göran/         lost+found/
$
Ja, så var det. Vi provar samma kommando igen:$ cd ..
$ ls
System.map@  dev/         home/        mnt/         tmp/
bin/         dosc/        initrd/      proc/        usr/
boot/        etc/         lib/         root/        var/
cdrom/       floppy/      lost+found/  sbin/        vmlinuz@
$
Här fanns en massa kataloger. Men vi struntar i det tills vidare, och fortsätter på den inslagna vägen.$ cd ..
$ ls
System.map@  dev/         home/        mnt/         tmp/
bin/         dosc/        initrd/      proc/        usr/
boot/        etc/         lib/         root/        var/
cdrom/       floppy/      lost+found/  sbin/        vmlinuz@
$
Nej, det gick tydligen inte att komma längre. Vi befinner oss i en katalog som inte är underkatalog till någon annan. Nu har vi för övrigt gått vilse, och kan svårligen hitta tillbaka. Lyckligtvis kan vi ta till hjälp att man kommer hem till sin hemkatalog om man ger kommandot cd utan att specificera någon destination.$ cd
$ ls
bellman   dikter/   lenngren
$
Men var någonstans är vi nu? Kommandot pwd (''ange nuvarande katalog'') ger svaret:$ pwd
/home/göran
$
Aha! Om jag i stället för cd gett först kommandot cd home och sedan cd göran, så hade jag också kommit hem. Den katalog jag var i nyss kallas för rotkatalogen, och den har det koncisa namnet /. Min hemkatalog heter göran, detsamma som mitt användarnamn. Den är en underkatalog till home. Och home i sin tur är underkatalog till rotkatalogen. På detta sätt är alla kataloger ordnade i en hierarki med rotkatalogen överst (eller underst, beroende på hur man ser det) i hierarkin. Det är grundläggande för UNIX att det endast finns en sådan hierarki, filsystemet är gjutet i ett stycke (eller åtminstone ser det ut så).

  
Figur: Rotkatalogen och en del av dess innehåll.
\begin{figure}
\small \psset{angleB=90, angleA=-90, levelsep=36pt, armB=14pt,
...
...Tr{\psshadowbox{\rule{0pt}{6pt}\texttt{vmlinuz}}}
}
\end{center}
\end{figure}

Ett alternativt sätt att referera till katalogen dikter är att ange dess absoluta läge i filsystemet, /home/göran/dikter. Man säger att detta är sökvägen till katalogen. Poängen med att ange sökvägen är att man därigenom kan referera till filer eller kataloger som inte finns i just den nuvarande katalogen. Filer har också sökvägar. Sökvägen till filen bellman i min hemkatalog är /home/göran/bellman, medan sökvägen till filen bellman i underkatalogen dikter är /home/göran/dikter/bellman. Trots att dessa filer har samma namn, kan man med hjälp av sökvägar ange vilken av dem man åsyftar.

Så här kan man se vad som finns i katalogen /home/eva:$ ls /home/eva
LPAuppsats/   index.html    paper.dvi     paper.tex~
ekerö.jpg     index.html~   paper.log     post/
idéhistoria/  paper.aux     paper.tex     övrigt/
$
Alternativt kunde jag ha gett kommandot ls ../eva. Detta fungerar om jag befinner mig i min hemkatalog /home/göran, för då står .. för /home. Man säger att ''../eva'' är en relativ referens till katalogen, i motsats till ''/home/eva'' som är en absolut referens.

I detta sammanhang är det kanske lämpligt att påpeka att namnet . (en punkt) betecknar den nuvarande katalogen. Så vi kan använda kommandot cp /bin/bash . om vi skulle vilja kopiera filen bash från katalogen /bin till den nuvarande katalogen.

För att ta reda på hur mycket utrymme en viss katalog (inklusive dess underkataloger) förbrukar, ska man använda kommandot du. Som argument anger man vilken katalog som avses. Om man inte anger flaggan -s, så skrivs också information om underkatalogerna ut.$ du
3       ./dikter
16      .
$ du -s /home/eva
162101  /home/eva
$
Siffrorna i utskriften står för antalet kilobyte. Min hemkatalog, inklusive alla underkataloger, använder alltså 16 kilobyte lagringsutrymme. Jag ska kanske nämna vilka enheter man använder för att beskriva datorminne? En gigabyte är 1024 megabyte. En megabyte är 1024 kilobyte. En kilobyte är 1024 byte. En byte är ett lagringsutrymme i vilket man kan lagra ett tecken som tex en bokstav eller en siffra. (Eller snarare, i en byte lagras ett tal mellan 0 och 255, och detta tal tolkas ofta som ett tecken med hjälp av tabellen på sida [*].) En sida text består av cirka 2000 tecken, ungefär 2 kilobyte. En megabyte motsvarar ungefär 500 sidor text.

I UNIX finns en mer eller mindre standardiserad struktur för hierarkin av kataloger. Till exempel innehåller /bin vissa av de viktigaste programmen (som bash, cp och ls), /sbin innehåller systemprogram, huvuddelen av /usr innehåller användarprogram och filer som de behöver, /home innehåller hemkataloger för de olika användarna, i /etc finns viktiga konfigurationsfiler osv.

Det är en konvention att filer vars namn inleds med en punkt ska döljas, inte för att de är hemliga utan för att man kanske sällan ändrar i dem och vill ha dem ur vägen. Kommandot ls respekterar denna konvention. Om man vill se samtliga filer i den nuvarande katalogen, så ska man anropa ls med flaggan -a.$ ls -a
./             .bash_profile  bellman
../            .bashrc        dikter/
.bash_history  .inputrc       lenngren
$
Jag har alltså fyra ''dolda'' filer i min hemkatalog. Katalogerna . och .. återges som synes också när ls anropas med flaggan -a. Nedan vill vi ha utförlig information om samtliga filer och anropar därför ls med både -l och -a. (I likhet med många andra kommandon tillåter ls att man förkortar exempelvis -l -a till -la.)$ ls -la
total 16
drwxrwxr-x   3 göran    göran        1024 feb  1 17:24 ./
drwxrwsr-x   9 root     staff        1024 nov 23 22:09 ../
-rw-rw-r--   1 göran    göran        6711 feb  1 17:23 .bash_history
-rw-rw-r--   1 göran    göran         235 feb  1 17:23 .bash_profile
-rw-rw-r--   1 göran    göran          81 feb  1 17:23 .bashrc
-rw-rw-r--   1 göran    göran         239 feb  1 17:24 .inputrc
-rw-------   1 göran    göran         372 feb  1 16:48 bellman
drwxrwxr-x   2 göran    göran        1024 feb  1 17:12 dikter/
-rw-rw-r--   1 göran    göran         649 feb  1 15:53 lenngren
$
Samtliga filer och kataloger ägs av göran och är associerade med gruppen göran, med undantag av katalogen .. som ägs av root och hör till gruppen staff.

Motsvarande skyddskoder som för filer används också för kataloger, men tolkningen är något annorlunda. Ett r betyder att man får se namnen på de filer som katalogen innehåller (tex med ls). Ett x betyder att man får gå in i katalogen (tex med cd). Om x inte är påslaget, så kan man överhuvudtaget inte göra något med katalogen (förutom att se vad den innehåller om r är påslaget). Ett w betyder att man får skriva till katalogen (dvs skapa nya filer eller radera filer i katalogen).


next up previous contents
Nästa: 1.5 Övningar Upp: 1. Introduktion till UNIX Förra: 1.3 Filer
Goran Andersson
1999-03-08