Linuxコマンドラインのためのパイプとリダイレクションの理解
Linuxコマンドラインシェルの2つの強力な機能は、リダイレクションとパイプで、プログラムの出力(または入力)をファイルや他のプログラムに送信することを可能にします。この機能は、意識せずにすでに使用しているかもしれません。“ > ”記号をコマンドで使用したり、” | ”を使用したりするたびに、リダイレクションまたはパイプを使っていることになります。
すべてのUnix系オペレーティングシステム、LinuxやFreeBSDのような、では、コマンドラインプログラムの出力は自動的に標準出力(stdout)と呼ばれる場所に送られます。デフォルトでは、標準出力は画面(コンソール)ですが、これはパイプとリダイレクションを使用して変更できます。同様に、キーボードは標準入力(stdin)と見なされ、標準出力と同様に変更することができます。
パイプ
パイプは、1つのコマンドの出力を別のコマンドに流し込み、それを入力として使用することを可能にします。言い換えれば、1つのプログラムの標準出力が別のプログラムの標準入力になります。
“ more ”コマンドは標準入力を取り、標準出力(画面)上でページ分けします。これは、あるコマンドが1つの画面に表示できる以上の情報を表示した場合、“ more ”プログラムが最初の画面(ページ)が表示された後に一時停止し、ユーザーが次のページを見るためにSPACEを押すのを待つか、次の行を見るためにRETURNを押すのを待つことを意味します。
ここに、/devディレクトリ内のすべてのファイルを詳細( -la)付きでリストし、その出力をmoreにパイプする例があります。/devディレクトリには数十のファイルがあるはずなので、moreでページ分けされる必要があります。
ls-la/dev |more
画面の下部に表示される--More--プロンプトに注意してください。次のページを見るためにSPACEを押し、出力が終わるまでSPACEを押し続けてください。
もう一つのパイプの例です。今度は“ wc ”(単語数)ツールを使用します。
ls-1/dev |wcwcは、標準入力内の行数、単語数、文字数をカウントします。-lパラメータを使用すると、行数のみが表示され、ディレクトリ内のファイル数を確認するのに良い方法です!
Linuxのアーカイブと圧縮コマンドに関するチュートリアルには、tarと7-Zipを一緒に使用する例があります。
tar cvf - *| 7zr a -si somefiles.tar.7zこの場合、fオプションの後のハイフンは、tarにその出力を標準出力に送信し、ファイルには送信しないことを示します。tarからの出力は、-siオプションのために標準入力からの入力を待っている7zrのパイプに流れ込まれます。
リダイレクション
リダイレクションは、別のプログラムを使用するのではなくファイルを使用する点でパイプと似ています。プログラムの標準出力は画面です。>(グレーターザン)記号を使用すると、プログラムの出力をファイルに送信できます。再び/devのディレクトリリストですが、今度はlisting.txtというファイルにリダイレクトされています。
ls-la> listing.txtすべてがファイルに送信されたため、ターミナルには何も表示されません。catコマンドを使用してファイルを確認することができます(moreにパイプすることもできます)が、便利さのためにそのままmoreコマンドを使用することもできます:
more listing.txtもしlisting.txtが既に存在していた場合、上書きされます。しかし、>>を使用して既存のファイルに追加することもできます。以下のように:
ls-la/home > listing.txt
ls-la/dev >> listing.txt最初のリダイレクションはlisting.txtを上書きし、2番目はそれに追加します。
catコマンドを使用してリダイレクションを用いてファイルを作成することができます。例えば:
cat> atextfile.txtこれで、あなたが入力するテキストはすべてatextfile.txtに送信されます。Control-Dを押すまで、ファイルは閉じられ、コマンドプロンプトに戻ります。ファイルにさらにテキストを追加したい場合は、同じコマンドを2つの大なり記号( >>)を付けて使用します。
結論
Linuxコマンドラインプログラムの多くは、リダイレクションとパイプで動作するように設計されています。これらを試してみて、どのように相互作用するかを見てみましょう。たとえば、現在のプロセスをリストするpsコマンドの出力は、grepにパイプすることができます。ルートによって所有されているプロセスをリストする方法を見つけられるか試してみてください!