Göm menyn

Fil- och modulsystemet

I det här steget går vi igenom lite mer om hur filsystemet i Linux är organiserat. Tänk på det som stod i första delen om Linux. Där pratade vi lite om vad en fil är m.m. Vi visar också hur du kan installera programvaror med modulsystemet. Modulsystemet är ett lokalt system för att administrera de programvaror som finns på IDA.

Det hierarkiska filsystemet

Filsystemet i Unix och Linux är precis som i många andra operativsystem hierarkiskt. Filer ligger i kataloger som i sin tur ligger i andra kataloger. Denna organisation påminner om ett träd, bortsett från att man med rotkatalogen avser den "högsta" delen av katalogträdet.

På en särskild plats i filsystemet finns din hemkatalog. Det är i princip det enda ställe som du får lagra egna filer på. Alla filer och kataloger på IDA ingår i samma filsystem. Det innebär att oavsett vilken dator på IDA som du loggar in på kan du komma åt din hemkatalog. Linux skiljer sig på det här sättet från t.ex. Windows där varje dator har sitt eget filsystem och man måste specificera vad som är åtkomligt för andra datorer i nätverket. (I praktiken finns det två större filsystem på IDA - ett för studenter och ett för anställda.)

Filsystemet i Linux är distribuerat, d.v.s. filerna kan ligga lagrade på vilken dator som helst i nätverket och du kommer åt filerna från alla datorer i nätverket. I praktiken spelar det oftast ingen roll var de finns fysiskt, eftersom du inte omedelbart kan se vilken dator filerna finns på. Din hemkatalog finns lagrad på en särskild filserver medan större delen av operativsystemet av hastighetsskäl finns på den lokala hårddisken.

Det finns ett mer eller mindre standardiserat sätt att organisera de vanligaste katalogerna på i Linux. Som vanlig användare har man oftast inget intresse av kataloger utanför sin hemkatalog, men det kan ändå vara bra att känna till hur helheten ser ut. Rotkatalogen är den översta katalogen i filsystemet och den betecknas med /, d.v.s. ett enkelt snedstreck (eng. slash). Under rotkatalogen finns bland annat följande kataloger:

Katalog Innehåll
/bin I den här katalogen finns de flesta kommandon. Katalogen är egentligen bara en länk till /usr/bin.
/dev Ordet dev är en förkortning för devices och i den här katalogen finns systemets olika enheter representerade som filer. /dev/audio är t.ex. den inbyggda högtalaren.
/etc Här finns inställningar lagrade i olika textfiler. De flesta av dessa har du inte rättigheter till som vanlig användare.
/home Här finns alla användares hemkataloger. Om du har namnet turte123 heter din hemkatalog alltså /home/turte123 (eller kortare ~). Om du försöker lista underkatalogerna i /home ser du knappt någon utom din egen, men de finns där.
/lib I den här katalogen finns olika kodbibliotek (eng. libraries) innehållande vanliga funktioner som andra program kan använda.
/tmp Här lagras temporära filer av olika program.
/usr/bin Här finns de flesta kommandon i praktiken.


Interiör från IDA:s datorhall. Filsystemet finns i serverracket närmast kameran.

Sökvägar

Hur kan det komma sig att alla UNIX-kommandon som ligger i katalogen /usr/bin fungerar oavsett vilken katalog som är aktuell? Detta beror på att det finns sökvägar. Eftersom alla kommandon eller filer som man vill komma åt inte kan ligga i samma katalog, så kan man ange sökvägar. Det innebär att det är i dessa kataloger som systemet letar efter kommandon när man skriver in dem. Du kan kontrollera dina sökvägar med nedanstående exempel:

	
turte123@li10-3:-$ printenv PATH
/usr/local/bin:/bin/:/usr/bin:/usr/games:/opt/thinlinc/bin
	

Ovanstående innebär att omgivningsvariabeln PATH innehåller en lång sträng med olika sökvägar, separerade med kolon (:). Bland dem hittar man bland annat /usr/bin, men även en hel del andra kataloger där det finns kommandon. Din egen sökväg kan variera beroende på vilka moduler du har installerat.

Lägg till egna sökvägar i PATH

Ibland kan man vilja lägga till en egen katalog till sökvägen, t.ex. när man skriver egna skript. Om man ska kunna exekvera skript från sin hemkatalog så måste PATH-variabeln innehålla en referens till hemkatalogen.

