Linuxにおけるパイプとリダイレクトの使い方

スクールのLinux講座を受講しています。パイプとリダイレクトの使い方を勉強したのでメモしておきます。

パイプ

Linuxの大きな特徴の一つに、コマンドやプログラムが出力したものを、他のコマンドやプログラムの入力に引き渡してしまうことができる、というものがあります。この際に使われる機能がパイプ(パイプライン)で、「|」の記号で表されます。

それでは、パイプの例を見てみましょう。

wcコマンドという、ファイル内の行数、単語数、文字数を数えるコマンドを例にとって見てみます。
以下のコマンドを実行しましょう。

ls | wc -l

すると、lsコマンドの実行結果であるカレントディレクトリ内のファイル、ディレクトリ一覧がwcコマンドにパイプを通じて引き渡され、wcコマンドが渡されたファイル、ディレクトリ一覧の行数を数えることで最終的にファイル、ディレクトリ数が標準出力に出力されます。

実行結果
11

※カレントディレクトリにファイルとディレクトリが合計11個ある場合に11と出力されます。

リダイレクト

Linuxではコマンドの実行結果は、パイプを使わずに実行した場合、通常画面に出力されます。また、コマンドへの入力には、通常キーボードが使われます。

コマンドの実行結果を端末の画面に出力するのではなく、ファイルに保存したい場合や、コマンドを端末に直接入力するのではなく、あらかじめ用意しておいたファイルを使う場合等、出力先、入力元を変更したい場合があります。

その様な場合に役立つ機能がリダイレクト(リダイレクション)という機能です。

【書式】 標準出力コマンド > リダイレクトするファイル名

それでは、実際に試してみましょう。

lsコマンドの実行結果を、通常なら端末の画面に出力されるところを「redirect.txt」というテキストファイルに保存します。
以下のコマンドを実行しましょう。

ls > redirect.txt

すると、lsコマンドの実行結果であるカレントディレクトリ内のファイル、ディレクトリ一覧がredirect.txtへリダイレクト(書き込み)されます。

ただし「>」を使用したリダイレクトは、リダイレクトするファイルが存在していた場合そのファイルの中身を削除して上書きしてしまいます。リダイレクト結果を既存のファイルに追記する場合には「>>」を使用します。

参考資料
スクールの教科書