Hopp til innhold

Boken Om Linux/Kapittel 7

Fra Wikibøker – frie læremidler

7: Kataloger og filsystemer

[rediger]

I dette kapitlet går jeg gjennom begrepene kataloger og filsystemer. Jeg ser også på hvordan Linux-filsystemet er bygd opp, og hva du finner i de forskjellige katalogene. I siste del av kapitlet tar jeg opp hvordan du navigerer i katalogstrukturen, samt hvordan du oppretter og fjerner kataloger.

Kataloger og filsystemer

   En fil er en samling av data. En slik samling har et filnavn. En katalog kan bestå av en liste filer og en liste over kataloger. En katalog blir av operativsystemet tolket som en fil, men uprivilegerte (dvs. programmet må ha bestemte rettigheter) programmer kan ikke skrive i den. Et filnavn blir spesifisert med et banenavn, for eksempel /home/david/perl-test. Søkebanen her er først root-filsystemet, så katalogene, home og david. Hvis søkebanen ikke innledes med / , vil systemet begynne å lete fra den katalogen brukeren står i (arbeidskatalogen). Hver katalog har minst to adresser sett fra et terminalvindu:
       . peker til arbeidskatalogen
       .. peker til arbeidskatalogens moderkatalog 

Filsystemet i Linux består av filer og kataloger, foruten nødvendig informasjon for å lokalisere og få tilgang til dem. Hvert filsystem er en selvstendig enhet. Kataloger behandles nøyaktig som andre filer, med ett unntak: Linux tillater ikke at du skriver direkte til kataloger. I katalogene finner du filnavnene. Hvert oppslag i katalogen består av to deler:

  * et filnavn på opptil 256 tegn (variabelt)
   * en peker som man kaller link 

Linken peker på inoden (informasjonsnoden), som holder på informasjon om filen for operativsystemet. Inoden har all informasjon om en fil, som lengde, opprettelsesdato, eierforhold, peker til første datablokk osv. Selve filen eksisterer derfor ikke fysisk i en katalog. Katalogoppslaget består bare av navnet på filen og en peker. Når Linux prøver å åpne en fil, finner den først filens inodenummer i den katalogen hvor filnavnet står. Deretter leser den inoden for å avgjøre filtype og tilgangsrettigheter. Er filen en standardfil eller en katalog, blir peker til første datablokkpeker brukt til å finne hvor innholdet i filen begynner.

Inoder

[rediger]

Alle filer har bare én inode. Det finnes ikke noe fast en-til-en forhold mellom filnavn og fysiske datafiler. To eller flere kataloger kan ha filnavn som peker til samme fil. Når du har en fysisk fil med flere navn, sier man at filnavnene er linket sammen (se også om ln-kommandoen i kapittel 6). Linux støtter også symbolsk linking, dermed kan du krysse filsystemer og linke kataloger. En symbolsk link får sin egen inode med tilhørende inodenummer. Når du bruker rm, blir ikke filen (og inoden) fjernet før du fjerner den siste referansen til filen. Inoder er Linux-systemets beskrivelse av filer, mens katalog-oppslag gjør at brukeren kan referere til en fysisk fil med et navn. Inodesystemet gjør at Linux-systemet kan lokalisere datablokkene meget raskt. I ytterligere detalj inneholder en inode blant annet følgende:

      * inodenummerfilens lengde
      * når filen ble laget
      * siste gang filen ble gitt tilgang til
      * siste gang filen ble endret
      * siste gang inoden ble endret
      * eier og gruppestørrelsetilgangsattributter
      * direkte pekere til datablokker
      * indirekte pekere til datablokker
      * dobbelt indirekte pekere til datablokker
      * trippelt indirekte pekere til datablokker 

Bruker du forskjellige opsjoner til ls-kommandoen, får du nesten all inodeinformasjon. Opsjonen -i gir deg for eksempel inodenummeret til de forskjellige filene.

Det fysiske filsystemet

[rediger]

