next up previous contents
Nästa: 1.4 Kataloger Upp: 1. Introduktion till UNIX Förra: 1.2 Att redigera kommandon

1.3 Filer

UNIX lagrar information i filer. En fil kan till exempel innehålla en text, en bild eller ett datorprogram. Filerna i sin tur är inplacerade i kataloger. En katalog är alltså en förvaringsplats för filer. Varje fil och katalog har ett namn, som man använder då man refererar till dem.

Alla användare har en hemkatalog där de egna filerna lagras. Direkt efter inloggningen är hemkatalogen nuvarande katalog, dvs man ''befinner sig'' i sin hemkatalog. Kommandot ls ger en lista över filerna i den nuvarande katalogen.$ ls
lenngren     måltidssång
$
Tydligen har jag två filer i min hemkatalog. Den ena heter lenngren, den andra måltidssång. (Om ls inte skriver ut tecknen åäö korrekt, så kan man ange flaggan -N varje gång ls anropas. Ett alternativ sätt är att ge kommandot export LC_ALL=sv_SE. I kapitel 6 ska vi förklara detta närmare.)

Man kan kopiera filer med kommandot cp. $ cp måltidssång bellman
$ ls
bellman      lenngren     måltidssång
$
Ovan kopierade jag först filen måltidssång och gav kopian namnet bellman. Därefter kontrollerade jag att det gick väl genom att ge kommandot ls. Utskriften visar att det verkligen finns en ny fil med namnet bellman.

Om man anropar ls med flaggan -l, så ges utförligare information om filerna. Bland annat kan man utläsa hur stora filerna är och när deras innehåll senast ändrades.$ ls -l
total 3
-rw-rw-r--   1 göran    göran         372 feb  1 16:48 bellman
-rw-rw-r--   1 göran    göran         649 feb  1 15:53 lenngren
-rw-rw-r--   1 göran    göran         372 feb  1 15:47 måltidssång
$
Filerna bellman och måltidssång innehåller vardera 372 tecken, lenngren innehåller 649 tecken. Det är klart att bellman och måltidssång är lika stora eftersom bellman är en kopia av måltidssång. Senast filen bellman ändrades var den 1 februari, klockan 16.48. Raden med texten total 3 anger hur mycket lagringsutrymme filerna i katalogen förbrukar. Vad de övriga delarna av utskriften ovan betyder ska vi snart berätta.

Man kan byta namn på filer med kommandot mv.$ mv måltidssång epistel21
$ ls
bellman    epistel21  lenngren
$
Som synes har nu måltidssång bytt namn till epistel21.

Kommandot för att radera en fil är rm.$ rm epistel21
$ ls
bellman   lenngren
$
Kontrollen med ls visar att filen epistel21 nu är borta. Du är kanske van vid att få en varning om att filen kommer att försvinna och ett krav på bekräftelse vid raderingskommandon? Så är det inte här. UNIX gör vanligtvis vad man säger utan att ställa några frågor, även om konsekvenserna kan vara ödesdigra. Observera också att det inte finns något sätt att få tillbaka en fil som raderats! Därför är det nödvändigt att man har säkerhetskopior av alla viktiga filer. En av systemadministratörens viktigaste arbetsuppgifter är att regelbundet, lämpligen dagligen, göra en säkerhetskopia av samtliga användares filer. Om en användare av misstag råkar radera en fil, så kan systemadministratören återställa filen till det skick den var i föregående dag. Bara de ändringar som gjorts det senaste dygnet går då förlorade. På detta sätt minskas risken för katastrofer betydligt.

Det ska nämnas att om man anger flaggan -i till rm, så ställs frågan om bekräftelse:$ rm -i bellman
rm: ta bort "bellman"? n
$ ls
bellman   lenngren
$
Om vi hade tryckt j i stället för n, så hade bellman oåterkalleligen raderats. Man kan, om man så önskar, ställa in det så att rm alltid frågar innan någon fil raderas. Men då är risken stor att man efter ett tag får som vana att mekaniskt trycka j vid varje sådan fråga, och då ger frågan inte längre något skydd.

För att skriva ut innehållet i en fil ordagrant kan man använda cat.$ cat bellman
Så lunka vi så småningom
från Bacchi buller och tumult,
när döden ropar: Granne, kom,
     ditt timglas är nu fullt.
Du gubbe, fäll din krycka ner,
och du, du yngling, lyd min lag:
den skönsta nymf, som åt dig ler,
     inunder armen tag.
Tycker du, att graven är för djup,
nå välan, så tag dig då en sup,
tag dig se'n dito en, dito två, dito tre,
     så dör du nöjdare.
$

Kommandot wc räknar antal rader, ord och tecken i en given fil.$ wc bellman
     12      71     372 bellman
$
Utskriften från wc betyder att bellman innehåller tolv rader, 71 ord och 372 tecken (varje radslut räknas som ett tecken).

Om man vill studera en fil som innehåller för många rader för att de ska få plats på skärmen samtidigt, så är cat inte ett idealiskt kommando. Istället kan man använda more.$ more lenngren
Vår prost jag häromdagen såg
en morgon, då han ännu låg
matt utstäckt mellan tvenne lakan.
Hans kinder hade rosens färg,
hans runda armar hull och märg,
och magen, kullrig som ett berg,
sig hävde upp mot isterhakan.
Vid sängen stod ett bord, där denne andans man
sin frukost redan färdig fann
av smör och kycklingar, så läcker och så härlig.
Hans vördighet grep saken an
-More-(57%)
När skärmen fyllts med text, stannar more upp och skriver texten -More-(57%) nederst på skärmen. För att få se mer av filen kan man då trycka på mellanslagstangenten. (Kan du gissa varför kommandot more heter som det gör?) Om man i stället trycker på b, så går more bakåt i filen. Tryck på q för att avsluta, h för hjälp. Man kan göra mycket mer med more, något vi återkommer till senare. Många föredrar att använda kommandot less, som är en mer avancerad version av more.

