Unix filtyper - Unix file types

De syv standard Unix-filtyper er almindelige , katalog , symbolsk link , FIFO special , blokspecial , tegnspecial og sokkel som defineret af POSIX . Forskellige OS-specifikke implementeringer tillader flere typer end hvad POSIX kræver (f.eks. Solaris- døre ). En filstype kan identificeres ved hjælp af ls -lkommandoen, der viser typen i det første tegn i filsystemets tilladelsesfelt .

For almindelige filer , Unix pålægger ikke eller give nogen interne filstruktur; derfor er deres struktur og fortolkning helt afhængig af softwaren, der bruger dem. Men den filekan kommandoen bruges til at bestemme, hvilken type data , de indeholder.

Repræsentationer

Numerisk

I statstrukturen lagres filtype og tilladelser ( tilstanden ) sammen i et st_mode bitfelt , der har en størrelse på mindst 12 bit (3 bit for at specificere typen blandt de syv mulige filtyper; 9 bit til tilladelser) . Layoutet for tilladelser er defineret af POSIX til at have mindst 9 bits, men resten er udefineret.

Efter konvention er tilstanden en 16-bit værdi skrevet ud som et sekscifret oktalt tal uden et nul. Formatdelen indtager bly 4-bits (2 oktale cifre), og "010" ( 1000 i binær) står normalt for en almindelig fil. De næste 3 bits (1 ciffer) bruges normalt til setuid, setgid og sticky . Den sidste del er allerede defineret af POSIX til at indeholde tilladelsen. Et eksempel er "100644" for en typisk fil. Dette format kan blandt andet ses i git , tjære og ar .

Filtypen kan testes ved hjælp af makroer som f.eks S_ISDIR. En sådan kontrol udføres normalt ved at maskere tilstanden med S_IFMT(ofte det oktale tal "170000" for lead 4 bits konventionen) og kontrollere, om resultatet stemmer overens S_IFDIR. S_IFMTer ikke et kerne POSIX-koncept, men en X / Open System Interfaces (XSI) udvidelse; systemer, der kun overholder POSIX, kan bruge nogle andre metoder.

Mode streng

Tag for eksempel en linje i ls -loutput:

drwxr-xr-x 2 root root     0 Jan  1  1970 home

POSIX specificerer formatet for output for det lange format ( -loption). Især kaldes det første felt (før det første mellemrum) "filtilstandsstreng", og dets første tegn beskriver filtypen. Resten af ​​denne streng angiver filtilladelserne .

Derfor er tilstandsstrengen i eksemplet drwxr-xr-x: filtypen er d(bibliotek), og tilladelserne er rwxr-xr-x.

Eksempler på implementeringer

Den GNU coreutils version af lsanvendelser et opkald til filemode()en glibc funktion (eksponeret i gnulib bibliotek) for at få tilstanden streng.

FreeBSD bruger en enklere tilgang, men tillader et mindre antal filtyper.

Almindelig fil

Almindelige filer vises ls -lmed en bindestreg-minus - i tilstandsfeltet:

$ ls -l /etc/passwd
-rw-r--r-- ... /etc/passwd

Vejviser

Den mest almindelige specialfil er biblioteket. Layoutet på en katalogfil defineres af det anvendte filsystem. Da flere filsystemer er tilgængelige under Unix, både indfødte og ikke-indfødte, er der ingen katalogfillayout.

En mappe er markeret med a dsom det første bogstav i funktionsfeltet i output af ls -dleller statf.eks

$ ls -dl /
drwxr-xr-x 26 root root 4096 Sep 22 09:29 /

$ stat /
  File: "/"
  Size: 4096            Blocks: 8          IO Block: 4096   directory
Device: 802h/2050d      Inode: 128         Links: 26
Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
...

Symbolsk led

Et symbolsk link er en henvisning til en anden fil. Denne specielle fil gemmes som en tekstrepræsentation af den refererede fils sti (hvilket betyder, at destinationen muligvis er en relativ sti eller måske slet ikke findes).

Et symbolsk link er markeret med et l(små bogstaver L) som det første bogstav i tilstandsstrengen, f.eks

lrwxrwxrwx ... termcap -> /usr/share/misc/termcap
lrwxrwxrwx ... S03xinetd -> ../init.d/xinetd

FIFO (navngivet rør)

En af styrkerne ved Unix har altid været kommunikation mellem processer . Blandt de faciliteter, der leveres af operativsystemet, er rør , der forbinder output fra en proces til input fra en anden. Dette er fint, hvis begge processer findes i det samme overordnede procesrum startet af den samme bruger, men der er omstændigheder, hvor kommunikationsprocesserne skal bruge FIFO'er, her kaldet navngivne rør . En sådan omstændighed opstår, når processerne skal udføres under forskellige brugernavne og tilladelser.

Navngivne rør er specielle filer, der kan findes overalt i filsystemet. De kan oprettes med kommandoen mkfifosom i mkfifo mypipe.

Et navngivet rør er markeret med a psom det første bogstav i tilstandsstrengen, f.eks

prw-rw---- ... mypipe

Stikkontakt

En sokkel er en speciel fil, der anvendes til kommunikation mellem processer , som muliggør kommunikation mellem to processer. Ud over at sende data kan processer sende filbeskrivelser på tværs af en Unix domænesocketforbindelse ved hjælp af sendmsg()og recvmsg()systemopkald.

I modsætning til navngivne rør, der kun tillader ensrettet dataflytning, er stikkene fuldt duplex-kompatible .

En sokkel er markeret med en ssom det første bogstav i tilstandsstrengen, f.eks

srwxrwxrwx /tmp/.X11-unix/X0

Enhedsfil (blok, tegn)

I Unix håndteres næsten alle ting som filer og har en placering i filsystemet, selv hardwareenheder som harddiske. Den store undtagelse er netværksenheder, som ikke vises i filsystemet, men håndteres separat.

Enhedsfiler bruges til at anvende adgangsrettigheder til enhederne og til at styre handlinger på filerne til de relevante enhedsdrivere.

Unix skelner mellem karakterenheder og blokkenheder. Sondringen er omtrent som følger:

  • Tegnenheder leverer kun en seriel strøm af input eller accepterer en seriel strøm af output
  • Blokeringsenheder er tilfældigt tilgængelige

Skønt diskpartitioner f.eks. Kan have både karakterenheder, der giver ikke-bufret tilfældig adgang til blokke på partitionen, og blokere enheder, der giver bufferet tilfældig adgang til blokke på partitionen.

En karakterenhed er markeret med a csom det første bogstav i tilstandsstrengen. Ligeledes er en blokanordning markeret med en b, f.eks

crw------- ... /dev/null
brw-rw---- ... /dev/sda

Dør

En dør er en speciel fil til kommunikation mellem processer mellem en klient og server, der i øjeblikket kun implementeres i Solaris .

En dør er markeret med en D(store bogstaver) som det første bogstav i tilstandsstrengen, f.eks

Dr--r--r-- ... name_service_door

Se også

Referencer