Vi kan ändra värdet på PATH genom att skriva export PATH="$PATH:[en ny sökväg]". Vi vill inte förlora sökvägarna som redan finns lagrade i PATH, så vi lägger istället till ett nytt värde efter PATH och sätter PATH till hela det nya värdet.

	
turte123@li10-3:-$ export PATH="$PATH:/home/turte123/"
turte123@li10-3:-$ printenv PATH
/usr/local/bin:/bin/:/usr/bin:/usr/games:/opt/thinlinc/bin:/home/turte123/
	

Vi har lagt till hemkatalogen sist i PATH, så nu kommer användaren turte123 kunna köra skript som finns i sin hemkatalog.

Länkar

Ibland kan man vilja ha samma fil i flera olika kataloger, t.ex. för att anpassa en speciell programvara. Då kan man skapa s.k. länkar. Länkar kan behandlas precis som vilka filer som helst, men är i praktiken bara referenser till andra filer.

Det finns två olika sorters länkar, dels hårda länkar (eng. hard links), dels symboliska länkar (eng. symbolic links). En hård länk innebär att den refererar till samma adress som den ursprungliga filen. På det viset kan man inte skilja en hård länk från en riktig fil; båda refererar till samma sak. Detta innebär också en begränsning i och med att filer utanför det egna filsystemet inte kan refereras med hårda länkar.

En symbolisk länk innehåller bara namnet på filen den refererar till och kan på så vis referera till filer var som helst. Det kan vara på samma dator, någonstans i ett nätverk eller på andra sidan jorden. Fördelen med symboliska länkar är att de behandlas som vanliga filer. Du kan läsa från dem, skriva till dem och även exekvera dem. De innehåller dock ingenting själva utan skickar bara vidare alla kommandon till den verkliga filen. I och med att alla filer kan vara källan för en symbolisk länk kan man lätt referera till kataloger på andra människors datorer.

Länkar skapas med kommandot ln. Om du anger flaggan -s skapas en symbolisk länk, i annat fall en hård.

Som exempel kan vi anta att du har organiserat din hemkatalog med en underkatalog labbar. I den finns underkataloger för varje kurs, t.ex. tdde24. I den katalogen finns vidare underkataloger för varje enskild laboration, t.ex. labb1. Det är lite krångligt att behöva skriva cd labbar/tdde24/labb1 varje gång du ska labba. Därför vill du göra en symbolisk länk till den katalogen som du för närvarande arbetar med. Om du står i din hemkatalog kan du göra det på följande sätt:

	
turte123@li10-3:-$ ln -s labbar/tdde24/labb1 aktuellt
turte123@li10-3:-$ cd aktuellt
turte123@li10-3:-$ pwd
/home/turte123/labbar/tdde24/labb1
	

Som du ser har du inte skapat en ny katalog, utan en länk till en katalog. Genom att köra cd aktuellt förflyttas du direkt till den katalog som länken pekar på.

På samma sätt kan du göra länkar till filer, t.ex. till en gammal version av Emacs:

	
turte123@li10-3:-$ ln -s /sw/emacs-19.34b/bin/emacs
turte123@li10-3:-$ emacs &
	

Med ovanstående kommando har du skapat filen emacs i den aktuella katalogen, som är en länk till programmet Emacs, version 19.34b. Om du inte anger vad länken ska heta får den samma namn som originalfilen.

Ta bort kataloger

Kommandot rm används för att ta bort en eller flera filer, men kan också användas för att ta bort kataloger. För att kunna göra det behöver man dock lägga på flaggan -r.

	
turte123@li10-3:labbar$ mkdir empty
turte123@li10-3:labbar$ rm empty
rm: cannot remove 'empty': Is a directory
turte123@li10-3:labbar$ rm -r empty
rm: remove directory 'empty'? y
	

Flaggan -r kan användas även om katalogen inte är tom. I så fall går rm igenom alla filerna, och även alla underkataloger, en och en.

	
turte123@li10-3:labbar$ ls -l gammalt
total 16
-rw-r--r-- 1 turte123 turte123 3778 Aug 31 08:56 calc.py
-rw-r--r-- 1 turte123 turte123 4890 Aug 31 08:56 lab5.py
turte123@li10-3:labbar$ rm -r gammalt
rm: descend into directory 'gammalt'? y
rm: remove regular file 'gammalt/calc.py'? y
rm: remove regular file 'gammalt/lab5.py'? y
rm: remove directory 'gammalt'? y
	

