パイプとリダイレクト

LPIC

標準入出力とは

Linuxではファイルからの読み込みも、キーボードからの入力も、どちらも同じ「入力」として扱います。
ファイルへの書き込みと、画面への出力(表示)も同じ「出力」です。
こういったデータの入出力のことを「ストリーム」と言います。

ストリームは、標準入力、標準出力、標準エラー出力の3種類があります。

(その1)標準入力

実行するプログラムへの入力ストリームです。
1+1=2の「1+1」の部分です。「=」がプログラムやコマンドです。
標準入力のデフォルトはキーボードです。

(その2)標準出力

プログラムを実行した結果の出力ストリームです。
1+1=2の「2」の部分です。
標準出力のデフォルトは画面(端末)です。

(その3)標準エラー出力

プログラムが異常終了した時のエラーメッセージの出力ストリームです。
1÷0=「エラー:ゼロで除算しました」のメッセージです。
標準エラー出力のデフォルトは画面(端末)です。

パイプとは

Linuxではコマンドの出力結果を、別のコマンドの入力に渡すことができます。
これをパイプと言って、記号「|」を使います。

つまりコマンド標準出力を、次のコマンド標準入力につなげます。

よく使われる例として、下記のように grep と組み合わせるやり方があります。

ps aux | grep ssh

上の例だと実行プロセスの一覧から「ssh」が含まれる行のみを表示します。
ただし、そのままだと「grep ssh」自身のプロセスも表示されるため、以下のようなやり方もよく使われます。

ps aux | grep ssh | grep -v grep

※最後の「grep -v grep」は、「-v」は指定の文字列とマッチしない行を出力するオプションなので、「grep」という文字列を含まない行が出力されます。

teeコマンドの併用

コマンド実行結果をファイルに保存しつつ、画面にも表示したい時などは、パイプだけでは実現できないので tee コマンドを使います。

tee コマンドは標準入力から受け取ったデータを標準出力に渡すと同時にファイルにも出力します。出力をT字型に分岐させるのでティーと言います。

ps aux | grep ssh | grep -v grep | tee ps.txt

上の例だと ps (実行プロセス一覧)の結果から ssh が含まれる行を抽出した結果を ps.txt というファイルに保存しつつ画面にも表示しています。

リダイレクトとは

コマンドへの入力や出力にファイルを使いたい時に便利なのがリダイレクトです。

出力結果をファイルに書き込む。

echo "abc" > test.txt

出力結果をファイルに追記する。

echo "def" >> test.txt

ファイルから入力してコマンド実行

grep "def" < test.txt

特定文字列が入力されるまで入力を続ける(ヒアドキュメント)。

cat > test2.txt <<EoF
> abc
> def
> ghi
> EoF  #これでtest2.txtが生成される

上の例では cat の出力をファイルtest2.txtにして、入力をキーボード(EoFという文字列が入力されるまで続く)としています。
結果として test2.txt というファイルの内容を直接入力しています。

書式説明
コマンド > ファイルコマンドの標準出力をファイルに書き込む
コマンド >> ファイルコマンドの標準出力をファイルに追記する
コマンド < ファイルファイルの内容をコマンドの標準入力に送る
コマンド << 終了文字終了文字が入力されるまでコマンドの標準入力に送る
コマンド 2> ファイルコマンドの標準エラー出力をファイルに書き込む
コマンド 2>> ファイルコマンドの標準エラー出力をファイルに追記する
コマンド &> ファイルコマンドの標準出力と標準エラー出力をファイルに書き込む
コマンド > ファイル 2>&1コマンドの標準出力と標準エラー出力をファイルに書き込む
コマンド >> ファイル 2>&1コマンドの標準出力と標準エラー出力をファイルに追記する
コマンド1 > tee ファイル > コマンド2コマンド1の標準出力をファイルに書き込みしてコマンド2の標準入力にも渡す
コマンド > /dev/null 2>&1コマンド実行時に何も出力しないようにする

LPIC試験勉強の教科書・参考書

LPICの試験勉強には下記の本が役立ちます。

Linux教科書LPICレベル1(あずき本)はLinuxのシステムやコマンドを基礎からしっかりと理解できるようになります。これ一冊だけでもなんとかなりますが、初心者にはやや難しいところもあります。
LPICレベル1 スピードマスター問題集はLPICの試験直前の仕上げにやるとほぼ合格できるようになります。ただし基礎を理解せずに問題集だけをやってもあまり意味がないので、まずはあずき本のような教科書を読んで理解しておくことは必須です。
1週間でLPICの基礎が学べる本は、Linux初めてという方や、あずき本の内容が難しく感じた人向けで、LPICの勉強のとっかかりに良いと思います。

LPICは初心者の方でもちゃんと勉強すれば必ず取得できます。
これらの教科書をしっかりと読み込み、わからない箇所を調べながら勉強すれば、独学でも十分LPICレベル1に合格することが可能です。

コメント