あるコマンドの実行結果を別のコマンドに受け渡す機能を「パイプ」といいます。一般に,個々のLinuxのコマンドはシンプルな機能しか備えていませんが,パイプ機能で複数のコマンドをつなぐことで,複雑な処理を1行で処理できます。
コマンドとコマンドをつなぐには,パイプ記号「|」を使います。
|
例えば,「/etc/services」ファイルに行番号を付け,最下部の15行を表示したいとしましょう(/etc/servicesファイルは,ネットワーク・サービスとポート番号の対応が記述された約1万行のシステム・ファイルです)。
まず,「cat」コマンドと「tail」コマンドを説明します。catコマンドに「-n」オプションを指定すると,ファイルの各行に行番号を付与します。/etc/servicesファイルに行番号を付けるには以下のコマンドを実行します。
|
コマンドの実行結果が写真1です。/etc/servicesファイルが1万399行であることが分かります。
最下部の任意の行を表示するには「tail」コマンドを使います。表示する行数は「-n」オプションの後に数字で指定します。/etc/servicesファイルの最下部の15行を表示するには,以下のコマンドを実行します。
|
catコマンドとtailコマンドをパイプ機能で接続すれば,目的の処理を1行のコマンドで実行できます。
|
コマンドの実行結果が写真2です。/etc/servicesファイルに行番号を付与して,最下部の15行を表示することができました。
何段ものパイプをつなぐことも可能です。例えば,Webサーバー「Apache HTTP Server」のアクセス・ログからアクセス元のIPアドレスを抽出して一覧するには,次のようにします。
|
「cut -d " "-f 1」は各行のデータをスペースで区切って1番目のフィールドを抜き出すコマンドです。sortでそれをソートし,uniqで重複がないようにします。