Linux håndterer alle filer i blokker på 1 kB (noen Unix systemer har 512 byte, 1 kB, 2 kB, 4 kB eller 8 kB blokker) som nummereres fra 0, 1, 2, osv. Første blokk på disken er bootblokken (GRUB(2) eller (E)LILO), også kalt primærblokken.

Superblokk

[rediger]

Den andre blokken på disken er filsystemets superblokk. Her finner jeg størrelsen på filsystemet i antall blokker, fsize, som gir oss antall blokker som er reservert for inoder, og isize, som peker på første ledige blokk. Superblokken inneholder i tillegg generell statusinformasjon, som antall inoder i systemet, antall ledige inoder og datablokker osv. All statusinformasjon blir hentet fra superblokken. Superblokken blir oppdatert på harddisk ca. hvert 30. sekund.

Blokkene fra 2+isize til fsize er reservert for lagring av data. De ledige datablokkene blir kjedet sammen og danner en friliste.

Figur 7.1: Fysisk organisering av Linux-filsystemet Isize er en peker som viser til begynnelsen av listen over ledige blokker. Blokkene fra isize+2 til fsize er reservert for lagring av data.

Paging

[rediger]

Den gjenværende plassen på det fysiske filsystemet blir brukt til lagerutveksling (swapping/paging). Paging og swapping er beskrevet i kapittel 2 og 3.

Fil:Paginglinux.png

Figur 7.2: Linux-filsystemet

Indirekte adressering

[rediger]

Inoder har bare et begrenset antall blokkpekere, avhengig av størrelsen på filen. Er filen stor, bruker inoden tre pekere til indirekte blokker.

Maksimal filstørrelse

[rediger]

En inode kan maksimalt adressere 10 datablokker à 1 kB (noen systemer 2, 4 eller 8 kB, eller 512 byte). Hvis filen er større, bruker inoden tre pekere til indirekte blokker som hver inneholder 256 pekere til datablokker. Den maksimale filstørrelsen under Linux blir dermed:

1024 byte * (10+256+256**2+256**3)=17 247 250 432 byte

Dette gjelder når diskblokkene blir allokert i en fast størrelse på 1024 byte. Er diskblokkene à 4 kB, blir maksimal filstørrelse 68 GB. Er diskblokkene à 8 kB, blir den maksimale filstørrelsen 136 GB.

Linux-filsystemet Ext4 med 1 kB blokker er begrenset til en maksimal størrelse på 16 TB. Enkeltfiler under filsystemet Ext3 er begrenset til maksimalt 16 GB. Med versjon 2.6 av Linux-kjernen støttes i dag 16 TB med blant annet filsystemene ext3 (jfs.ext3) og reiserfs (standard filsystemet i SuSE). Filsystemet Ext2 kom i 1992 (Linux 0.96c). Dette er et solid filsystem med gode reperasjonsverktøy (e2fsck) men analyse/reperasjon av "urene" filsystemer tar lang tid. Ext3 filsystemet er basert på det stabile ext2-filsystemet og er journal basert. Man kan oppgradere fra ext2 (tune2fs -j). Ext3 har tre modes : journal = maksimal sikkerhet. Journal på data og metadata. Ordered = journal for kun metadata + data og metadata integritet (default) og writeback = best ytelse, men kun metadata journal.

Kjører du et Linux-filsystem med 1 kB blokker, bør du aldri ha flere enn 286 filer i en katalog. Har du under 30 filer, blir disksøk effektivt fordi forbruket bare blir én diskblokk.

Forskjellige filsystemer

[rediger]

Hvert Linux-system har minst ett filsystem på den første harddisken. Dette filsystemet, som blir kalt root-filsystemet, er representert med symbolet /. Root-filsystemet består av programmer og kataloger som tilsammen utgjør operativsystemet.

Figur 7.3: Mountering av filsystemet gnome

Det er mulig å ha opptil 16 filsystemer på en fysisk harddisk (gjelder PC-arkitektur). De mest benyttede navnene på filsystemene er /home, /usr, /bin, /var, /usr2 osv.

