Lから始まるLinux

2章33話
ヒアドキュメント
2章34話 パイプ
もくじ
2章35話
ファイル検索
パイプ
若木 みどり
> で、コマンドの出力を ファイルに書き出して… < で、コマンドの入力を ファイルから読み込んで…
若木 しげる
こんな場合は「パイプ(pipe)」が使えるよ コマンド同士が直接入出力をやりとりするんだ
若木 みどり(驚き)
え? 私がやろうとしていたような 入出力内容を仲介するファイルを 作らなくても済むの?
使い方
若木 しげる
パイプはコマンドの出力を 別のコマンドの入力に渡す仕組みだよ 2つのコマンドの間に 「パイプ、バーチカルバー (|)」 置くだけだよ
コマンド1 | コマンド2
若木 みどり(驚き)
へぇ!そんなことができるんだ!なんだか面白そう!
若木 しげる
yes指定された文字列を出力し続けるよ
yes [文字列]
若木 しげる
文字列の指定がなければyes を出力するよさっそく yes実行してみよう!
yes
若木 みどり
うん!
yes
yes
yes
...
若木 みどり(驚き)
うわっ!yes の出力が止まらなくなっちゃったよ!どうしよう?!
若木 しげる
落ち着いて「割り込み(interruption)」操作を使おうキーボードから Ctrl + C を押してみてこれで今動いているコマンドを強制的に停止できるよ
若木 みどり
…あ、止まった!良かったぁ…
若木 みどり
でもこの yes コマンド単体だと使い道がなさそうだよ
若木 しげる
確かに yes 単体では便利に見えないかもねこのコマンドはパイプと組み合わせるために用意されているんだ
若木 みどり
ここでパイプが登場するのね!
若木 しげる
たまに「yes / no」の確認を求めるコマンドがあるよね
若木 みどり
うん、あるよ親切だけど手入力しないといけないから操作がどうしても遅くなっちゃうね
若木 しげる
例えば rm-i オプションを指定すると「削除してよいか」の確認を取るようになるんだこれを確認を求めるコマンドの代わりだと思ってね
若木 しげる
そんなコマンドとyes を組み合わせて以下のように書くとどう思う?
yes | rm -i /home/midori/*
若木 みどり
えっと…確認が全部「yes」って自動で答えてくれるってこと?
若木 しげる
そのとおり!確認作業を自動化できるんだ
若木 みどり(驚き)
すごい!それなら役に立ちそう!
若木 しげる
Linux の基本的な考え方に「単純なコマンドを組み合わせて複雑な処理を作る」というものがあるんだ
若木 しげる
その中心がパイプなんだ使いこなせるようになればもっと自由にコマンドを操作できるようになるよ
まとめ
若木 みどり
今回はパイプを学んだよ!コマンド同士の入出力をつなげられるんだ!
若木 しげる
パイプはいくつもつなげられるよ!以下のコマンドが何をするのか考えてみて
cat << EOF | shuf | head -n 1
大吉
中吉
中吉
小吉
小吉
小吉
吉
吉
吉
吉
EOF
若木 しげる
shuf は行をランダムに並び替えるよshuffle の略なんだ
若木 しげる
head-n オプションは指定された行数だけ表示するんだ
若木 みどり(驚き)
これは…おみくじ?!
  1. cat とヒアドキュメントで複数行を生成
  2. shuf で行をランダムに並び替え
  3. head -n 1 で先頭の1行だけ表示
若木 しげる
そのとおり!こんな風にパイプを活用すればいろんなアイデアを簡単に実現できるよ
若木 みどり(笑顔)
お兄ちゃん!これ単純だけどすっごく楽しい!履歴で何回も呼び出せて遊べちゃう!