Bashプログラミング
 Computer >> コンピューター >  >> プログラミング >> Bashプログラミング

マスター Linux ターミナル:パイプとリダイレクトのエキスパート ガイド

マスター Linux ターミナル:パイプとリダイレクトのエキスパート ガイド

Linux のコマンド ライン インターフェイスは、システム上でさまざまなタスクを実行する強力な方法を提供します。 Linux はそのルーツにより、ターミナルに多くの機能が組み込まれています。

これらの強力な機能のうちの 2 つは、パイピングとリダイレクトです。これらの機能を使用すると、コマンドの出力と入力を他のコマンドやファイルとの間でリダイレクトできます。

この記事では、Linux におけるパイプとリダイレクトの意味を学び、その後、これらの機能を自分で使用する方法を詳しく説明します。

前提条件

このガイドを完全に理解するには、少なくとも次のものを備えている必要があります。

  • Linux オペレーティング システムの基本的な理解
  • Linux コマンド ラインを使用した基本的な経験。
  • Linux コマンドラインにアクセスしてコマンドを試す

初めての方、または復習が必要な場合は、この Linux コマンド ライン チュートリアルをご覧ください。

Linux におけるパイピングとは何ですか?

その方法について説明する前に、配管とは一体何を意味するのでしょうか?パイプ処理は、ある Linux コマンドの出力を別のコマンドの入力として送信する行為です。パイプを使用して、標準出力または標準エラーを 1 つのコマンドから別のコマンドに送信できます。

パイピングの簡単な例は、1 つのコマンドの出力を取得し、それを別のコマンドへの入力として使用する場合です。これを実現するために、パイプ (|) メタ文字が使用されます。

メタキャラクターの概念に慣れていない人のために説明すると、これはコマンド ラインで特別な意味を持つ文字の単なる派手な名前です。 Linux にはパイプ (|) 以外にもメタキャラクターがあります。一般的な例には、いくつか例を挙げると、より小さい (<)、より大きい (>)、アンパサンド (&) などがあります。

配管の基本

pipe を使用する基本的な構文 コマンドは次のとおりです。

command1 | command2 | command3 | ... | commandN

上記の構文では、ターミナルは左から右にコマンドを実行します。 command1 で始まります 、その後、出力は command2 に入力されます。 。 command2 の出力 その後、command3 の入力として使用されます。 など。パイプの利点は、必要なだけコマンドを連鎖できることです。

配管例

以下に、pipe の使用例をいくつか示します。 さまざまなタスクを実行するコマンド。

1.ファイルとディレクトリの数を数える

ls -l | wc -l

上記の例では、最初のセクションでは、ls を使用して現在のディレクトリ内のすべてのファイルとディレクトリをリストします。 コマンド。追加の -l オプションは ls に伝えます 内容を長いリスト形式でリストするコマンド。

ls -l の出力 コマンドは 2 番目のセクションにパイプ処理されます。 wc -l コマンドは、ls -l の出力から行数をカウントします。 最初のセクションでコマンドを実行し、結果を端末に出力します。

2.ファイルとディレクトリのリストを並べ替える

ls | sort

上記のコマンドでは、ls コマンドは、現在のディレクトリ内のファイルとディレクトリのリストを出力します。次にリストは sort にパイプされます。 コマンドを実行すると、それらがアルファベット順に並べ替えられ、結果が端末に出力されます。

3.ファイル内の固有の単語を並べ替えて表示します

cat words.txt | sort -r | uniq

3 番目の例には、2 つのパイプで接続された 3 つの個別のコマンドが含まれています。最初のコマンドは、words.txt の内容を出力します。 ファイルには単語のリストが含まれています。

出力は sort -r にパイプされます。 コマンド。単語をアルファベットの逆順に並べ替えます。最後に、並べ替えられた単語が uniq にパイプされます。 コマンド。重複を削除し、一意に並べ替えられた単語を出力します。

コマンド パイピング Linux を適用する理由とタイミングを教えてください。

パイプ処理には、構文を理解するだけでは不十分です。構文は非常に単純です。配管を効果的に使用するには、その本質を理解する必要があります。

