Какво представлява Stderr?

Stderr, известен също като стандартна грешка, е дескрипторът на файла по подразбиране, където процесът може да пише съобщения за грешка.

В Unix-подобни операционни системи, като Linux, MacOS X и BSD, stderr се определя от стандарта POSIX. Номерът на дескриптора на файла по подразбиране е 2 .

В терминала стандартната грешка по подразбиране е на екрана на потребителя.

Stderr в командния ред на Linux

В bash стандартната грешка може да бъде пренасочена в командния ред. Пренасочването на stderr може да бъде полезно, ако трябва да заснемете съобщения за грешки в отделен регистрационен файл или да скриете изцяло съобщенията за грешки.

Например разгледайте следната команда за намиране :

 намери / -име "* нещо *" 
 / usr / share / doc / something / usr / share / doc / something / examples / something_random find: `/ run / udisks2 ': Разрешено е разрешение:` / run / wpa_supplicant': Разрешено отказ / usr / share / something / usr / игри / нещо 

Получаваме грешки, защото find се опитва да потърси няколко системни директории, които нямаме разрешение да четем. Редовете, които казват „Разрешение за отказ“, са съобщения за грешки и са написани на stderr . Другите линии бяха записани в stdout (стандартен изход). По подразбиране те се показват на терминала.

За да скриете stderr, можем да ги пренасочим, като посочим номера на дескриптора на файла на стандартната грешка, 2 и оператора "изход за пренасочване", > .

 find / -iname '* something *' 2> / dev / null 
 / usr / share / doc / нещо / usr / share / doc / нещо / примери / some_random / usr / share / нещо / usr / игри / нещо 

Грешките вече не се показват, защото всички изходи към stderr бяха пренасочени към / dev / null, специалното устройство в Linux, което „няма никъде“.

Можем да пренасочим всички грешки във файл:

 find / -iname '* something *' 2> output.txt 
 / usr / share / doc / нещо / usr / share / doc / нещо / примери / some_random / usr / share / нещо / usr / игри / нещо 

Сега, ако изтриете съдържанието на output.txt, ще видите съобщенията за грешки, които са били запазени там:

 cat output.txt 
 find: `/ run / udisks2 ': Разрешение е отказано:` / run / wpa_supplicant': Разрешението е отказано 

За подробна информация за това как да пренасочите потоци от данни, вижте пренасочване в bash.

Съобщение за грешка, термини на операционната система