こんにちは、さるまりんです。
Linuxを使っていると、こんなコマンドを見かけることはありませんか?
ls | grep php
docker ps | grep nginx
こんな感じです。
この | は何なのでしょうか?
初めて見た時には、
「区切り?」
「OR?」
「何か特別な記号?」
と、何のことか迷ってしまいました。
普段使っているもの(かも)ですが、今回は、このパイプ(Pipe)と呼ばれる仕組みについて、改めて見てみたいと思います。
パイプはコマンド同士をつなげる
パイプは、
左側のコマンドの結果を、右側のコマンドへ渡す
ための仕組みです。
例えば、
ls
を実行すると、
README.md
docker-compose.yml
src
test
のような一覧が表示されます。
この一覧を、そのまま別のコマンドへ渡せるのがパイプです。
パイプという名前を聞くと、水道やガスのパイプと同じ言葉なので、どこからどこかへ何かを移すための仕組みだと想像できるかもしれませんね。
grepと組み合わせてみる
例えば、
ls | grep php
を実行すると、まず、
ls
でファイル一覧を取得します。
そのあと、
grep php
が、その一覧の中から「php」を含む行だけを表示します。
grepは、受け取った内容から指定した文字を含む行を探すためのコマンドです。
つまり、
一覧を表示
↓
phpを含むものだけ取り出す
という流れになります。
長い一覧から探しやすくなる
例えば、ファイルが何百個もあるディレクトリでは、全部を見るのは大変です。
そんなとき、
ls | grep log
とすれば、「log」を含むファイルだけ表示できます。
探したいものだけ見られるので、とても便利です。
ログファイルは、日付がファイル名に入っていることも多いので、それを目当てに、
ls | grep '2026-07-20'
のように、特定の日付のログを探すこともできるかもしれません。
Dockerでもよく使う
例えば、起動中のコンテナを確認するとき、
docker ps
だけでも表示できます。
でも、特定のコンテナだけ見たいなら、
docker ps | grep nginx
とできます。
「nginx」という名前を含むものだけ表示されるので、目的のコンテナを見つけやすくなります。
他にもいろいろ組み合わせられる
パイプは、grep以外にも、さまざまなコマンドと組み合わせられます。
例えば、
history | grep docker
として、以前実行したDockerコマンドを調べたり、
cat sample.txt | less
として、ファイルの内容を少しずつ確認したりできます。
Linuxには、組み合わせて使えるコマンドがたくさんあるんですね。
パイプが便利な理由
パイプが便利なのは、一つひとつのコマンドはシンプルなままで、必要に応じて組み合わせられることだと思います。
例えば、
- 一覧を表示する
- 検索する
- 並び替える
- 数を数える
それぞれを別々のコマンドが担当しています。
必要なものをつなげることで、やりたいことを実現できるのです。
Linuxでは、一つのことをうまく行う小さなコマンドを組み合わせるという考え方が、昔から大切にされています。
例えば
僕は、こんな使い方をよくします。
cut -d ',' -f 1 goods.csv | sort | uniq
単純な形式のgoods.csvというCSVファイルから、1列目に入っているものを順番に並べ、重複なしで取り出しています。
分解すると、
cut -d ',' -f 1 goods.csv
で、goods.csvから1列目を取り出し、
sort
で並び替え、
uniq
で、隣り合った重複する行を取り除いています。
先にsortで同じ内容を並べているので、uniqで重複をまとめて取り除けるんですね。
SQLを触ったことがある方なら、
SELECT DISTINCT col1
FROM table
ORDER BY col1;
のようなことをしているイメージに近いのではないでしょうか。
まずは「結果を渡している」と覚えましょう
プログラミング言語やLinuxに触れていると、標準出力や標準入力という言葉を聞くことがあります。
パイプは、左側のコマンドの標準出力を、右側のコマンドの標準入力へ渡しています。
でも、最初から細かい仕組みまですべて覚えなくても、
左側の結果を右側へ渡している
というイメージがあれば、見えてくると思います。
この考え方が分かると、Linuxのコマンド例を見たときにも、
「コマンドをつなげているんだな」
と読みやすくなります。
おわりに
今回は、Linuxのパイプ(|)について見てきました。
パイプは、一つのコマンドだけでは難しいことも、複数のコマンドを組み合わせて実現できる便利な仕組みです。
最初は、
ls | grep php
くらいから試してみるだけでも、
「なるほど、こういうことか」
と感じられると思います。
Linuxには、便利なコマンドがたくさん用意されています。
パイプを覚えると、それらを自由に組み合わせられるようになります。
少しずつ試しながら、自分なりの便利な組み合わせを見つけていきたいですね。
コンピュータ、便利に使いたいですね。
読んでくださってありがとうございました。
それではまた!