パイプ処理の目的は、あるコマンドの出力を別のコマンドの入力として使用してコマンドを連鎖できるようにすることです。

パイプ処理は、連続して実行したい関連性のないコマンドを連鎖させる方法を意図したものではありません。これを行う必要がある場合は、ターミナルに次の構文を使用してコマンドをセミコロン (;) で区切って記述します。

command1 ; command2 ; ... ; commandN

Linux のリダイレクトとは何ですか?

リダイレクトは、コマンドの入力または出力の送信先を指定する行為です。デフォルトでは、コマンドは標準入力からデータを受け取り、結果を標準出力に出力します。

リダイレクトが役立つ主な領域の 1 つは、コマンドやファイルを操作する場合です。たとえば、コマンドの出力を端末に出力する代わりにファイルにリダイレクトできます。あるいは、特定のファイルをコマンドへの入力として宣言することもできます。

パイプと同様に、Linux にはリダイレクトを実行するための特殊文字が用意されています。 Linux における重要なファイル リダイレクト文字とその機能は次のとおりです。

  • > – コマンドの出力を指定されたファイルに送信します。
  • < – 指定されたファイルの内容をコマンドに送信します。
  • >> – コマンドの出力を指定されたファイルに送信します。ファイルが存在し、コンテンツがある場合は、出力を追加します。
  • 2> – コマンドからのエラー メッセージを指定されたファイルに送信します。
  • 2>> – コマンドからのエラー メッセージを指定されたファイルに送信します。ファイルが存在し、内容がある場合は、エラー メッセージを追加します。
  • &> – 標準出力とエラーを指定されたファイルに送信します。
  • &>> – 標準出力とエラーを指定されたファイルに送信します。ファイルが存在し、内容がある場合は、ファイルに追加します。

各ファイル リダイレクト文字を詳しく見てみましょう。

1. > による出力リダイレクト

> シンボルを使用すると、コマンドの出力を特定のファイルにリダイレクトできます。シンボルを使用すると、出力を既存のファイルにリダイレクトできます。存在しない場合は、出力リダイレクト文字によって自動的に新しい文字が作成されます。

ただし、既存のファイルに書き込む場合は、その内容が警告なしに上書きされるため、注意が必要です。

次の構文を使用して出力リダイレクトを実行できます。

command > file

command を実行した場合の出力 file に書き込まれます 標準出力 (つまり、端末に出力) の代わりに。出力リダイレクトを行う方法の例を次に示します。

ls -a > contents.txt

上記のコマンドでは、現在のディレクトリ内の項目のリスト (ドットファイル、ディレクトリ、ファイルを含む) が contents.txt に書き込まれます。 ファイル。リダイレクトのため、ターミナルには出力が表示されません。

2. >> による出力リダイレクト

>> コマンドの出力をファイルにリダイレクトできます。ただし、単一の不等号文字 (>) を使用するのとは異なります。 )、>> 既存のファイルに書き込もうとすると、(その内容を上書きするのではなく) 出力が追加されます。ファイルが存在しない場合は、新しいファイルが作成されます。

構文は次のとおりです。

command >> file

>> で出力リダイレクトを使用する例を次に示します。 前と同じアクションを実行するには:

ls -a >> contents.txt

3. < による入力リダイレクト

< コマンド ラインの文字を使用すると、入力をキーボードではなくファイルからコマンドにリダイレクトできます。 < を使用した入力リダイレクトの構文 は次のとおりです。

command < file

入力リダイレクトの使用例を次に示します。

wc -w < files.txt

上の例では、files.txt を渡しています。 wc -w への入力として ファイル内の単語数をカウントするコマンド。ただし、入力リダイレクト文字はデフォルトの動作であるため、多くのシナリオで使用する必要はありません。たとえば、上記のコマンドは次のようになります。

wc -w files.txt

4. 2> によるエラー リダイレクト および 2>>

コマンドラインで作業していると、エラーが発生する場合があります。たとえば、適切なアクセス許可なしでファイルを実行したい場合です。ターミナルにエラーを出力してスローさせる代わりに、エラー リダイレクト文字を使用してエラー メッセージの送信先を指定できます。