I mange tilfeller kan vedlikeholdet for deg som systemadministrator (root) bli enklere med flere filsystemer. Har du for eksempel et eget filsystem for brukere (/home), blir det enklere å ta sikkerhetskopier ved montering og avmontering. Har du ledig harddisk-kapasitet (med et filsystem), kan du montere et nytt filsystem med mount-kommandoen. Linux df-kommandoen gir deg oversikt over filsystemene. Figuren under viser deg filsystemadministrasjon fra GNOME med usermount (root@nittedal /root # usermount &).

eller:

Figur 7.3: Administrasjon av filsystemer fra usermount Linux støtter forskjellige filsystemer, de viktigste er:

       Linux-baserte
       * ext2\3 Eldre filsystemer som ikke lengere brukes så mye.
       * ext4 (standard filsystemet i Fedora og Red Hat)
       * Ext3cow
       * Btrfs (B-tree file system) Opensuse filsystem
       * reiserfs (standard filsystemet i SuSE)
       * jfs.ext3xfs (brukes også på Unix-baserte systemer)
       Andre
       * FATFAT32NTFS (bare lesing)
       * HFSISO 9660
       * Next3
       * ZFS (Ubuntu filsystem fra 16.04) 

Andre (Windows):

   * NTFS-3G
   * exfat-utils 

OSX:

   * hfsprogs 

Figur 7.4: Størrelsen på filsystemene

Standard filsystem som brukes av Fedora Linux er ext4. Ext4-filsystemet er nedoverkompatibelt med ext3-filsystemet. Den største forskjellen mellom disse to filsystemene er at ext4-filsystemet er journalførende. Linux rydder opp i et journalbasert filsystem som ext4 på noen sekunder, mens oppryddingen av et ext2basert (e2fsck) filsystem kan ta lang tid. Glemmer du å ta ned din Linux-maskin på normal måte vil filsystemet med forskjellige pekere bli feil. Har du et journal basert filsystemet går opprydningen alltid mye raskere.

Den interne strukturen av Linux- og Unix-filsystemet er noe forskjellig. Et av de mest brukte filsystemene for Unix-operativsystem er AFS, som er raskere enn ext3 og reiserfs som brukes av Linux. AFS støttes av SCO UnixWare. Solaris 2.x fra Sun benytter filsystemet UFS som standard.

Katalogstrukturen i filsystemet

[rediger]

Linux bruker et hierarkisk filsystem (fil-tre) for organisering av sine egne systemfiler. I hver enkel katalog lagres de forskjellige komponentene av Linux-systemet. Linux-kjernen (kernel) er alltid lagret under katalogen boot og kjerne-navnet begynner som regel på vmlinuz-xxxx, for eksempel vmlinuz-4.2.2-2. Hver bruker har sitt eget brukerområde hvor alle brukerfilene og katalogene er lagret. Disse brukerkatalogene er som regel satt opp som kataloger under /home, /home1, /usr osv. Ofte er disse katalogene egne filsystemer. For eksempel hører Davids filer til i /home/david eller /usr/david og Vigdis' filer hører hjemme i /home/vigdis eller /usr/vigdis. Som sagt - en katalog kan inneholde én eller flere underkataloger eller filer. Fra root finner jeg følgende systemkataloger: /home -Linux-brukerens hjemmekataloger /bin -Linux-kommandoer /dev -drivere (device-drivere) /etc -administrasjon-katalog

/boot/efi -UEFI boot katalogen

/lib -biblioteker brukt av Linux-operativsystemet /mnt -mount-katalog (mer om dette senere) /procs -består av virtuelle filer (Linux-kjernen) /sbin -systemprogrammer som kjøres ved boot /usr -brukerrutiner og brukerområde /tmp -bare midlertidige filer

Alle disse katalogene er nødvendige for systemet. Katalog og filstruktur standarden for Linux er definert på adressen: http://www.pathname.com/fhs/

Figur 7.5: Kataloger (filsystemer) sett fra Dolphi i fedora.

Figur 7.6: Kataloger (filsystemer) sett fra terminal ved hjelp av ls kommandoen

/bin‑katalogen

I denne katalogen finner du systemkommandoer. Det kan være Linux-kommandoer og Linux-batch-rutiner. Eksempler på programmer du finner her er: basename echo passwd su cp expr rm sync date fsck sh tar dump login sleep restore

/dev-katalogen

/dev-katalogen inneholder systemfiler for styring av harddisker, diskettstasjoner, båndstasjoner, skjermer osv. De fleste filene i denne katalogen brukes og må derfor ikke fjernes. Under /dev finner du egne underkataloger for bestemte enheter, for eksempel båndstasjoner, harddisker etc.

/etc-katalogen

/etc-katalogen inneholder administrasjonsfiler og tabeller for systemadministrator. Ingen filer i denne katalogen kan fjernes.

/boot/efi-katalogen

/boot/efi-katalogen innholder oppstartpartisjonen for UEFI\EFI systemet.

/lib-katalogen

I lib-katalogen finner du biblioteksfilene for forskjellige programmeringsspråk, for eksempel GNU C, C++, FORTRAN osv.

/mnt-katalogen

mnt-katalogen er en tom katalog som er reservert for tilkobling (montering) av eksterne filsystemer (NFS=Network File System) som senere kan frakobles. 

/tmp-katalogen

I /tmp-katalogen lagres bare midlertidige filer, det vil si filer som har en kort levetid. Levetiden tilsvarer som regel levetiden til det programmet filen hører til. Stoppes programmet på en unaturlig måte, kan midlertidige filer fortsatt eksistere. Midlertidige filer kan fjernes hvis de ikke tilhører et program som kjøres. Vanligvis tømmes denne katalogen når du starter Linux.

/procs-katalogen

/procs er et virtuelt filsystem som består av virtuelle filer. Disse filene gir deg status på din Linux-kjernen i øyeblikket. Filsystemet blir automatisk montert opp når du slår på maskinen. I /etc/fstab vil følgende være definert:

none /proc proc defaults 0 0 Du finner ut mer om filsystemet ved å bare liste dataene i /proc. For systemadministrator er /proc en enkel metode for å finne status på individuelle prosesser, interrupts, meminfo, monteringer og partisjoner. Du vil finne at strukturen i /proc er logisk presentert for eksempel alt rundt ide (ide-kontroller) er plassert i katalogen /proc/ide. Mer om /proc finner du i kapittel 21.

/usr-katalogen

I usr-katalogen finner du katalogene til brukerne i systemet og flere andre kataloger og brukerkommandoer. Viktige underkataloger er blant annet:

Katalog Beskrivelse
/usr/X11 Linux X-Windows
/usr/iP5-linux Linux-biblioteker
/usr/docs Linux-dokumentasjon
/usr/share/docs Linux-dokumentasjon
/usr/man Linux-man-sidene
/usr/games Linux-spill
  • Linux-filtyper
Katalog Beskrivelse
.Z Komprimert tfil
.tar Arkivert fil (tar-format)
.gz Komprimert (gzippet)fil
.tgz Tar- og gzippet-fil
.bz2 Pakket med bzip2 (buzip2)
.txt Ren tekstfil
.html/htm HTML-fil
.ps PostScript-fil.au
.au Lydfil
.wav Lydfil ofte brukt i spill
.xpm Grafikkfil
.jpg Grafikkfil\Bildefil som er komprimert
.gif Grafikkfil
.png Bildefil ofte brukt på internett
.rpm Fedora/SuSE pakkefil
.conf Konfigurasjonsfil
.a Arkivfil
.lock Låsfil
.h C- eller C++-headerfil
.c C-kildekodefil
.cpp C++- kildekodefil
.o Objektfil.pl
.pl Perl-skriptfil

Arbeidskatalog pwd

[rediger]

Hvilken katalog du jobber i, finner du ut med pwd-kommandoen. Denne kommandoen viser oss det fullstendige banenavnet, fra root og ned i katalogstrukturen.

Kommandoen pwd arbeidskatalog
Kommando: pwd
Funksjon: Viser fullstendig banenavn
Argumenter: Ingen
Opsjoner: Ingen

Eksempler:

   [david@nittedal david]$ pwd
   /home/david Her er plasseringen i hjemmekatalogen /home/david.
   [david@nittedal david]$ pwd
   /u/hansen Her er plasseringen i hjemmekatalogen /u/hansen. 

[david@nittedal david]$ pwd

   /usr/spool/lp/interface 

Her er plasseringen i katalogen /usr/spool/lp/interface.

Se også: cd, mkdir, rmdir, Linux-dos

Figur 7.7: Eksempel på bruk av pwd-kommandoen

Skifte katalog – cd

[rediger]

Ved hjelp av Linux-kommandoen cd (change directory) kan du flytte mellom hjemmekatalogen og andre kataloger. (Forutsetter at du ikke er satt opp i versjoner av Linux med høy sikkerhet med Restricted skall, B1/B2 eller A1/A2 )

Kommandoen cd endre arbeidskatalog
Kommando: cd [katalog]
Funksjon: Endre arbeidskatalog
Argumenter: Banenavn/arbeidskatalog
Opsjoner: Ingen


Skriver du cd uten noen argumenter, kommer du automatisk til ditt hjemmeområde, for eksempel /home/david.

   cd /katalog1 -flytter til katalog1 

cd .. -flytter én katalog (node) opp cd ../../ -flytter to kataloger (noder) opp cd / -flytter til topp-nivå (root), uansett hvor du er cd ~/brev -går til underkatalogen brev under din hjemmekatalog cd ../katalog2 -går én node opp og derfra ned til katalog2 Eksempler:

[david@nittedal david]$ cd / Flytter deg opp i root, dvs. på toppen av fil-treet. Prøv her med pwd for å få en bekreftelse på at du er i root. Kommandoen ls -la vil her gi en oversikt over filer og kataloger i root.

[david@nittedal david]$ cd ../david Går ett hakk lenger opp og derfra ned til david.

[david@nittedal david]$ cd ../../etc Går to hakk opp og derfra ned til /etc. Det hadde vært lettere å skrive

[david@nittedal david]$ cd /etc I neste eksempel er plasseringen i katalogen /usr/david:

[david@nittedal david]$ cd wp Flytter ned i katalogen /home/david/wp. Alternativet er å skrive med full syntaks:

[david@nittedal david]$ cd /home/david/wp Ønsker du å flytte fra /home/david/wp/txt til nabokatalogen data, skriver du:

[david@nittedal david]$ cd ../data Skal du gå to katalognivåer opp til /home/david, skriver du:

[david@nittedal david]$ cd ../../ Du kan også skrive cd uten noe argument. Dette bringer deg alltid til hjemmekatalogen din ($HOME). Se også: pwd, mkdir, rmdir

Lage katalog – mkdir

[rediger]

Hver gang du logger deg inn på en Linux-maskin, vil du havne på ditt brukerområde. Det betyr at du vil stå i din hjemmekatalog, for eksempel /home/david eller /usr/david. Din hjemmekatalog er der hvor mesteparten av ditt arbeid vil bli gjort. Fra hjemmekatalogen og dens underkataloger kan du bruke mkdir til å lage underkataloger.

Kommandoen mkdir lage katalog
Kommando: mkdir [argument] ...
Funksjon: Lager en katalog
Argumenter: Katalognavn
Opsjoner: Se også Linux-man-sidene.

Jeg (/home/david) ønsker å opprette fire kataloger: wp, linux, c og bin. Ved hjelp av kommandoen mkdir (make directory) kan jeg opprette kataloger og dermed bygge opp min egen trestruktur. Opprettelsen av katalogene kan gjøres på følgende måte:

[david@nittedal david]$ mkdir wp Her opprettes katalogen wp. De andre katalogene kan opprettes på samme måte som jeg opprettet katalogen wp.

[david@nittedal david]$ mkdir linux

[david@nittedal david]$ mkdir c

[david@nittedal david]$ mkdir bin Kataloger kan alternativt opprettes med fullt veinavn (syntaks):

[david@nittedal david]$ mkdir /home/david/wp Det er bare nødvendig å bruke full syntaks hvis du ikke står i katalogen der du ønsker å opprette de nye katalogene. NB! Ønsker du å opprette en katalog, må du alltid ha skrivetillatelse fra den katalogen du skal opprette en ny katalog under. Se også: rmdir, umask

Fjerne katalog – rmdir

[rediger]

Å slette tomme kataloger er like lett som å slette en fil. Skal du slette en katalog, stilles det følgende krav:

  • Katalogen må være tom for filer.
  • Katalogen må være tom for underkataloger.
  • Du kan ikke stå i den katalogen du skal slette.
Kommandoen rmdir fjerne katalog
Kommando: rmdir [argument] ...
Funksjon: Fjerner katalog
Argumenter: Katalognavn
Opsjoner: Se også Linux-man-sidene.

Eksempler: For å fjerne katalogen /home/david/corel/wp skriver du:

[david@nittedal david]$ rmdir wp Hvis du ikke er plassert på moderkatalogen til wp, skriver du:

[david@nittedal david]$ rmdir /home/david/corel/wp Se også: mkdir, rm

Ledig plass per filsystem – df

[rediger]

Ved hjelp av Linux-kommandoen df kan du få en oversikt over hvilke filsystemer du har og hvor mye ledige plass det er per filsystem. Hvilke filsystemer du har, kan du også få fra GNOME- eller KDE-grensesnittet. Du kan bruke “User Mount Tool" (usermount). Med disse verktøyene kan du også montere (mount) og avmontere (umount) filsystemene.

Kommandoen df ledig plass per filsystem
Kommando: df [-a] [-i] [-k]
Funksjon: Gir deg informasjon om hvilke filsystemer som er montert opp og hvor mye plass som er ledig.
Argumenter: Se også Linux-man-sidene
Opsjoner: Se også Linux-man-sidene
-a Viser alle filsystemer selv om de bare er på 0 blokker
-i Viser forbruk inoder
-k Viser forbruk i kilobytes (Kb)

Skriver du df uten noen opsjoner, får du opp alle monterte filsystemer. Du får informasjon om størrelsen på filsystemene i Kb blokker, forbruk i Kb blokker, ledig i Kb blokker, forbruk i % og hvor filsystemet er montert. Eksempel: [elboth@elboth elboth]$ df

Figur 7.8: Eksempel på bruk av df-kommandoen

Oppgaver til kapittel 7

[rediger]

Oppgave 7.1 Hva er en inode?

Oppgave 7.2 Hva gjør superblokken?

Oppgave 7.3 Gi en beskrivelse av hvordan Linux-filsystemet er bygd opp på en Linux-maskin.

Oppgave 7.4 Hva betyr indirekte adressering?

Oppgave 7.5 Hvor stor fil kan du ha på et Linux-system?

Oppgave 7.6 Hva er forskjellen mellom filsystemene ext4 og ext2?

Oppgave 7.7 Hvor mange filsystemer (partisjoner) kan du ha på en og samme harddisk (PC-arkitektur)?

Oppgave 7.8 Hvor er Linux-kjernen plassert og hva begynner alltid kjernenavnet med?

Oppgave 7.9 Er det noe forskjell mellom Linux og Windows filtyper?

Oppgave 7.10 Gå til din hjemmekatalog; bruk absolutt veinavn. List ut de filene som ligger i root; bruk absolutt veinavn. Se på innholdsfortegnelsen på ditt Linux-filtre; benytt deg av ls-kommandoen. Hvor mange kataloger går ut fra root på ditt system? Hvor er alle brukerne plassert? List ut hva som ligger i root, nå med relativt veinavn.