Що таке 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 знайти: `/ run / udisks2 ': Відхилено дозвіл:` / run / wpa_supplicant': заборонено / usr / share / something / usr / ігри / щось 

Ми отримуємо помилки, оскільки find намагається знайти кілька системних каталогів, які ми не маємо для читання. Рядки, які говорять про "Дозвіл заборонено", є повідомленнями про помилки, і вони були записані в stderr . Інші рядки записувалися у стандартний висновок. За замовчуванням вони обидва відображаються на терміналі.

Щоб приховати stderr, ми можемо перенаправити їх, посилаючись на номер дескриптора файлу стандартної помилки, 2, і оператор "виведення перенаправлення", > .

 find / -iname '* something *' 2> / dev / null 
 / usr / share / doc / something / usr / share / doc / что-небудь / приклади / something_random / usr / share / something / usr / ігри / щось 

Помилки більше не відображаються, тому що весь вивід на stderr був перенаправлений на / dev / null, спеціальний пристрій у Linux, який "нікуди не йде".

Також можна перенаправити всі помилки у файл:

 find / -iname '* something *' 2> output.txt 
 / usr / share / doc / something / usr / share / doc / что-небудь / приклади / something_random / usr / share / something / usr / ігри / щось 

Тепер, якщо ви позначите вміст output.txt, ви побачите повідомлення про помилки, збережені там:

 cat output.txt 
 find: `/ run / udisks2 ': Відхилено дозвіл:` / run / wpa_supplicant': заборонено 

Для отримання детальної інформації про те, як перенаправляти потоки даних, див. Перенаправлення в bash.

Повідомлення про помилку, терміни операційної системи