エラーをリダイレクトするのに適した場所は、エラーの保存専用のファイルです。以下は、存在しないディレクトリ内のファイルのリストにアクセスしようとするコマンドの簡単な例です。

ls nonexistent 2> error.txt

上の例では、nonexistent という名前のファイルがないため、ターミナルはエラーをスローします。 。ただし、コンソールに出力する代わりに、error.txt に保存されます。 リダイレクト文字エラーが原因でファイルが破損しました。ただし、エラーがなければファイルには何もありません。

既存のファイルの内容を上書きするのではなく、エラーを追加する必要がある場合は、2>> を使用します。 2> の代わりに .

5. &> による出力とエラーのリダイレクト と &>>

標準出力または標準エラーをファイルにリダイレクトするかどうかを選択する代わりに、&> 両方を同時にリダイレクトできます。 &> を考えることができます。 出力リダイレクト (>) 文字とエラー リダイレクト (2>) 文字を組み合わせる短縮形として使用されます。

&> を使用する構文 は次のとおりです。

command &> output.txt

command のエラーまたは出力 output.txt に書き込まれます ファイル。以下に例を示します。

ls sample &> output.txt

上記のコマンドで、sample が ディレクトリが使用できないか、使用可能でも読み取り権限がない場合は、適切なエラーが output.txt に書き込まれます。 ファイル。ただし、それが存在し、読み取り権限がある場合、その内容は output.txt に出力されます。 ファイル。

&>> を使用する ファイルが存在し、内容がある場合、出力をファイルに追加できます。

パイプとリダイレクトを組み合わせてコマンド ラインの力を最大限に引き出す方法

パイピングとリダイレクトを組み合わせて使用すると、複雑な操作を重労働なしで実行できます。 2 つを組み合わせる方法を学ぶことで、より少ない入力でさまざまなアクションを実行する複雑なコマンドを作成できます。

例として次のコマンドを取り上げます。

ls | grep ".txt" > text_files.txt

ls コマンドは、現在のディレクトリの内容を一覧表示します。出力は grep にパイプされます。 テキスト ファイルをフィルタリングするコマンド。最後に、grep の出力 コマンドは text_files.txt にリダイレクトされます。 ファイル。

このシンプルかつ強力な例は、パイプとリダイレクトに関しては、唯一の制限はあなたの心だけであることを示しています。

結論

このチュートリアルでは、Linux でのパイプとリダイレクトの基本を学びました。基本について、この 2 つの使用方法の例とともに説明しました。

2 つの機能は単独でも強力ですが、最後のセクションで示したように、コマンド内でこれらを組み合わせることで、さらに高度な機能を実現できます。

無料でコーディングを学びましょう。 freeCodeCamp のオープンソース カリキュラムは、40,000 人以上の人々が開発者としての職に就くのに役立ちました。始めましょう


  1. Nagios 3.0 を使用したリモート Linux ホストの監視:ステップバイステップ ガイド

    前回の記事 Nagios 3.0 ジャンプスタート ガイド では、Red Hat Server での Nagios 3.0 の概要、インストール、設定について説明しました。次の 3 章では、リモート Linux ホストとリモート ホスト上で実行されているさまざまなサービスを監視する方法を説明します。  また、Nagios に関するすべての記事も参照してください。   I. 概要 II. Nagios プラグインと NRPE をリモート ホストにインストールする 6 つのステップ。 Nagios プラグインと NRPE アドオンをダウンロードする nagios アカウントを作成する Na

  2. Linuxコマンド-知っておくべき基本的なBashコマンドラインのヒント

    Linuxには大量のコマンドがありますが、ほとんどの人はそれらのほんの一部しか使用していません。ターミナルで使用する最もよく使用されるLinuxコマンドのいくつかを次に示します。 最初に、コマンドラインを使いやすくするためのヒントをいくつか紹介します。 オートコンプリートにはタブを使用します。 Linuxターミナルで何かを入力し始めたら、Tabキーを押すと、これまでに入力した文字列で始まる可能なオプションが提案されます。 ctrl+r search_termを使用します 以前に使用したコマンドを検索します。 ctrl+aを使用して行の先頭または末尾にすばやく移動します およびctrl