en filbeskrivelse er et tal, der entydigt identificerer en åben fil i en computers operativsystem. Den beskriver en dataressource, og hvordan denne ressource kan tilgås.
når ET program beder om at åbne en fil — eller en anden dataressource, som en netværksstik — giver kernen:
- adgang.
- opretter en post i den globale filtabel.
- giver programmet placeringen af denne post.
deskriptoren identificeres med et unikt ikke-negativt heltal, såsom 0, 12 eller 567. Der findes mindst en filbeskrivelse for hver åben fil på systemet.
filbeskrivelser blev først brugt i
oversigt
når en proces foretager en vellykket anmodning om at åbne en fil, returnerer kernen en filbeskrivelse, der peger på en post i kernens globale filtabel. Posten filtabel indeholder oplysninger såsom filens inode, byte-forskydning og adgangsbegrænsningerne for den pågældende datastrøm (skrivebeskyttet, skrivebeskyttet osv.).
Stdin, stdout og stderr
på et unikt operativsystem er de første tre fildeskriptorer som standard STDIN (standard input), STDOUT (standard output) og STDERR (standardfejl).
navn | Filbeskrivelse | beskrivelse | forkortelse |
---|---|---|---|
standard input | 0 | standarddatastrømmen for input, for eksempel i en kommandopipeline. I terminalen er dette som standard tastaturindgang fra brugeren. | stdin |
Standard output | 1 | standarddatastrømmen til output, for eksempel når en kommando udskriver tekst. I terminalen er dette som standard brugerens skærm. | stdout |
standardfejl | 2 | standarddatastrømmen for output, der vedrører en fejl, der opstår. I terminalen er dette som standard brugerens skærm. | stderr |
omdirigering af filbeskrivere
Filbeskrivere kan fås direkte adgang til ved hjælp af bash, standardskallen til Linj.
Når du f.eks. bruger kommandoen find, går vellykket output til stdout (filbeskrivelse 1), og fejlmeddelelser går til stderr (filbeskrivelse 2). Begge streams vises som terminaludgang:
find / -name '*something*'
/usr/share/doc/something/usr/share/doc/something/examples/something_randomfind: `/run/udisks2': Permission deniedfind: `/run/wpa_supplicant': Permission denied/usr/share/something/usr/games/something
Vi får fejl, fordi find forsøger at søge i et par systemkataloger, som vi ikke har tilladelse til at læse. Alle linjer, der siger” Tilladelse nægtet ” blev skrevet til stderr, og de andre linjer blev skrevet til stdout.
Du kan skjule stderr ved at omdirigere filbeskrivelse 2 til/dev/null, den specielle enhed i Linuks, der “går ingen steder”:
find / -name '*something*' 2>/dev/null
/usr/share/doc/something/usr/share/doc/something/examples/something_random/usr/share/something/usr/games/something
fejlene sendt til/dev / null, og vises ikke.
det er vigtigt at forstå forskellen mellem stdout og stderr, når du vil arbejde med et programs output. For eksempel, hvis du forsøger at grep outputtet fra find-kommandoen, vil du bemærke, at fejlmeddelelserne ikke filtreres, fordi kun standardoutputtet ledes til grep.
find / -name '*something*' | grep 'something'
/usr/share/doc/something/usr/share/doc/something/examples/something_randomfind: `/run/udisks2': Permission deniedfind: `/run/wpa_supplicant': Permission denied/usr/share/something/usr/games/something
Du kan dog omdirigere standardfejl til standardoutput, og derefter behandler grep teksten til begge:
find / -name '*something*' 2>&1 | grep 'something'
/usr/share/doc/something/usr/share/doc/something/examples/something_random/usr/share/something/usr/games/something
Bemærk, at i kommandoen ovenfor, målfilbeskrivelsen (1) er præfikset med et ampersand (“&”). For mere information om omdirigering af datastrøm, se rørledninger i bash-skallen.
for eksempler på oprettelse og brug af filbeskrivere i bash, se vores eksekveringskonstruerede kommandoeksempler.
Filhåndtag, Operativsystembetingelser