パイプの仕組み入門|コマンドをつないで処理を効率化|UNIX Cafe

当ページのリンクには広告が含まれています。

UNIX Cafe | 第6回

|(パイプ)— コマンドをつなげて、データを流す魔法
複数のコマンドをつないで、出力を次のコマンドに渡す仕組みをわかりやすく紹介します。

目次

はじめに|「流れるコマンド、つながる世界」

ミナちゃん

ユニ先生、リダイレクトって“流す”感じが面白かったですね!
次は、コマンド同士をつなげることもできるって聞いたんですけど…?

ユニ先生

おっ、いいところに気づいたね。
それが「パイプ(|)」だよ。
コマンドとコマンドを“つなぐホース”のようなものなんだ

パイプって何?

ユニ先生

これは「ls の出力を grep に渡す」コマンドだよ。
つまり、“ls が出した情報”を、“grep が受け取って探す”流れになっているんだ。

bash
$ ls | grep txt
ミナちゃん

えっ、それって一度ファイルに書かなくてもいいってことですか?

ユニ先生

そう!ファイルを介さずに、データが直接流れていくんだ。
まるでコーヒーをカップに注ぐみたいにね。

いろんなパイプの使い方

テキストを数える

ミナちゃん

ユニ先生、たくさんあるテキストの行を数える方法ってありますか?数が多くて、ちょっと混乱しちゃって💦

ユニ先生

あるよ、いいコマンドが。
リダイレクトの次は“パイプ”の出番だ。
たとえば、こうだよ。

bash
$ cat log.txt | wc -l
  • cat log.txt → ファイルの中身を出力
  • wc -l → その行数を数える
  • つまり「log.txt の行数 = 120行」と表示される!

特定のファイルを探して表示

ミナちゃん

たくさんファイルがあって、どこに“report”ってつくファイルがあるのか分からないんです💦

ユニ先生

そんなときこそ、パイプの出番だよ。
ls で全部のファイルを一覧にして、
grep で“report”を含む名前だけを選べばいいんだ。

bash
$ ls | grep report
  • ls → すべてのファイルを一覧表示
  • grep report → “report”を含む行だけ抽出
  • 結果として、ファイル名の中に“report”があるものだけが表示される

結果を少しずつ読む

ミナちゃん

ユニ先生、コマンドの結果が長すぎて、画面がバーッて流れちゃいました💦
一瞬で終わっちゃって、全然読めません!

ユニ先生

うんうん、初心者あるあるだね。
そんなときは“パイプ”で less に渡してあげよう。
こうすると、出力を少しずつスクロールしながら読めるんだ。

bash
$ dmesg | less
  • dmesg → システムメッセージを表示
  • | less → 結果を1ページずつスクロールして読む
  • q キーで終了

エラーメッセージが出た場合

Unable to obtain kernel buffer: Operation not permitted

ユニ先生

このようなメッセージが出た場合は、「一般ユーザーでは dmesg の内容を読めない」という意味なので、管理者(root)の権限で dmesg を実行します。

bash
$ sudo dmesg | less

Try it!|パイプをつないでみよう!

ミナちゃん

パイプって、コマンドたちが手を取り合ってるみたいですね☕✨
組み合わせ次第で、思わぬ“おいしい結果”が生まれるかも!

1. ls | grep txt → 「.txt」がつくファイルだけ表示してみよう
2. cat /etc/passwd | head -n 5 → 最初の5行だけ見てみよう
3. ps aux | grep bash → ” bash ” が動いているプロセスを探してみよう

コーヒーブレイク:ユニ先生のひとこと

パイプって、まるでバリスタの道具みたいだよ。
上手につなげば、どんな味(結果)にもできるんだ

まとめ|コマンドをつなぐと、世界が広がる

ミナちゃん

パイプでコマンドをつないでみたら、できることが一気に増えました☕✨まるで小さな力が集まって、大きな力になるみたいです!

ユニ先生

そうだね。コマンドは言葉、パイプは会話。
上手につなげば、シェルの世界はどこまでも広がるんだ。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次