Om man har en stor mängd filer blir det lätt lite trist att behöva bekräfta dem en och en. Detta beteende beror på flaggan -i som alltid är aktiverad tack vare ett systemalias (se mer om detta i steget Punktfiler). För att slippa ifrån detta kan man, om man är helt säker, istället anropa kommandot direkt genom att skriva /bin/rm. Vill man ta bort en katalog och hela dess innehåll, utan att få några frågor, kan man alltså göra så här:

	
turte123@li10-3:labbar$ /bin/rm -r garbage
	

Vad är modulsystemet?

Eftersom Linux har ett distribuerat filsystem med en unik rotkatalog som är gemensam för alla datorer i systemet, så innebär det i praktiken att alla program finns installerade hela tiden. För att underlätta åtkomsten för dig som användare finns ett modulsystem. Detta innebär att alla inställningar som behövs för att köra ett viss program lagras i en modul. Genom att ladda in modulen för ett program får du tillgång till det. Du laddar in en modul genom att i ett skalfönster skriva:

module add modulnamn

På detta sätt får du tillgång till modulen, men bara i just det skalfönstret och bara för just den här gången. Om du vill att modulen ska vara tillgänglig även nästa gång du loggar in måste du dessutom skriva:

module initadd modulnamn

På detta sätt läggs modulen till i en särskild inställningsfil och kommer laddas in nästa gång du loggar in. När du vill lägga till en ny modul kan du alltså antingen använda dig av module initadd och sedan logga ut och logga in igen, eller använda dig av både module add och module initadd.

För att ta bort en modul som du tidigare har lagt till kan du använda kommandot:

module rm modulnamn

På samma sätt kan man plocka bort en modul så den inte läggs till när man loggar in:

module initrm modulnamn

Viktigt Det är viktigt att du stavar modulens namn rätt när du lägger till den till uppstartfilerna. Om felaktiga modulnamn finns i uppstartfilen kan du få problem att logga in.

Det finns en del andra parametrar för att hantera moduler. För att visa en lista över dessa kan man anropa module utan några parametrar. Även om inte modulsystemet används ofta är det ett smidigt sätt att underhålla många olika programvaror (och till och med flera olika versioner parallellt). Med hjälp av modulerna kan användaren själv välja vilka programvaror hen vill använda. Det är därmed lätt att lägga till och ta bort programvaror, t.ex. inför en ny kurs.

För att få ytterligare hjälp angående modulerna kan man konsultera manualsidorna. Detta gör man enklast genom att skriva man module i en terminal.

För att se vilka moduler som är inladdade skriver man module list. Man kan också se vilka moduler som man laddar in vid uppstart. Detta ser man med kommandot module initlist.

Viktigt Modulinställningarna lagras i filen .modules. Ändra inte direkt i denna filen.

Övning Använd kommandot module list för att se vilka moduler du har inladdade för närvarande.

Några moduler

Du kan få reda på vilka olika moduler som finns genom kommandot module avail och om du vill veta vad en speciell modul innehåller kan du använda kommandot module help modulnamn . Det som modulerna egentligen gör är att manipulera olika sökvägar och du kan se exakt vad en viss modul gör med kommandot module display modulnamn .

Modulerna är indelade i olika grupper och har en egen katalogstruktur. Flera av modulerna finns också i olika versioner. Om du lägger till modulen prog/vscode får du tillgång till Visual Studio Code i den version som är inställd som standard.

Sammanfattning och diagnos

  • Filsystemet i Linux är hierarkiskt och distribuerat.
  • Sökvägar talar om för systemet i vilka kataloger det ska leta efter kommandon när man skriver in dem.
  • Länkar är referenser till andra filer och skapas med kommandot ln.
  • Man kan ta bort filer och katalorger med kommandot rm. Lägg till flaggan -r om katalogen inte är tom.
  • Modulsystemet är ett system för att hantera alla installerade program och underlätta åtkomsten för användaren.

Referenser

Filesystem Hierarchy Standard

Standard för hur filsystemet ska se ut under UNIX (endast för den riktigt intresserade)

Diagnos

När du har läst detta avsnitt är det dags att göra diagnos D7. Fil- och modulsystemet . Gå till kursrummet i Lisam och klicka på Test i vänstermenyn.


Sidansvarig: Peter Dalenius
Senast uppdaterad: 2023-08-21