GNU/Linux >> Linux の 問題 >  >> Linux

Linuxでは/dev/ null

/ 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の質問

Linux
  1. / dev/randomを使用してLinuxでランダムパスワードを生成する方法

  2. Linux:/ dev / console、/ dev / tty、/ dev / tty0の違いは?

  3. >&-は> / dev / nullよりも効率的ですか?

  1. 別のshファイルからshファイルを実行する方法

  2. /dev/zero から /dev/null への DD ...実際に何が起こるか

  3. echo または print /dev/stdin /dev/stdout /dev/stderr

  1. Linuxは複数の連続したパスセパレーター(/ home //// username /// file)をどのように処理しますか?

  2. / dev / stdin、/ dev / stdout、および/ dev / stderrはどの程度移植可能ですか?

  3. Linux に /dev/null に相当するディレクトリはありますか?