Hva er en filbeskrivelse?

En filbeskrivelse er et nummer som unikt identifiserer en åpen fil i en datamaskinens operativsystem. Den beskriver en dataressurs, og hvordan den ressursen kan nås.

Når et program ber om å åpne en fil - eller en annen dataressurs, som et nettverksuttak - kjernen til operativsystemet gir tilgang, skriver inn i det globale filtabellen, og gir programvaren plasseringen av den oppføringen.

Beskrivelsen er identifisert av et unikt ikke-negativt heltall, for eksempel 0, 12 eller 567 . Det finnes minst én filbeskrivelse for hver åpen fil på systemet.

Filbeskrivelser ble først brukt i Unix, og brukes av moderne operativsystemer, inkludert Linux, MacOS X og BSD. I Microsoft Windows er filbeskrivelser kjent som filhåndterer.

  • Oversikt
  • Stdin, Stdout og Stderr
  • Omdirigere filbeskrivelser

Når en prosess gjør en vellykket forespørsel om å åpne en fil, returnerer kjernen en filbeskrivelse som peker på en oppføring i kjernens globale filtabell . Filtabelloppføringen inneholder informasjon som inoden til filen, byteforskyvning og tilgangsbegrensningene for datastrømmen (skrivebeskyttet, skrivebeskyttet, etc.).

Stdin, Stdout og Stderr

På et Unix-lignende operativsystem er de tre første filbeskrivelsene som standard STDIN (standardinngang), STDOUT (standardutgang) og STDERR (standard feil).

NavnFilbeskrivelseBeskrivelseForkortelse
Standardinngang0Standard datastrøm for inngang, for eksempel i en kommandolinjelinje. I terminalen er dette standard på tastaturinngang fra brukeren.stdin
Standardutgang1Standard datastrøm for utdata, for eksempel når en kommando skriver ut tekst. I terminalen er dette standard på brukerens skjerm.stdout
Standard feil2Standard datastrøm for utdata som vedrører en feil som oppstår. I terminalen er dette standard på brukerens skjerm.stderr

Omdirigere filbeskrivelser

Filbeskrivelser kan nås direkte med bash, standardskallet til Linux, MacOS X og Windows Subsystem for Linux.

For eksempel, når du bruker finne- kommandoen, går vellykket utgang til stdout (filbeskrivelse 1 ), og feilmeldinger går til stderr (filbeskrivelse 2 ). Begge bekker vises som terminalutgang:

 finn / -navn '* noe *' 
 / usr / share / doc / something / usr / share / doc / noe / eksempler / noe_random finn: `/ run / udisks2 ': Tillatelse nektet finn:` / run / wpa_supplicant': Tillatelse nektet / usr / share / something / usr / spill / noe 

Vi får feil fordi søk prøver å søke noen få systemkataloger som vi ikke har tillatelse til å lese. Alle linjene som sier "Tillatelse nektet" ble skrevet til stderr, og de andre linjene ble skrevet til stdout .

Du kan skjule stderr ved å omdirigere filbeskrivelse 2 til / dev / null, den spesielle enheten i Linux som "går ingen steder":

 finn / -navn '* noe *' 2> / dev / null 
 / usr / del / doc / noe / usr / del / doc / noe / eksempler / something_random / usr / del / noe / usr / spill / noe 

Feilene er sendt til / dev / null, og vises ikke.

Å forstå forskjellen mellom stdout og stderr er viktig når du vil jobbe med et programs utgang. Hvis du for eksempel prøver å grep utdataene fra finnkommandoen, vil du legge merke til at feilmeldingene ikke blir filtrert, fordi bare standardutgangen er pipet til grep .

 finn / -navn '* noe *' | grep 'noe' 
 / usr / share / doc / something / usr / share / doc / noe / eksempler / noe_random finn: `/ run / udisks2 ': Tillatelse nektet finn:` / run / wpa_supplicant': Tillatelse nektet / usr / share / something / usr / spill / noe 

Du kan imidlertid omdirigere standardfeil til standardutgang, og grep vil deretter behandle teksten til begge:

 finn / -navn '* noe *' 2> & 1 | grep 'noe' 
 / usr / del / doc / noe / usr / del / doc / noe / eksempler / something_random / usr / del / noe / usr / spill / noe 

Legg merke til at i kommandoen ovenfor er målfilbeskrivelsen ( 1 ) prefikset med en ampersand (" & "). For mer informasjon om omdirigering av datastrøm, se rørledninger i bash-skallet.

For eksempler på å opprette og bruke filbeskrivelser i bash, se våre exec builtin-kommando eksempler.

Filhåndtak, operativsystemvilkår