Kommandona head och tail skriver ut början respektive slutet av en given fil. Så här får man se de sista tio raderna i filen lenngren:$ tail lenngren
av smör och kycklingar, så läcker och så härlig.
Hans vördighet grep saken an
och fann likören rätt begärlig.
Sen han nu visat mycken nit
med klunk för klunk och bit för bit,
han åter sänkte sig på mjuka huvudgärden
och ropte: Store Gud, vad är vårt usla liv?
En ständig kamp mot synd och flärden.
O, Herre, mig Thin styrko giv
i thenna mödosamma världen!
$
Om tio rader är för lite eller för mycket, så kan detta ändras med hjälp av en flagga. De första fyra raderna av filen bellman skrivs ut så här:$ head -4 bellman
Så lunka vi så småningom
från Bacchi buller och tumult,
när döden ropar: Granne, kom,
     ditt timglas är nu fullt.
$

I UNIX tillåts vanligtvis inte att filnamn är längre än 256 tecken. Man brukar oftast använda filnamn som enbart består av små bokstäver, men om man vill så kan man använda mycket udda namn på sina filer.$ cp bellman 2+3
$ ls
2+3       bellman   lenngren
$ rm 2+3
$
UNIX skiljer på stora och små bokstäver; bellman och Bellman betraktas som vitt skilda filnamn.

Varje fil har en ägare. Ägaren till en fil avgör vem som får göra vad med filen. Det finns tre slags rättigheter som är förknippade med varje fil: rätten att läsa den (ta del av dess innehåll), rätten att skriva till den (ändra dess innehåll) samt rätten att exekvera filen (att köra den som ett program). Som ägare till en fil kan man sätta upp det så att man själv har rätt att göra mer med filen än andra. I synnerhet brukar man se till att man själv får ändra i filen, men ingen annan. Om filen innehåller känslig information (som till exempel ens kärleksbrev), så brukar man se till att andra inte ens får läsa filen. Förutom att varje fil har en ägare, så är också varje fil associerad med en grupp. Vad grupper är till för behöver vi inte tänka på just nu, utan det beskrivs i stället i avsnitt 7.1.

Det är inte möjligt att specificera exakt för varje möjlig användare vad de får och inte får göra med en viss fil. Man kan inte säga att eva får göra si och olle får göra så. I stället bestämmer man rättigheterna för tre kategorier av användare: för det första filens ägare, för det andra de resterande medlemmarna i den grupp filen är associerad med och för det tredje alla övriga. För att ta reda på vilka rättigheter som gäller använder man flaggan -l vid anrop av ls för att få utförlig information.$ ls -l
total 2
-rw-rw-r--   1 göran    göran         372 feb  1 16:48 bellman
-rw-rw-r--   1 göran    göran         649 feb  1 15:53 lenngren
$
Före den siffra (372 respektive 649) som talar om hur stor filen är, står det vem som äger filen och vilken grupp filen är associerad med. För filerna ovan heter såväl ägaren som gruppen göran. Betrakta nu den rad som beskriver filen bellman. Att det första tecknet är - visar att det rör sig om en vanlig fil (för kataloger står det i stället d på motsvarande plats, se nästa avsnitt). De följande tre tecknen rw- avgör vad filens ägare får göra med den. Tecknet r anger att ägaren får läsa den; tecknet w att ägaren får skriva över den och tecknet -, eller snarare frånvaron av ett x, att ägaren inte får exekvera den. Därefter kommer tre tecken, rw-, som avgör rättigheterna för de resterande medlemmarna i gruppen göran (i just detta fall finns dock inga andra gruppmedlemmar). De sista tre tecknen, r--, anger att övriga användare får läsa filen, men varken ändra i den eller exekvera den. Siffran efter skyddskoderna anger hur många hårda länkar det finns till filen, se avsnitt [*].

Kommandot för att ändra skyddskoder heter chmod. Om man vill att ägaren till filen fil ska ha skyddskoden rw- ger man kommandot chmod u=rw fil. Om man vill att gruppen ska ha skyddskoden r-- blir kommandot chmod g=r fil. Kommandot chmod o= fil ger ''övriga'' skyddskoden ---. Man kan göra allt detta med ett enda kommando om man vill:$ chmod u=rw,g=r,o= bellman
$ ls -l bellman
-rw-r-----   1 göran    göran         372 feb  1 16:48 bellman
$

Det finns också konstruktioner som o+rx för att ''övrigas'' rättigheter ska utökas med läs- och exekveringsrättighet, och ug-r för att ta bort läsrättigheten för ägaren och gruppen. I stället för ugo kan man skriva a.$ chmod a-r bellman
$ ls -l bellman
--w-------   1 göran    göran         372 feb  1 16:48 bellman
$ cat bellman
cat: bellman: Åtkomst nekas
$ chmod u+r bellman
$ ls -l bellman
-rw-------   1 göran    göran         372 feb  1 16:48 bellman
$


next up previous contents
Nästa: 1.4 Kataloger Upp: 1. Introduktion till UNIX Förra: 1.2 Att redigera kommandon
Goran Andersson
1999-03-08