Hva er en spesiell fil?

I et operativsystem er en spesiell fil en type fil som kan lagres i et filsystem. En spesiell fil kalles også noen ganger en enhetsfil .

Formålet med en spesiell fil er å avsløre enheten som en fil i filsystemet. En spesiell fil gir et universelt grensesnitt for maskinvareenheter (og virtuelle enheter som er opprettet og brukt av kjernen), fordi verktøy for fil I / O kan brukes til å få tilgang til enheten.

Når data er rødt fra eller skrevet til en spesiell fil, skjer operasjonen umiddelbart, og er ikke underlagt konvensjonelle filsystemregler.

I Linux er det to typer spesielle filer: blokkere spesielle filer og tegnespesialfiler .

En blokk spesiell fil fungerer som et direkte grensesnitt til en blokk enhet. En blokk enhet er en hvilken som helst enhet som utfører data I / O i blokker.

Eksempler på blokk spesielle filer:

  • / dev / sd xn - monterte partisjoner av fysiske lagringsenheter. Brevet x henviser til en fysisk enhet, og tallet n refererer til en partisjon på den enheten. For eksempel er / dev / sda1 typisk den første partisjonen på den første fysiske lagringsenheten.
  • / dev / loop n - loop enheter. Disse er spesielle enheter som tillater en fil i filsystemet som skal brukes som en blokkeringsenhet. Filen kan inneholde et helt filsystem av seg selv, og åpnes som om det var en montert partisjon på en fysisk lagringsenhet. For eksempel kan en ISO-diskbildefil monteres som en loop-enhet.

Hvis du vil vite hvor stor en blokk er på systemet, kjør du " blockdev --getbsz device " som root, for eksempel:

 sudo blockdev --getbsz / dev / sda1 
 4096 

I dette eksemplet er blokkstørrelsen 4096 bytes (4 kibibytes).

Tegn spesielle filer

En tegnespesial fil ligner en blokk enhet, men data er skrevet ett tegn (åtte biter, eller en byte) om gangen.

Eksempler på tegnespesialfiler:

  • / dev / stdin (Standardinngang.)
  • / dev / stdout (Standard utgang.)
  • / dev / stderr (standard feil.)
  • / dev / random (PRNG som kan forsinke å returnere en verdi for å skaffe ekstra entropi.)
  • / dev / urandom (PRNG som alltid returnerer en verdi umiddelbart, uavhengig av nødvendig entropi.)
  • / dev / null (null-enheten. Lesing fra denne filen får alltid en null-byte, skriver til denne filen lykkes ikke noe.)

Linux filtyper

I Linux-kjernen er filtyper deklarert i headerfilen sys / stat.h. Typenavnet, symbolsk navn og bitmask for hver Linux filtype er oppført nedenfor.

Hvordan kan jeg vite om en fil er spesiell?

Test for blokk spesiell

I bash returnerer kommandoen " test -b- fil " en utgangsstatus på 0 hvis filen er blokkspesial, eller 1 hvis filen er av en annen type eller ikke eksisterer.

 test -b / dev / sda1; ekko $? # sjekk for blokk spesiell, ekko utgang status av testen 
 0 
 test -b / dev / null; ekko $? # tegn spesielle filer er ikke blokk spesielle 
 1 

Test for karakter spesiell

For å avgjøre om en fil er tegnspesial, bruk " test -c- fil ":

 test -c / dev / null; ekko $? 
 0 

Ved hjelp av stat

Du kan også sjekke en filtype med stat :

 stat / dev / sda1 
 Fil: / dev / sda1 Størrelse: 0 Blokker: 0 IO Blokk: 4096 blokk spesiell fil Enhet: 6h / 6d Inode: 7998 Lenker: 1 Enhetstype: 8, 1 Tilgang: (0660 / brw-rw ----) Uid : (0 / root) Gid: (6 / disk) Tilgang: 2018-07-08 06: 41: 25.540000000 -0400 Endre: 2018-07-08 06: 41: 25.540000000 -0400 Endre: 2018-07-08 06: 41: 25.540000000 -0400 Født: - 
 stat / dev / tilfeldig 
 Fil: / dev / random Størrelse: 0 Blokker: 0 IO Blokk: 4096 tegn spesiell fil Enhet: 6h / 6d Inode: 6518 Lenker: 1 Enhetstype: 1, 8 Tilgang: (0666 / crw-rw-rw-) Uid: (0 / root) Gid: (0 / root) Tilgang: 2018-07-08 06: 41: 19.676000000 -0400 Endre: 2018-07-08 06: 41: 19.676000000 -0400 Endre: 2018-07-08 06:41 : 19.676000000 -0400 Født: - 

Inode, operativsystemvilkår, standardinngang (stdin), standardutgang (stdout)