【 | 】コマンドを繋げる「パイプ」~ | の使い方~【続・Linuxコマンド入門 #2】

linuxコマンドを連結しより高度に扱うためのパイプやリダイレクトの仕方について紹介するシリーズのサムネイル 5 記事
シリーズ

続・Linuxコマンド入門 ~パイプとリダイレクトを使いこなす~

Linuxコマンドの出力に対して処理してデータを加工したり、処理を自動化する「コマンド結合」の方法について紹介します。

前回は、コマンドの実行結果の行き先をファイルに変える「リダイレクト」”>”と”>>”を学びました。

標準出力と標準エラーについて知り、Linuxコマンドのリダイレクトを理解する。

【>/>>】「結果をファイルに保存」- リダイレクトを理解する-【続・Linuxコマンド入門 #1】

Linuxコマンドの結果をファイルに保存したい?「リダイレクト」を学べば解決!> (上書き) と >> (追記) の違い、エラー出力 2> の使い方を初心者向けに解説。(118文字)

今回は、「パイプ (|)」を学びます。 リダイレクトが結果を「ファイル(バケツ)」に保存するのに対し、パイプは「あるコマンドの結果を、次のコマンドに直接渡す」ための、最も重要な技術です。

linuxコマンド入門、コマンドの出力を次のコマンドに受け渡す "|" パイプの使い方について紹介。

1. | (パイプ) とは?

| (パイプ) は、コマンドとコマンドを繋ぐ「パイプライン」の役割を果たします。

(キーボードでは、Shiftキーを押しながら \ キーを押すと入力できます(キーボード配列によって違う))

具体的には、コマンドAの「標準出力 (stdout)」を、コマンドBの「標準入力 (stdin)」に直接接続します。

linuxの標準出力と標準入力について、蛇口でイラスト化し、pipeで接続できることを表すイラスト

前回の「リダイレクト(>)」は、蛇口の水を一度「バケツ(ファイル)」に溜める操作でした。 今回の「パイプ(|)」は、蛇口(コマンドA)にホースを繋ぎ、そのホースを次の機械(コマンドB)の投入口に直接差し込むイメージです。

イメージ:工場のベルトコンベア

パイプ | は、工場の「ベルトコンベア」によく例えられます。

  1. 最初の機械(コマンドA)が、製品(データ)を作ります。
  2. それがベルトコンベア(パイプ |に乗って流れます。
  3. 次の機械(コマンドB)が、流れてきた製品(データ)を受け取って、次の加工(絞り込みなど)を行います。

この流れ作業により、中間ファイル(バケツ)を一切作らずに、データを高速に処理できるのです。


[実際]|はどこで使われている?

|はいろんな場面で、お世話になるシェル演算子です。ここで習得して自由に扱えるようになるとよいですが、ターミナルでコマンドをそこまで打たないという人でも、以下のような場面で見たことがあると思います。lsmodで一覧をgrepに渡し、ドライバの検索をするというケースで使うことが多いです。

🔍 例:NVIDIA ドライバを検索

lsmod | grep nvidia

🔍 例:Wi-Fi 関連ドライバを検索

lsmod | grep r816

🔍 例:Realtek 系のネットワークドライバを検索

lsmod | grep r816

2. パイプ | の使い方

使い方は非常にシンプルです。

[コマンドA] | [コマンドB]

これを実行すると、以下の順番で処理が流れます。

  1. コマンドA が実行されます。
  2. コマンドA がターミナルに表示するはずだった結果(標準出力)が、画面には出ず、すべて | を通じて コマンドB に渡されます。
  3. コマンドB は、渡されたデータを「入力」として受け取り、処理を実行します。
  4. 最終的に、コマンドB の結果だけがターミナルに表示されます。

3. | で覚えておくといい使い方例

パイプの真価は、第一シリーズ”Linuxコマンド入門”で学んだコマンド群と組み合わせることで発揮されます。

例1:ls -l の結果から、特定の単語だけを grep で絞り込む

第一シリーズで学んだ ls -lgrep を組み合わせる、最も代表的な使い方です。 ls -l だけだと、ファイルが多すぎて見づらい場合があります。

ls -l
# total 16
# -rw-r--r-- 1 user group  875 11月 11 15:00 memo.txt
# drwxr-xr-x 2 user group 4096 11月 12 10:30 documents
# -rw-r--r-- 1 user group 1024 11月 10 09:00 old_file.txt
# drwxr-xr-x 2 user group 4096 11月 15 04:00 temp_data

ここで、「documents」という名前が含まれる行だけを見たい場合、| を使います。

ls -l | grep "documents"
# drwxr-xr-x 2 user group 4096 11月 12 10:30 documents

処理の流れ:

  1. ls -l が4行のリストを(terminal画面ではなく)パイプに流します。
  2. grep "documents" がその4行を受け取り、「documents」という文字列が含まれる行だけを絞り込みます。
  3. 最終結果(1行)だけが画面に表示されます。

例2:catdmesg の長い出力を less で閲覧する

cat で長いファイルを表示したり、dmesg(システムの起動ログ)を実行すると、結果が多すぎて画面を流れていってしまいます。

# 実行すると、ログが一気に流れて最後しか見えない
cat /var/log/syslog

この「一気に流れてしまう結果」を、less コマンドに渡してじっくり閲覧できるようにします。

cat /var/log/syslog | less
# (less の閲覧画面に切り替わり、ログの先頭から閲覧できる)

(※ less /var/log/syslog と直接実行するのと同じですが、cat のような「標準出力に結果を出すコマンド」なら何でも less に渡せる、という点が重要です)


まとめ

今回は、コマンドAの結果をコマンドBに直接渡す「パイプ (|)」を学びました。

パイプは、リダイレクト(ファイル保存)とは違い、データを「流れ」のまま処理するためのもの。

ls | grep のように、コマンドを組み合わせることで、linuxコマンドの操作が飛躍的に楽に

これで、「リダイレクト(>)」(結果をファイルに保存する)と「パイプ(|)」(結果を次のコマンドに渡す)という2つの強力な「流れ」を操れるようになりました。

次回は、この2つを組み合わせた総まとめの実践編です。 「ファイルの中身を検索し、行数を数え、結果をファイルに保存する」といった、一連のデータ加工に挑戦します。

pipe,rideirect,here textを自由に扱えるようになるための解説記事サムネイル

【 | / >】実践!パイプとリダイレクトでデータを加工する【続・Linuxコマンド入門 #3】

パイプ|とリダイレクト>の実践編!cat | grep | wc > file のようにコマンドを繋げてデータを加工・集計・保存する方法を解説。入力リダイレクト<とヒアドキュメント<<も学びます。

linuxコマンドを連結しより高度に扱うためのパイプやリダイレクトの仕方について紹介するシリーズのサムネイル 5 記事
シリーズ

続・Linuxコマンド入門 ~パイプとリダイレクトを使いこなす~

Linuxコマンドの出力に対して処理してデータを加工したり、処理を自動化する「コマンド結合」の方法について紹介します。

UBUNTU-linuxコマンド入門シリーズのサムネイル。この記事シリーズでは、よく使うコマンドを優先的に紹介し、シリーズを通して最低限コマンドライン操作ができるようになることを目標に紹介しています。 18 記事
シリーズ

Linuxコマンド入門

LINUXコマンドの基礎について、ゼロから最低限ファイル操作などができるようになるまでの手順を紹介します。linux系な...