Stderrとは何ですか?

標準エラーとも呼ばれるStderrは、プロセスがエラーメッセージを書き込むことができるデフォルトのファイル記述子です。

Linux、macOS X、BSDなどのUnix系オペレーティングシステムでは、 stderrはPOSIX標準で定義されています。 デフォルトのファイルディスクリプタ番号は2です。

端末では、標準エラーはデフォルトでユーザーの画面になります。

LinuxコマンドラインのStderr

bashでは、標準エラーはコマンドラインでリダイレクトできます。 stderrをリダイレクトすると、エラーメッセージを別のログファイルに記録したり、エラーメッセージを完全に隠したりする必要がある場合に便利です。

たとえば、次のfindコマンドを考えます

 find / -iname '* something *' 
 / usr / share / doc / something / usr / share / doc / something / examples / something_random find: `/ run / udisks2 ':許可されていませんfind:` / run / wpa_supplicant':許可されていない/ usr / share / something / usr /ゲーム/何か 

findが読み取り権限のないいくつかのシステムディレクトリを検索しようとしているため、エラーが発生しています。 "Permission denied"と書かれている行はエラーメッセージであり、 stderrに書き込まれました。 他の行は標準出力(標準出力)に書き出されました。 デフォルトでは、両方とも端末に表示されます。

標準エラー出力を隠すには、標準エラーのファイルディスクリプタ番号2と "リダイレクト出力"演算子>を参照してそれらをリダイレクトします。

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

stderrへのすべての出力が/ dev / nullにリダイレクトされたため、エラーは表示されなくなりました。これはLinuxの特殊なデバイスで、「どこにも行かない」という意味です。

すべてのエラーをファイルにリダイレクトすることもできます。

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

これで、 output.txtの内容を確認すると、エラーメッセージが保存されているのがわかります。

 猫のoutput.txt 
 find: `/ run / udisks2 ':権限が拒否されましたfind:` / run / wpa_supplicant':権限が拒否されました 

データストリームをリダイレクトする方法の詳細については、bashでのリダイレクトを参照してください。

エラーメッセージ、オペレーティングシステムの用語