ウェブサイト検索

Linux I/O (入出力) リダイレクトの仕組みの基本を学ぶ


Linux 管理における最も重要かつ興味深いトピックの 1 つは、I/O リダイレクトです。コマンド ラインのこの機能を使用すると、ファイルからのコマンドの入力や出力をファイルにリダイレクトしたり、パイプを使用して複数のコマンドを結合して「コマンド パイプライン」と呼ばれるものを形成したりできます。 。

実行するすべてのコマンドは基本的に 2 種類の出力を生成します。

  1. コマンドの結果 – プログラムが生成するように設計されたデータ、および
  2. プログラムの実行の詳細をユーザーに知らせるプログラムのステータスとエラー メッセージ。

Linux およびその他の Unix 系システムには、以下の名前の 3 つのデフォルト ファイルがあり、これらもファイル記述子番号を使用してシェルによって識別されます。

  1. stdin または 0 – キーボードに接続されており、ほとんどのプログラムはこのファイルから入力を読み取ります。
  2. stdout または 1 – これは画面に添付されており、すべてのプログラムは結果をこのファイルに送信し、
  3. stderr または 2 – プログラムはステータス/エラー メッセージをこのファイルに送信し、このファイルも画面に添付されます。

したがって、I/O リダイレクトを使用すると、コマンドの入力ソースだけでなく、その出力およびエラー メッセージの送信先も変更できます。これは、”< ” および ”> ” リダイレクト演算子によって可能になります。

Linux で標準出力をファイルにリダイレクトする方法

以下の例のように標準出力をリダイレクトできます。ここでは、後の検査のために top コマンドの出力を保存します。

top -bn 5 >top.log

フラグの場所:

  1. -btop をバッチ モードで実行できるようにし、その出力をファイルまたは別のコマンドにリダイレクトできるようにします。
  2. -n – コマンドが終了するまでの反復回数を指定します。

次のように cat コマンドを使用して、top.log ファイルの内容を表示できます。

cat top.log

コマンドの出力を追加するには、”>> ” 演算子を使用します。

たとえば、上記の top コマンドの出力を top.log ファイル、特にスクリプト内 (またはコマンド ライン上) に追加するには、次の行を入力します。

top -bn 5 >>top.log

: ファイル記述子番号を使用すると、上記の出力リダイレクト コマンドは次と同じになります。

top -bn 5 1>top.log

Linux で標準エラーをファイルにリダイレクトする方法

コマンドの標準エラーをリダイレクトするには、シェルが何をしようとしているのかを理解できるように、ファイル記述子番号 2 を明示的に指定する必要があります。

たとえば、次の ls コマンドは、root 権限のない通常のシステム ユーザーが実行するとエラーが発生します。

ls -l /root/

以下のように、標準エラーをファイルにリダイレクトできます。

ls -l /root/ 2>ls-error.log
cat ls-error.log 

標準エラーを追加するには、以下のコマンドを使用します。

ls -l /root/ 2>>ls-error.log

標準出力/エラーを 1 つのファイルにリダイレクトする方法

コマンドのすべての出力 (標準出力と標準エラーの両方) を 1 つのファイルにキャプチャすることもできます。これは、ファイル記述子番号を指定する 2 つの方法で実行できます。

1. 1 つ目は比較的古い方法で、次のように動作します。

ls -l /root/ >ls-error.log 2>&1

上記のコマンドは、シェルが最初に ls コマンドの出力をファイル ls-error.log に送信し (>ls-error.log を使用)、次に次のように書き込むことを意味します。ファイル記述子 2 (標準出力) へのすべてのエラー メッセージは、ファイル ls-error.log (2>&1 を使用) にリダイレクトされます。 )。標準エラーも標準出力と同じファイルに送信されることを意味します。

2. 2 番目の直接的な方法は次のとおりです。

ls -l /root/ &>ls-error.log

次のように、標準出力と標準エラーを単一のファイルに追加することもできます。

ls -l /root/ &>>ls-error.log

標準入力をファイルにリダイレクトする方法

すべてではないにしても、ほとんどのコマンドは標準入力から入力を取得し、デフォルトでは標準入力がキーボードに接続されます。

キーボード以外のファイルから標準入力をリダイレクトするには、以下のように “< ” 演算子を使用します。

cat <domains.list 

標準入出力をファイルにリダイレクトする方法

以下のようにsortコマンドを使用して、標準入力と標準出力のリダイレクトを同時に実行できます。

sort <domains.list >sort.output

パイプを使用した I/O リダイレクトの使用方法

あるコマンドの出力を別のコマンドの入力としてリダイレクトするには、パイプを使用できます。これは、複雑な操作に役立つコマンド ラインを構築する強力な手段です。

たとえば、次のコマンドは、最近変更されたファイルの上位 5 つをリストします。

ls -lt | head -n 5 

ここでのオプションは次のとおりです。

  1. -l – 長いリスト形式を有効にします
  2. -t – 変更時刻で並べ替え、最新のファイルが最初に表示されます
  3. -n – 表示するヘッダー行の数を指定します

パイプラインを構築するための重要なコマンド

ここでは、コマンド パイプラインを構築するための 2 つの重要なコマンドを簡単に説明します。

xargs は、標準入力からコマンド ラインを構築および実行するために使用されます。以下はxargs を使用するパイプラインの例です。このコマンドは、Linux の複数のディレクトリにファイルをコピーするために使用されます。

echo /home/aaronkilik/test/ /home/aaronkilik/tmp | xargs -n 1 cp -v /home/aaronkilik/bin/sys_info.sh

そしてオプション:

  1. -n 1 – xargs に、コマンド ラインごとに最大 1 つの引数を使用し、cp コマンドに送信するように指示します。
  2. cp – ファイルをコピーします
  3. -v – コピー コマンドの進行状況を表示します。

使用方法のオプションと情報の詳細については、 xargs のマニュアル ページを参照してください。

man xargs 

tee コマンドは、標準入力から読み取り、標準出力とファイルに書き込みます。次のようにティーがどのように機能するかを示すことができます。

echo "Testing how tee command works" | tee file1 

ファイル フィルターまたはテキスト フィルターは、効果的な Linux ファイル操作のためのパイプとともに一般的に使用され、コマンドの出力の再構築 (これは有用な Linux レポートの生成に不可欠です)、ファイル内のテキストの変更、およびその他の Linux システム管理などの強力な方法で情報を処理します。タスク。

Linux のフィルターとパイプの詳細については、「Apache サーバーにアクセスする上位 10 個の IP アドレスを検索」の記事を参照してください。フィルターとパイプの使用例が示されています。

この記事では、Linux における I/O リダイレクトの基礎について説明しました。以下のフィードバック セクションを通じてご意見を共有してください。