/ dev / null Linuxではnullデバイスファイルです。これにより、書き込まれたものはすべて破棄され、 EOFが返されます。 読んで。
これは、バキュームとして機能するコマンドラインハックであり、スローされたものをすべて吸い込みます。
それが何を意味するのか、そしてこのファイルで何ができるのかを理解してみましょう。
/ dev/nullプロパティ
これにより、ファイルの終わり( EOF )が返されます )catコマンドを使用して読み込もうとした場合の文字。
cat /dev/null
これは有効なファイルであり、
を使用して確認できます。stat /dev/null
これにより、
の出力が得られますFile: /dev/null Size: 0 Blocks: 0 IO Block: 4096 character special file Device: 6h/6d Inode: 5 Links: 1 Device type: 1,3 Access: (0666/crw-rw-rw-) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2020-02-04 13:00:43.112464814 +0530 Modify: 2020-02-04 13:00:43.112464814 +0530 Change: 2020-02-04 13:00:43.112464814 +0530
これは、このファイルのサイズが0バイトで、ブロックがゼロに割り当てられていることを示しています。ファイルのアクセス許可も設定されており、誰でも読み取り/書き込みはできますが、実行はできません。
実行可能ファイルではないため、 |
を使用したパイピングは使用できません。 / dev / null
にリダイレクトする演算子 。唯一の方法は、ファイルリダイレクトを使用することです(>
、>>
、または <
、
<<
。
次の図は、 / dev / null
を示しています。 確かに有効なファイルです。
ここで、 / dev / null
の一般的な使用例をいくつか見てみましょう。 。
Linuxでの/dev/nullへのリダイレクト
/ dev / null
にリダイレクトすることで、使用するスクリプトの出力を破棄できます。 。
たとえば、 echo
を破棄してみることができます このトリックを使用したメッセージ。
echo 'Hello from JournalDev' > /dev/null
破棄されるため、出力は取得されません!
コマンドを誤って実行し、その出力を / dev / null
にパイプしてみましょう。 。
cat --INCORRECT_OPTION > /dev/null
まだ次のような出力が得られます:
cat: unrecognized option '--INCORRECT' Try 'cat --help' for more information.
なぜこうなった?これは、エラーメッセージが stderr
から送信されているためです。 、ただし、 stdout
からの出力のみを破棄しています。 。
stderr
を取る必要があります も考慮に入れます。
エラーメッセージを破棄
stderrを/dev / nullにリダイレクトしましょう 、stdoutと一緒に。 stderr( =2 のファイル記述子を使用できます )このため。
cat --INCORRECT_OPTION > /dev/null 2>/dev/null
これにより、必要なものが得られます!
同じことを行う別の方法があります。最初にstderrをstdoutにリダイレクトしてから、stdoutを / dev / nullにリダイレクトします。 。
この構文は次のようになります:
command > /dev/null 2>&1
2>&1
に注目してください 最後に。 stderr( 2 )をリダイレクトします )to stdout( 1 )。 &1
を使用します 宛先ファイルがファイル記述子であることをシェルに通知します ファイル名ではありません。
cat --INCORRECT_OPTION > dev/null 2>&1
したがって、 2> 1
を使用する場合 、 stderr
のみをリダイレクトします 1
というファイルに 。これは私たちが望んでいることではありません!
結論
うまくいけば、これで少し問題が解決し、 / dev / nullを使用できるようになります。 Linuxでは、それが何を意味するのかを知っています!以下のコメントセクションでお気軽に質問してください。
参考資料
- StackOverflowの質問