Filer og filsystemer i Linux
Det globale filsystemet Alle Unix-lignende OS har et virtuelt filsystem som er globalt: Alle filer på hele systemet ser ut til å ligge i ett enkelt hierarkisk katalogtre Det er bare ett toppnivå (rotkatalogen) som kalles root og betegnes med '/' (tegnet slash ) Se innholdet av root: ls / eller tree L 1 / root kan ligge på et hvilket som helst device/hardwareenhet, inkludert RAM-disker og delte nettverksdisker Det globale filsystemet kan være satt sammen av flere mindre filsystemer på samme eller ulike device
Standard oppbygging av Linux filsystem Se f.eks. howtogeek.com for en gjennomgang av innholdet i toppnivåkatalogene i Linux
Montering (mount) av filsystemer Montering: Sette inn et nytt filsystem i det globale systemet. Gjøres ved oppstart/boot eller av sys.adm. Må angi katalogen i det globale katalogtreet der det nye filsystemet skal settes inn mountpoint Montering gjøres med kommandoen mount: mount t [type] [device] [dir] mount t vfat /dev/sdb1 /media/disk device er her en spesialfil som er et grensesnitt mot en device driver for f.eks. en disk eller CD-ROM Vanlige plug-ins som f.eks. minnepinner monteres automatisk for bruker når de kobles på, vanligvis med /media/brukernavn som mountpoint
df: Se alle filsystemene som er montert janh@freja:~$ df Filesystem 1K blocks Used Available Use% Mounted on rootfs 14705984 3183260 10775704 23% / udev 10240 0 10240 0% /dev tmpfs 406368 488 405880 1% /run /dev/disk/by uuid/a4c 14705984 3183260 10775704 23% / tmpfs 5120 0 5120 0% /run/lock tmpfs 1983860 0 1983860 0% /run/shm /dev/sda1 964500 67300 848204 8% /boot /dev/sda5 28834716 4420972 22949020 17% /var /dev/sdb1 309633052 270037040 23867576 92% /local /dev/sdc1 528444416 387502512 114098496 78% /files brage.hiof.no:/home 260075584 195796280 51172276 80% /home
Filbegrepet i Linux Tradisjonelt: En fil er en samling data/informasjon som utgjør en logisk enhet og som kan identifiseres entydig. I Linux: En fil er også en kilde hvor data kan leses fra eller (del av) et medium som data kan skrives til Gir fleksibilitet fordi alt er filer : Alle vanlige filer på disk Alle device (tastur, skjerm, mus, printer, porter..) representeres som en fil som angir grensesnittet for lesing og skriving mot device driveren Program i Linux kan derfor behandle lesing fra og utskrift til hva som helst på en enhetlig måte
Linux filtyper 1.Regulære filer (regular/ordinary files) Vanlige bruker-/systemfiler på disk/tape (data, program) 2.Kataloger (directory files) Inneholder en liste av filene (og underkatalogene) som ligger i denne katalogen muliggjør hierarkisk filsystem Lages og redigeres med bruk av Linux-kommandoer 3.Spesialfiler Block file device som leses/skrives i blokker via et buffer Character device file skriver/leser i en ustrukturert bytestrøm (Named) pipe file Buffer for FIFO-utveksling mellom prosesser Symbolic link file Lenke til en annen fil på systemet Socket file For kommunikasjon mellom prosesser
Se filtype: ls l * janh@janh laptop:~$ ls l total 44 rw r r 1 janh janh 39076 Sep 12 11:46 cc.jpg drwx 2 janh janh 4096 Sep 12 12:14 smuss - Regular file d Directory l c s Link Special file Socket p Named pipe b Block device * Eller ls F
inoder * En inode i Linux er datastrukturen som lagrer alle metadataene, unntatt filnavnet, om en fil i filsystemet Alle inodene ligger i en tabell som (oftest) har fast lengde, typisk én inode per 2-8 Kbytes med diskplass hvis inodetabellen er full er filsystemet fullt, selv om det er diskplass igjen (df i for å se antall inoder i filsystemene) inodenummeret til en fil er indeksen i inodetabellen Katalogfilene i Linux er lister som inneholder inodenummer og filnavn for hver fil i katalogen Linux-kommandoer som håndterer filer (og kataloger) finner filnavnet i katalogfilen og henter deretter informasjon om filen fra inodetabellen * inode er antagelig en forkortelse for index node
Innholdet i en inode (for regulære filer) Filstørrelse i antall bytes Device som filen ligger på Eier av filen, angitt som numerisk bruker-id (se man id) Filens brukergruppetilhørighet, angitt som numerisk gruppe-ud file mode: Et tall som angir filtype og hva slags tilgang (read/write/execute) hhv. filens eier, filens gruppe og alle andre har til filen Ytterligere informasjon om beskyttelse/restriksjoner på bruk og endring av filen Tidspunkter for siste endring av filen og av inoden for filen. Tidspunkt for siste gang filen ble brukt. Antallet link-filer som peker til denne inoden Adresse til blokkene der filen fysisk ligger lagret
stat: se innholdet i en inode janh@janh laptop:~$ stat test.java File: test.java Size: 399 Blocks: 8 IO Block: 4096 regular file Device: 801h/2049d Inode: 9182980 Links: 1 Access: (0775/ rwxrwxr x) Uid: ( 1000/ janh) Gid: ( 1000/ janh) Access: 2014 09 11 14:16:43.820309806 +0200 Modify: 2013 04 12 12:24:02.860470888 +0200 Change: 2014 08 25 23:01:48.297115849 +0200 Birth:
Absolutt: Stinavn (path names) i Linux /home/janh/musikk/cashmere_cat.mp3 Relativt (til stående katalog): musikk/cashmere_cat.mp3 Alle kataloger inneholder to spesialfiler (prøv ls a):. stående katalog.. forelderkatalogen cd [stinavn] bytt stående katalog pwd skriv ut stående katalog $PATH søkestien for shellet $HOME stien til brukers hjemmeområde
Filnavn i Linux Kan inneholde alle tegn untatt / og NULL-tegnet Lengde vanligvis opptil 255 tegn Ingen regler for extensions eller formatering Konvensjoner: Unngå whitespace Unngå spesialtegn for shell som $ * @! < > Unngå særtegn som f.eks. norske æ ø å Bruk: 0 9 a z A Z. _ Bruk i størst mulig grad små bokstaver
File name generation / expansion Kan angi samlinger med filnavn med spesialtegn/ jokernotasjon i shellet: * Matcher en vilkårlig tegnsekvens? Matcher et vilkårlig tegn [] Et av tegnene mellom firkantparantesene Eksempler: ls * ls a* ls a?.txt List alle filer i stående katalog Alle filnavn som begynner med a aa.txt ab.txt ac.txt a4.txt ls a[bc4].txt ab.txt ac.txt a4.txt
Håndtering av filer og kataloger ls se på innholdet av kataloger cp kopiere filer og kataloger mv flytte/omdøpe filer og kataloger rm slette (!) filer og kataloger rmdir slette tom katalog mkdir lage ny katalog
Beskyttelse og deling av filer Linux tilbyr filsikkerhet og fildeling på brukernivå Alle filer har en eier, som er en av de registrerte brukerne på systemet Alle brukerne tilhører en eller flere grupper av brukere, med ett eller flere gruppemedlemmer Alle filer har tilhørighet til en gruppe av brukere Tilgangsrettigheter settes separat for: u g o eier (user) gruppe (group) alle andre brukere (other)
Tilgang/rettigheter til filer og kataloger En bruker kan ha tre rettigheter til en fil: r Lesetilgang / read permission w Skrivetilgang / write permission x Kjøretilgang / execute permission For kataloger: r w x Kan liste filene i katalogen Kan lage, flytte og fjerne filer i katalogen Kan søke i katalogen etter data om filene * Mer presist: Tilgang til filenes inoder gjennom denne katalogfilen
Se på tilgangsrettighetene til en fil Rettigheter angis separat for eier (u), gruppen (g) og andre brukere (o): ls l a.cpp rwxr xr 1 janh janh 399 Apr 12 2013 a.cpp Angir at filtypen er regulærfil rwx Eier kan lese, skrive og kjøre filen r x Gruppen kan lese og kjøre filen, men ikke endre r Andre kan bare lese filen
Sette tilgangsrettighetene til en fil chmod change file mode janh@janh laptop:~$ ls l a.cpp rwxr xr 1 janh janh 0 Sep 12 14:56 a.cpp janh@janh laptop:~$ chmod o+x a.cpp janh@janh laptop:~$ ls l a.cpp rwxr xr x 1 janh janh 0 Sep 12 14:56 a.cpp janh@janh laptop:~$ chmod u w a.cpp janh@janh laptop:~$ ls l a.cpp r xr xr x 1 janh janh 0 Sep 12 14:56 a.cpp janh@janh laptop:~$ chmod oug+w a.cpp janh@janh laptop:~$ ls l a.cpp rwxrwxrwx 1 janh janh 0 Sep 12 14:56 a.cpp
file mode file mode er et oktalt tall der tre sifre brukes til å lagre rettighetene til brukerne: 1. siffer eier av filen u 2. siffer filens gruppe g 3. siffer andre brukere o Hver rettighet har en verdi: 4 read r 2 write w 1 execute x 0 ikke rettighet
Beregning av file mode Legger sammen rettighetene til brukerne og får et unikt tall for hver mulig kombinasjon av de tre rettighetene: 7 = 4+2+1 read/write/execute 6 = 4+2 read/write 5 = 4+1 read/execute 4 = 4 read 3 = 2+1 write/execute 2 = 2 write 1 = 1 execute
Bruk av chmod med file mode janh@janh laptop:~$ chmod 644 a.cpp janh@janh laptop:~$ ls l a.cpp rw r r 1 janh janh 0 Sep 12 14:56 a.cpp janh@janh laptop:~$ chmod 700 a.cpp janh@janh laptop:~$ ls l a.cpp rwx 1 janh janh 0 Sep 12 14:56 a.cpp janh@janh laptop:~$ chmod 521 a.cpp janh@janh laptop:~$ ls l a.cpp r x w x 1 janh janh 0 Sep 12 14:56 a.cpp janh@janh laptop:~$ chmod 400 a.cpp janh@janh laptop:~$ ls l a.cpp r 1 janh janh 0 Sep 12 14:56 a.cpp
Noen verktøy for arkivering/backup, komprimering og kryptering tar rsync Pakke filer og hele katalogtrær inn i en arkiv-/backupfil. Pakke opp igjen arkivfiler. Inkrementell backup av fil(systemer) gzip Komprimere filer (Lempel-Ziv koding) gunzip gpg Pakke opp igjen komprimerte filer GNU Privacy Guard, krypterer datafiler Det er vanlig å distribuere programvare for Linux som komprimerte tar-filer.