シェル プログラミングを学習している場合は、/dev/null のようなものにすでに出会ったことがあるかもしれません。この記事では、それが何であり、どのように使用されるかを理解します。 /dev とは何かを理解することから始めましょう。
/devとは何ですか?
Linux ファイル システムでは、すべてがファイルまたはディレクトリです。デバイスでもファイルとしてアクセスされます。ハードドライブのパーティション、ペンドライブ、スピーカーなど、これらすべてにアクセスするためのファイルが存在します。ここで、デバイスがファイルとしてどのようにアクセスされるかを理解するために、次のように考えてみましょう。ファイルを使って何をするのでしょうか?そこからデータを読み取り、そこにデータを書き込みます。スピーカーのようなデバイスはデータを入力して音声を生成でき、ハードディスクはデータの読み取りと書き込みに使用でき、プリンタは入力を取得してファイルを印刷できます。この点では、ファイルとデバイスは似ています。
/dev は、Linux システムのすべての物理デバイスと仮想デバイスを保存するディレクトリです。物理デバイスは理解しやすく、ペンドライブ、スピーカー、プリンターなどの有形のデバイスです。Linux システムには、デバイスとして機能するが物理デバイスを表さない仮想デバイスもあります。
/dev/nullとは何ですか?
これは仮想デバイスであり、/dev/null に書き込まれたデータはすべて消える、または消滅するという特別な特性があります。この特性から、ビットバケットまたはブラックホールとも呼ばれます。デモンストレーションを見てみましょう。
出力を /dev/null にリダイレクトします
このデモでは、いくつかのデータを追加しましたが、そのデータは保存されていないことがわかります。 /dev/null のこの特定の特性には、いくつかの使用例があります。見てみましょう。
/dev/null の使用法
書き込まれたものはすべて破棄されるため、ファイルを /dev/null に移動して削除できます。しかし、これは広く使用されているユースケースではありません。これは主に、出力から標準出力と標準エラーを破棄するために使用されます。
標準出力と標準エラーとは何ですか?
Linux コマンドの出力には、標準出力 (stdout) と標準エラー (stderr0) という 2 つのデータ ストリームが含まれます。一方、標準出力はコマンドにエラーがない場合の通常の出力であり、標準エラーはコマンドによって生成されたエラーです。出力には標準出力と標準入力の両方が含まれる場合があります。 stdout と stderr の例:
以下のシェルスクリプトを実行してみましょう
# /bin/sh ls apt update>
最初のコマンドは正常に実行されましたが、2 番目のコマンドではエラーが発生しました。 stdout と stderr は 2 つの別個のデータ ストリームであるため、別々に処理できます。
stderr と stdout にアクセスするにはどうすればよいですか?
Stdout と stderr はデータのストリームであり、どちらも Linux ではファイルとして扱われます。これらに対して何らかのアクションを実行したい場合は、ファイル ストリームを一意に識別するファイル記述子を使用します。 stdout のファイル記述子は 1、stderr のファイル記述子は 2 です。
これらに個別にアクセスするには、前の例で使用したものと同じスクリプト ファイルに対して実行される次のコマンドを見てみましょう。
./script.sh 1>標準出力.txt>>
この例では、出力には標準エラーが含まれていますが、標準出力は表示されていないことがわかります。これは、stdout ストリームが stdout.txt ファイルに送信されたためで、stdout.txt ファイルに標準出力が含まれていることがわかります。
シェル スクリプトを作成しているときに、出力から標準エラーを破棄したい場合があります。どのようなストリームを出力から抑制したいとしても、そのデータ ストリームは /dev/null に書き込むことができます。上の例のように、そのデータを別のファイルに書き込むこともできますが、そのデータに用途がない場合は、そのデータにメモリを浪費する必要はなく、完全に破棄することをお勧めします。次の例を見てみましょう
./script.sh 2>/dev/null>>
そして、そのようにして、出力から stderr を削除しました。完全な出力を破棄したい場合は、次のコマンドを使用できます。
command>/dev/null 2>&1>>
&> コマンドは、左側に示されているファイル記述子の出力 (上記のコマンドでは 2 の出力) を、右側に示されているファイル記述子のストリームにリダイレクトします。そのため、stderr (2) の出力は stdout(1) にリダイレクトされ、さらに /dev/null に書き込まれて破棄されます。
npmインストールコマンド

ファイルの安全な削除
「/dev/null」は安全なファイル削除に役立ちます。 「/dev/null」をファイルにリダイレクトすると、その内容が NULL バイトで効果的に上書きされるため、意味のあるデータを回復することが困難になります。
例えば:
cat /dev/null>機密ファイル>>
このコマンドは、「sensitive_file」の内容を null バイトに置き換え、安全な削除を保証します。
ログファイルのクリーニング
ログ ファイルには、時間の経過とともに大量のデータが蓄積される可能性があります。実行中のサービスを中断せずにログ ファイルをクリアするには、その内容を「/dev/null」にリダイレクトします。
例えば:
cat /dev/null>/var/log/syslog>>
このコマンドは、「syslog」ファイルの内容を「/dev/null」にリダイレクトすることで「syslog」ファイルを空にし、ファイル自体を削除せずにログを効果的に消去します。
ヒントとコツ:
- 標準出力を「/dev/null」にリダイレクトします: 「command> /dev/null」
- 標準エラーを「/dev/null」にリダイレクトします: 「command 2> /dev/null」
- 出力とエラーの両方を「/dev/null」にリダイレクトします: 「command>/dev/null 2>&1」
結論
この記事では、Linux の `/dev/null' が、書き込まれるとデータが消える仮想ブラック ホールであることについて説明しました。これは、出力とエラーを破棄し、コマンドの実行をよりクリーンにするためによく使用されます。また、安全なファイル削除やログ ファイルのクリーニングにも使用できます。その機能を理解すると、Linux で効率的なコマンドライン操作が可能になります。