Linux管理で最も重要で興味深いトピックの1つは、I/Oリダイレクトです。コマンドラインのこの機能を使用すると、コマンドの入力および/または出力をファイルとの間でリダイレクトしたり、パイプを使用して複数のコマンドを結合して「コマンドパイプライン」と呼ばれるものを形成したりできます。 」。
基本的に実行するすべてのコマンドは、2種類の出力を生成します。
- コマンドの結果–プログラムが生成するように設計されたデータ、および
- プログラムの実行の詳細をユーザーに通知するプログラムのステータスとエラーメッセージ。
Linuxおよびその他のUnixライクなシステムでは、以下に名前が付けられた3つのデフォルトファイルがあり、これらもファイル記述子番号を使用してシェルによって識別されます。
- stdinまたは0 –キーボードに接続されており、ほとんどのプログラムはこのファイルから入力を読み取ります。
- stdoutまたは1 –画面に添付され、すべてのプログラムが結果をこのファイルに送信し、
- stderrまたは2 –プログラムは、画面に添付されているこのファイルにステータス/エラーメッセージを送信します。
したがって、I / Oリダイレクトを使用すると、コマンドの入力ソースと、その出力メッセージおよびエラーメッセージの送信先を変更できます。そしてこれは“ <”
によって可能になります および“>”
リダイレクト演算子。
Linuxで標準出力をファイルにリダイレクトする方法
以下の例のように標準出力をリダイレクトできます。ここでは、後で検査するためにtopコマンドの出力を保存します。
$ top -bn 5 >top.log
フラグの場所:
-
-b
–トップを有効にします バッチモードで実行して、出力をファイルまたは別のコマンドにリダイレクトできるようにします。 -
-n
–コマンドが終了するまでの反復回数を指定します。
top.log
の内容を表示できます 次のようにcatコマンドを使用してファイルします:
$ 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
次のように、標準出力と標準エラーを1つのファイルに追加することもできます。
$ ls -l /root/ &>>ls-error.log
標準入力をファイルにリダイレクトする方法
すべてではないにしてもほとんどのコマンドは標準入力から入力を取得し、デフォルトでは標準入力がキーボードに接続されています。
キーボード以外のファイルから標準入力をリダイレクトするには、“ <”
を使用します 以下の演算子:
$ cat <domains.list


標準の入力/出力をファイルにリダイレクトする方法
以下のようにsortコマンドを使用して、標準入力と標準出力のリダイレクトを同時に実行できます。
$ sort <domains.list >sort.output
パイプを使用したI/Oリダイレクトの使用方法
あるコマンドの出力を別のコマンドの入力としてリダイレクトするには、パイプを使用できます。これは、複雑な操作に役立つコマンドラインを構築するための強力な手段です。
たとえば、次のコマンドは、最近変更された上位5つのファイルを一覧表示します。
$ ls -lt | head -n 5
ここで、オプション:
-
-l </ code> –長いリスト形式を有効にします
-
-t
–最新のファイルが最初に表示される変更時間で並べ替える -
-n
–表示するヘッダー行の数を指定します
パイプラインを構築するための重要なコマンド
ここでは、コマンドパイプラインを構築するための2つの重要なコマンドを簡単に確認します。それらは次のとおりです。
xargs これは、標準入力からコマンドラインを構築および実行するために使用されます。以下は、 xargsを使用するパイプラインの例です。 、このコマンドは、Linuxの複数のディレクトリにファイルをコピーするために使用されます:
$ echo /home/aaronkilik/test/ /home/aaronkilik/tmp | xargs -n 1 cp -v /home/aaronkilik/bin/sys_info.sh


そしてオプション:
-
-n 1
–コマンドラインごとに最大1つの引数を使用し、cpコマンドに送信するようにxargsに指示します -
cp
–ファイルをコピーします -
-v
–コピーコマンドの進行状況を表示します。
その他の使用オプションと情報については、 xargsをお読みください。 マニュアルページ:
$ man xargs
ティー コマンドは標準入力から読み取り、標準出力とファイルに書き込みます。 ティーの方法を示すことができます 次のように機能します:
$ echo "Testing how tee command works" | tee file1


ファイルまたはテキストフィルターは、効果的なLinuxファイル操作のためにパイプで一般的に使用され、コマンドの出力の再構築(これは有用なLinuxレポートの生成に不可欠です)、ファイル内のテキストの変更、およびその他のLinuxシステム管理などの強力な方法で情報を処理します。タスク。
Linuxのフィルターとパイプの詳細については、この記事を読んでください。Apacheサーバーにアクセスする上位10個のIPアドレスを検索し、フィルターとパイプを使用する便利な例を示します。
この記事では、LinuxでのI/Oリダイレクトの基本について説明しました。以下のフィードバックセクションであなたの考えを共有することを忘れないでください。