Linuxのすべてのプロセスには、3つの開いているファイル(通常はファイル記述子と呼ばれます)が用意されています。これらのファイルは、標準の入力、出力、およびエラーファイルです。デフォルト:
- 標準入力 はキーボードであり、シェルスクリプトの記述を容易にするためにファイルとして抽象化されています。
- 標準出力 は、スクリプトを実行するシェルウィンドウまたは端末であり、ファイルとして抽象化されて、スクリプトとプログラムの作成を容易にします。
- 標準エラー 標準出力と同じです:スクリプトが実行されるシェルウィンドウまたはターミナル。
ファイル記述子は、開いているファイルを参照する単なる数値です。デフォルトでは、ファイル記述子 0(ゼロ) 標準入力を指し、多くの場合 stdinと省略されます 。ファイル記述子1は、標準出力( stdout )を参照します )およびファイル記述子2は、標準エラー( stderr )。これらの番号は、特定のファイルにアクセスする必要がある場合、特にこれらのファイルを他の場所にリダイレクトする場合に重要です。ファイル記述子の番号はゼロから増加します。
標準出力のリダイレクト
コマンドの出力をファイルにリダイレクトする構文。
#Command_options_and_arguments> output_file
例:
[メール保護]:〜$ cat / proc / cpuinfo> command.txt
より多くのコマンドで画面に表示されたはずのデータを確認できます:
[電子メールで保護]:〜$ more command.txtプロセッサ:0vendor_id:GenuineIntelcpuファミリ:6model:37モデル名:Intel(R)Core(TM)i3 CPU:MHz pu:0.00コード0 :6144 KBphysical id:0siblings:2core id:0cpu cores:2apicid:0initial apicid:0fpu:yesfpu_exception:yescpuid level:5wp>演算子は、コマンドの出力を指定されたファイルにリダイレクトするようにシェルに指示します。ファイルが存在する場合は、ファイルの古い内容を削除し、コマンドの出力に置き換えます。
コマンドの入力のリダイレクト
コマンドの入力をファイルから取得するようにリダイレクトする構文。
#Command_options_and_arguments
<演算子を使用して、コマンドの入力をリダイレクトします。例を以下に示します:
[メール保護]:〜$ wc -l <command.txt52この例では、「 wc」への入力 ‘コマンドはcommand.txtという名前のファイルから取得されます。シェルは、ファイルcommand.txtの内容をwcコマンドの標準入力として送信します。
注: 次の構文で両方のリダイレクトを組み合わせることもできます:
#command_options_and_agruments
output_file。 標準エラーのリダイレクト
スクリプトまたはコマンドの標準の入力と出力をリダイレクトするだけでなく、標準エラーをリダイレクトすることもできます。デフォルトでは、標準エラーは標準出力と同じ場所(シェルウィンドウまたはターミナル)に送られます。 stdoutとstderrが別々に扱われるのには十分な理由があります。主な理由は、1つまたは複数のコマンドの出力をファイルにリダイレクトできますが、エラーが発生したかどうかを知る方法がないためです。 stderrをstdoutから分離すると、出力がファイルに送信されている間、エラーメッセージが画面に表示されます。
stderrをコマンドからファイルにリダイレクトする構文。
#command_options_and_agruments2>output_file。
2>の2 stderrの記述子番号であるファイル記述子2を参照します。
例:
[メール保護]:〜$ lsash / usr / bin 2>コマンド-error.txt[メール保護]:〜$catコマンド-error.txtコマンド'lsash'が見つかりません、意味:コマンド'sash' fromパッケージ'sash'(universe)lsash:コマンドが見つかりません標準出力と標準エラーの両方をリダイレクトする
2>&1を使用する 標準エラーを標準出力と同じ場所にリダイレクトする構文。
例:1
[メール保護]:〜$ ls / usr / bin> command.txt 2>&1上記のコマンドには3つの部分があります。
- ls / usr/binはコマンド実行です
- >command.txtはlsコマンドの出力をリダイレクトします
- 2>&1は、ファイル記述子2、stderrの出力を、ファイル記述子1、stdoutと同じ場所に送信します。
例:2
[メール保護]:〜$ ls / usr2222 / bin> command.txt 2>&1 [メール保護]:〜$ more command.txtls:/ usr2222 / binにアクセスできません:そのようなファイルまたはディレクトリはありません上記の例では、システムにディレクトリ名「/ usr2222/bin」がないことを前提としていることに注意してください
stderrとstdoutの両方を一度にリダイレクトする
[email protected]:〜$ ls / usr2222 / bin&> command.txt [email protected]:〜$ more command.txtls:cannot access / usr2222 / bin:No such file or directory上記のコマンドでは、lsはコマンドであり、/ usr2222/binは「ls」の引数です。 ‘コマンドと‘ &> command.txt ‘stdoutとstderrの両方をcommand.txtという名前のファイルにリダイレクトします。
ファイルへの追加
「>>」演算子を使用してコマンドの出力をリダイレクトしますが、ファイルが存在する場合はファイルに追加します。構文は次のとおりです:
#コマンド>>file_to_append。
例:
[メール保護]:〜$稼働時間>> sysload.txt [メール保護]:〜$稼働時間>> sysload.txt [メール保護]:〜$稼働時間>> sysload.txt [メール保護]:〜$詳細sysload.txt11:49:17アップ1:22、3ユーザー、負荷平均:0.28、0.12、0.1111:49:28アップ1:22、3ユーザー、負荷平均:0.40、0.15、0.1211:49:36アップ1: 23、3ユーザー、平均負荷:0.33、0.14、0.12ファイルの切り捨て:
>演算子の前のコマンドを省略することにより、ファイルを切り捨てるための省略構文を使用できます。構文は次のとおりです:
#> file_name
コロンを使用した別の形式を使用することもできます:
#:> file_name
これらのコマンドレスコマンドはどちらも、ファイルが存在しない場合はファイルを作成し、ファイルが存在する場合はファイルをゼロバイトに切り捨てます。
[メール保護]:〜$ ls / usr / bin> command.txt [メール保護]:〜$ ls -l command.txt-rw-rw-r-- 1 linuxtechi linuxtechi 19713 Dec212:18コマンド.txt [メール保護]:〜$> command.txt [メール保護]:〜$ ls -l command.txt-rw-rw-r-- 1 linuxtechi linuxtechi 0 Dec 2 12:18 command.txt出力をどこにも速く送信しない
コマンドの出力をリダイレクトするだけでなく、出力を破棄したいというシナリオがいくつかあります。これを行うには、コマンドの出力をnullファイル「/ dev / null」にリダイレクトします。nullファイルは、/ dev / nullがブラックホールの星であるかのように、送信されたすべての出力を消費します。
[メール保護]:〜$ ls / usr / bin> / dev / null注:ファイル/ dev/nullはビットバケツと呼ばれることがよくあります。
おすすめの記事 :LinuxBashシェルスクリプトで暗号化されたパスワードを使用する方法
Linux