Linuxを理解するために、重要な知識がこの正規表現とパイプですので、しっかり理解してください。
標準入出力
前章では、各々のコマンドは一つのプログラムであることを説明しました。
Linuxのプログラムには、1つの入り口と2つの出口があります。それらをそれぞれ標準入力・標準出力・標準エラー出力といいます。出力先は標準出力・標準エラー出力とも同じですが、出力されるまでに通る道が異なると理解してください。
標準入力はユーザがキーボードなどから入力したデータのことを示します。
標準出力はプログラムの実行結果をプログラムを実行した端末のディスプレイ等の出力先を示します。
標準エラー出力はエラーメッセージを書き出す先のことを示しています。出力先は標準出力と同様です。
例えば、lsとコマンドと打った場合、カレントディレクトリのファイルとディレクトリの一覧が画面上に表示されると思います。
このようにコマンドを実行した結果が画面上に表示されることを「標準出力された」と表現します。
リダイレクト
ディスプレイに標準出力された文字列はリダイレクトを使ってファイルに書き込むことが可能です。
リダイレクトは”>”を使って表します。
※リダイレクト:通常ディスプレイに出力するものを指定したファイルに書き込むこと。
次のコマンドはlsコマンドの出力結果をリダイレクトして、ファイルに書き込む例です。
【演習】
/etcディレクトリに移動して、lsした結果をホームディレクトリにls-outputに出力してみてください。
※既にls-outputファイルが存在しているときは、前のls-outputファイルが削除され、新しいls-outputファイルが作成されます。上書きせず、追記したい場合はアペンド(>>)の記号を用います。
次にcatコマンドとリダイレクトを組み合わせて、自由な内容でファイルを作成してみましょう。
データの入力が終わったら、Ctrl+D(End of File)でリダイレクトを終了しましょう。
標準エラー出力
コンピュータを操作していると様々なエラーが発生することがあります。Linuxではエラーは画面とログファイルに出力されます。例えば、以下のコマンドを実行してみてください。
その結果、エラーメッセージが表示され、catコマンドで出力先のファイルを見ると何も書き込まれていないことが確認できたと思います。
リダイレクトの”>”は標準出力結果のみファイルに出力するので、エラーの結果をファイルに出力したい場合は”2>”を用います。
では、さきほどのコマンドを”2>”を用いて実行してみましょう。
catコマンドで出力したファイルの中身を見るとエラーメッセージが書き込まれているのが確認できます。
また、標準エラー出力を標準出力としてファイルに出力することも可能です。
その場合は以下のように入力します。
2は標準エラー出力を示し、1は標準出力を示しています。
“2>&1″と入力することで”標準エラー出力を標準出力として出力する”という意味になります。
パイプ
前項までは、ファイルを相手にした入出力(リダイレクト)について説明してきました。ここでは、コマンドを相手にした入出力について学んでいきましょう。すなわち、コマンドの結果を画面やファイルに出力せず、直接的に他のコマンドの入力にしてしまうテクニックです。
次のコマンドを実行してみてください。
/usr/binディレクトリはコマンドの実行ファイルが1000以上あるため、そのままではすべての出力結果を画面に表示させることができません。
ここで次のように入力してみてください。
その結果、lsコマンドで/usr/binディレクトリのファイル一覧を表示させた結果がページャ機能で全て見ることができたと思います。
このように、lsコマンドの結果を画面に出力せず、その結果をlessコマンドに受け渡す機能がパイプ(|)です。
パイプを使うことで複数のコマンドを連結させることができるので、作業の高速化を図ることができます。
【演習】
ls -l /usr/binとwcコマンドをパイプを用いて実行してみましょう。また、wcコマンドは何を行うコマンドか考えてみましょう。
grepコマンド
ファイルに書かれている文字列(データ)を検索したいときはgrepコマンドを用います。また、| grepとすることで、標準入力から入ったデータに対して検索を行なうことも可能です。
1 |
grep オプション 検索条件 指定ファイル |
【オプション】
指定できるファイルは1つだけではなく、*のようなワイルドカードを利用して複数のファイルを指定することも可能です。
ワイルドカードとは、不特定の文字列を表現するのに利用される記号の事です。検索条件は、正規表現が用いられます。正規表現を用いることで様々なパターンで高度な検索を行うことができます。
【正規表現んで使われる記号と意味】
正規表現の利用例】
【例】/etcディレクトリにあるファイルでabcという文字列を含むものを検索する。
上図は検索結果の一部です。一致する文字列が含まれていた場合は、赤文字で示されます。
【演習】
/etcディレクトリにあるファイルで行の先頭がxyではじまっているものを検索する。
オプション-iを用いて、/etcディレクトリにあるhostnameという文字列を含むファイルを検索する。
また、標準出力の結果をgrepコマンドで検索することも可能です。
以下のコマンドを実行してみてください。
lsコマンドで/usr/binディレクトリのファイル一覧を取得し、その中からファイル名がdで終わるファイルを検索しているのが分かります。