Linuxを使いこなす上で、絶対にマスターしておきたいのが「コマンドライン操作」だ。この特集では、コマンドライン操作に苦手意識を持つ人に向けて、「シェル」や「端末」などの根本的な仕組みからコマンド操作の基本や活用方法までを解説する。
UNIX系OSのコマンドの多くは、組み合わせて利用できるように作られています。上手に組み合わせることで、さまざまな処理に柔軟に対応できます。Part4では、そうした使い方をするために必要な知識について解説します。
コマンドを実行すると、その実行状態である「プロセス」が作成されます。LinuxなどのUNIX系OSでは、多くのCUIコマンド*1のプロセスが「標準入力」「標準出力」「標準エラー出力」という三つの入出力先(これを「標準入出力」と呼びます)を利用します(図1)。標準入力はデータの入力に、標準出力はデータの出力に使われます。最後の標準エラー出力はエラーメッセージの出力に使われます。
標準入力には端末入力(キーボード)が、標準出力と標準エラー出力には端末出力(画面)がデフォルトで割り当てられています。そのため、コマンドがキーボードから入力を受け付けたり、端末に対して情報を出力したりできるのです。
標準入力のデータ入力元や、標準出力、標準エラー出力のデータ出力先は自由に変更できます。それによって、あるコマンドの出力を別のコマンドの入力として使うことができます。これを活用して複数のコマンドをうまく組み合わせることで、さまざまな処理が可能になります。
リダイレクトとパイプ
標準入力のデータ入力元や、標準出力、標準エラー出力のデータ出力先を(主にファイルに)変更する操作を「リダイレクト」と呼びます。入力元のリダイレクトには「<」、出力先のリダイレクトには「>」「>>」という記号を使います。
次のコマンドを実行すると、ファイルを検索する「find」コマンドの出力を「file.lst」ファイルに書き込みます。file.lstが存在していた場合、それに記録されていたデータは消去されます。また、file.lstが存在していない場合には新規に作成されます。
次のコマンドを実行しても、同様にfindコマンドの出力をfile.lstファイルに書き込みます。しかし、file.lstが存在していた場合には、それに記録されていたデータを消去せずに、新しいデータを追記する点が異なります。file.lstが存在していない場合には新規に作成されます。
次のコマンドを実行すると、file.lstの内容が、行数をカウントする「wc -l」コマンドに(標準入力を通じて)入力されます。その結果として、file.lstの行数が表示されます。
一方、あるコマンド(プロセス)の標準出力を、別のコマンド(プロセス)の標準入力に接続するのが「パイプ」(「パイプライン」とも呼ぶ)の役割です(図2)。パイプによる接続を実現するには、コマンド間を「|」でつないで実行します。
次のコマンドを実行すると、カーネルメッセージを出力する「dmesg」コマンドの標準出力を、「less」コマンドの標準入力に接続します*2。これによって、カーネルメッセージをページ単位に閲覧できます。