Wat is Stderr?

Stderr, ook bekend als standaardfout, is de standaardbestanddescriptor waarbij een proces foutberichten kan schrijven.

In Unix-achtige besturingssystemen, zoals Linux, macOS X en BSD, wordt stderr gedefinieerd door de POSIX-standaard. Het standaard bestandsdescriptornummer is 2 .

In de terminal is de standaardfout standaard op het scherm van de gebruiker.

Stderr op de Linux-opdrachtregel

In bash kan de standaardfout worden omgeleid op de opdrachtregel. Het omleiden van stderr kan handig zijn als u foutmeldingen naar een afzonderlijk logbestand wilt vastleggen of de foutmeldingen volledig wilt verbergen.

Neem bijvoorbeeld de volgende opdracht find :

 vind / -iname '* something *' 
 / usr / share / doc / something / usr / share / doc / something / examples / something_random vinden: `/ run / udisks2 ': geweigerde toestemming te vinden:` / run / wpa_supplicant': geweigerde machtiging / usr / share / something / usr / games / iets 

We krijgen fouten omdat zoeken probeert een aantal systeemdirectory's te doorzoeken waarvoor we geen toestemming hebben om te lezen. De regels die zeggen "Permission denied" zijn foutmeldingen en zijn naar stderr geschreven. De andere regels zijn geschreven naar stdout (standaarduitvoer). Standaard worden ze allebei weergegeven op de terminal.

Om stderr te verbergen, kunnen we ze omleiden door te verwijzen naar het standaarddescriptornummer van de standaardfout, 2, en een "redirect output" -operator, > .

 vind / -iname '* something *' 2> / dev / null 
 / usr / share / doc / something / usr / share / doc / something / examples / something_random / usr / share / something / usr / games / iets 

De fouten worden niet meer weergegeven, omdat alle uitvoer naar stderr is omgeleid naar / dev / null, het speciale apparaat in Linux dat "nergens naartoe gaat".

We kunnen ook alle fouten omleiden naar een bestand:

 vind / -iname '* something *' 2> output.txt 
 / usr / share / doc / something / usr / share / doc / something / examples / something_random / usr / share / something / usr / games / iets 

Nu, als u de inhoud van output.txt kat, ziet u de foutmeldingen daar zijn opgeslagen:

 cat output.txt 
 vinden: `/ run / udisks2 ': toestemming geweigerd vinden:` / run / wpa_supplicant': toestemming geweigerd 

Zie omleiding in bash voor gedetailleerde informatie over het omleiden van gegevensstromen.

Foutmelding, termen besturingssysteem