Linuxのパイプラインとは、複数のコマンドを組み合わせて使うための手段だ。
パイプとは「|」のことを指していて、パイプによっていくつものコマンドを組み合わせて複雑な処理ができるようになる。
このページではLinuxのパイプラインについてご紹介しよう。
目次
パイプラインとは?
パイプライン
「パイプライン」とは少々難しく言うと、「コマンドの入出力をコマンドへ引き渡す処理」のことを指す。
LinuxなどのUnix Like Systemのコマンド、特にコマンドラインで使われる。「パイプ」とは直訳すると「配管」だ。このパイプを通して、入出力の情報がやりとりされる。
小さなコマンドをパイプで連結することによって、複数のコマンドがまるで一つのプログラムのように動作する。その出力結果を自由に操ることができるわけだ。
コマンドをつなぐ
後ほど詳しく説明するが、例えば「ls -1 | sort -r」 などだ。
ぜひLinuxを立ち上げて、叩いてみてほしい。
lsの結果をsortコマンドで逆順ソートした結果がかえってくる。簡単な例だがもっと複雑にコマンドを、複数連結することも可能だ。
パイプとコマンドは幾つでも連結可能だが、大体多くても3つぐらいで大概の用はすむことが多い。
Unix Like Systemのコマンドが単機能的なのにはパイプ機能が背景にある。Unix哲学では「小さいことは美しい」「プログラムはフィルタとして動作するようにすべき」という、教示があるのだ。
パイプラインは、コマンドを繋げていくだけなので、複雑なアルゴリズムなどはぬきにして使える。「プログラミングは苦手」という人でも何度か触れば感覚がつかめるだろう。ぜひチャレンジしてほしい。
ちなみに、「|」は「Shift+\(¥)」で入力できる。
実際にパイプを使って見る
基本的な使い方
では実際にやってみよう。どのように記述するのかというと、いたってシンプルだ。
$ <command> | <command> |...
となる。コマンドとコマンドの間にパイプを挟んでいく。
例えば、次のように打ってみてほしい。<hoge>の部分はあなたのユーザ名でいいだろう。
$ ps aux| grep <hoge> | sort -r
ps auxの結果をgrep <hoge>でhogeの含まれる行を抽出、それをsortで並びかえた結果がえられる。
grepコマンドではパイプがよく使われる。
上の例では、三つのコマンドがパイプによって接続され動作したのだ。これを「>」などのリダイレクトを利用するとファイルへ保存可能だ。
いくつかの例
いくつか実際に叩いてみてテストをしてみよう。
$ dmesg | less
dmesgは起動時のシステムのメッセージを表示するコマンド、lessコマンドは1画面ずつ表示するコマンドだ。
これを実行すると起動時のメッセージが1画面ずつ表示される。dmesgの出力結果がlessコマンドに引き継がれている形だ。
$ ls | wc -l
wcコマンドは文字数をカウントするコマンドだ。-lオプションで行数をカウントする。
lsコマンドによってファイルやディレクトリ名が出力され、その行数をカウントするコマンドになる。つまりは、今いるディレクトリのファイルとディレクトリ数をカウントすることになるわけだ。
パイプラインで使えるコマンド
2つご紹介しておこう。
teeコマンド
teeコマンドは処理を2つ同時に行いたいときに使える。標準入力から読み込み、それをファイルと標準出力に分岐させる。言葉で言うと難しいかもしれないが、コマンドを見ると単純だ。
$ ls -l | tee ls_log | wc -l
lsコマンドの実行結果をls_logファイルに書き込むと共に、「wc -l」で行数をカウントしている。
このようにファイルへの保存とコンソール上の出力に分岐させることができるのが、teeコマンドだ。
xargsコマンド
もうひとつ便利なもので、「xargs」というコマンドがある。
tarやrmといったコマンドは引数をパラメータとして受け取る必要があるため、パイプでものをひきわたすと、怒られてしまう。
そこで標準入力をコマンドの引数として変換してくれるxargsを使うことになる。
今回はtarコマンドを例にあげてみる。hoge.tar.gz huge.tar.gzなどの複数のtarファイルが存在しているとき「tar -xvf *」 のようにしても解凍できない、tarは複数のtarファイルを一度に解凍できない。そこで
$ ls -1 *.tar.* | xargs -n1 tar -xf
としてみる。
現在3つのtarアーカイブがある。
無事解凍できるはずだ。「-n<N>」はいちどにひきわたすパラメータを指定するオプションだ。今回は一ずつわたすので「-n1」となっている。このように、パラメータをうけとらないと動作しないプログラムもしっかりと対策措置がある。
のちに他のページで紹介するが、これらはスクリプトを書くための基礎知識につながっているので是非色々なコマンドと組み合わせてコマンドラインをエンジョイしてほしい。
まとめ
このページではLinuxのパイプラインについて詳しくご説明した。
基本をまずは押さえて、teeやxargsも使える機会があれば積極的に利用していこう。
コメント