/ dev / nullは、Linuxの疑似デバイスファイルであり、プログラム、特にコマンドラインで実行されたプログラムからの出力を破棄するために使用されます。このファイルはシンク、つまり書き込み可能なターゲットファイルのように動作しますが、データのストリームがこのファイルに書き込まれるとすぐに削除されます。
これは、ユーザーが必要としない出力を取り除くのに役立ちます。プログラムとプロセスは非常に長い出力ログを生成する可能性があり、ログを分析するのが面倒になることがあります。
たとえば、プログラムによって2つのエラーがスローされることがありますが、エラーログは数百の情報メッセージログの間のどこかで失われます。このような場合、情報メッセージログを / dev / nullにダンプできます。 。
上記の例では、プログラムによって出力されるエラーは STDERRと呼ばれます。 (標準エラー )Linuxでは、整数 ‘2’で表されます 、成功と情報の出力は STDOUTと呼ばれます (標準出力 )、整数 ‘1’で表されます 。
さて、次のコマンドラインステートメントを頻繁に見たことがあるかもしれません。これは両方の STDERRを破棄します。 およびSTDOUT / dev / nullへ 。
$ command_name > /dev/null 2>&1
これが何を意味するのかを理解してみましょう。
演算子'>'
リダイレクト演算子と呼ばれます。出力をその後に指定されたファイル(この場合は / dev / null )にリダイレクトします。 、端末に印刷する代わりに。
これはすべてを意味しますか コマンドの出力は/dev / nullにリダイレクトされます '>'
を使用 オペレーター?いいえ。上記のように使用すると、オペレーターは STDOUTのみをリダイレクトします。 。
したがって、コマンドの最後の部分があります。 '2>&1'
意味:リダイレクト STDERR (2) STDOUT (1) 。 「&1」を指定する必要がある理由 単に「1」ではありません 単に「1」と書くことです 出力を「1」という名前のテキストファイルにリダイレクトします 。アンパサンド付き(&)
システムは1を認識します はファイル名ではなく、ファイル記述子 STDOUT 。
したがって、 STDOUTをリダイレクトします / dev / nullへ およびSTDERR STDOUT このようにして、プログラムの完全な出力は / dev / nullに破棄されます。 。
たとえば、‘> / dev / null 2>&1’がある場合とない場合でmvコマンドを実行します。 。
リダイレクトなし:
$ mv tmp.txt test/tmp2.txt /tmp
STDOUTのリダイレクトあり:
$ mv tmp.txt test/tmp2.txt /tmp > /dev/null
STDOUTおよびSTDERRのリダイレクトあり:
$ mv tmp.txt test/tmp2.txt /tmp > /dev/null 2>&1
結論
この記事では、Linuxで一般的に使用されているコマンドフレーズの意味を理解しようとしました:'> /dev/null 2>&1'
。 「/dev / null」について知りたい場合 「より深く、ここでそうすることができます。
ご質問やご意見がございましたら、下のコメント欄でお知らせください!