5:パイプ・リダイレクト・検索

目次

はじめに

ここまでは「ファイルを見る」「権限を変える」など、コマンドを1つずつ単独で使ってきました。Linuxの本当の強さは、コマンド同士をつなぐことで発揮されます。

あるコマンドの結果を別のコマンドへ渡したり、画面に出る結果をファイルへ保存したりすることで、小さなコマンドを組み合わせて強力な処理を作れるようになります。

この回では、リダイレクト(>>>)、パイプ(|)、文字列検索を行う grep、ファイル検索を行う find、件数を数える wc を学びます。


1. リダイレクト:出力先をファイルに切り替える

コマンドの実行結果は通常、画面に表示されます。この出力先をファイルへ変更する仕組みがリダイレクトです。

>:ファイルへ上書きする

> は出力結果をファイルへ保存します。

すでに同名ファイルが存在する場合は、中身を消して上書きします。

$ echo "1行目です" > log.txt
$ cat log.txt

期待される出力(例):

1行目です

再度 > を使うと上書きされます。

$ echo "あとから書いた行" > log.txt
$ cat log.txt

期待される出力(例):

あとから書いた行

最初の内容は消えています。

>>:ファイルへ追記する

>> は既存内容を残したまま末尾へ追加します。

$ echo "1行目です" > log.txt
$ echo "2行目を追記" >> log.txt
$ echo "3行目も追記" >> log.txt
$ cat log.txt

期待される出力(例):

1行目です
2行目を追記
3行目も追記
記号動作既存データ
>上書き消える
>>追記残る

注意:> は確認なしで上書きします。追記したい場合は必ず >> を使用しましょう。


2. パイプ |:コマンドをつなぐ

パイプ(|)は、左側コマンドの出力を右側コマンドの入力として渡す仕組みです。

左のコマンド | 右のコマンド

例えば、ls -l の結果を less に渡して読みやすくできます。

$ ls -l | less

ls -l の結果が less に渡され、ページ単位で閲覧できます。

パイプは複数連結することも可能です。


3. grep:文字列検索

grep は指定した文字列を含む行だけを抽出するコマンドです。

例として次のログファイルがあるとします。

2026-05-29 10:00:01 INFO  GET /index.html 200
2026-05-29 10:00:05 INFO  GET /about.html 200
2026-05-29 10:01:12 ERROR GET /missing.html 404
2026-05-29 10:02:30 INFO  POST /login 200
2026-05-29 10:03:44 error GET /old.html 404

基本検索

$ grep "ERROR" access.log

期待される出力(例):

2026-05-29 10:01:12 ERROR GET /missing.html 404

-i:大文字小文字を無視する

$ grep -i "error" access.log

期待される出力(例):

2026-05-29 10:01:12 ERROR GET /missing.html 404
2026-05-29 10:03:44 error GET /old.html 404

-n:行番号を表示する

$ grep -n "INFO" access.log

期待される出力(例):

1:2026-05-29 10:00:01 INFO  GET /index.html 200
2:2026-05-29 10:00:05 INFO  GET /about.html 200
4:2026-05-29 10:02:30 INFO  POST /login 200

-r:ディレクトリ全体を検索する

$ grep -rn "TODO" .

期待される出力(例):

./notes/memo.txt:3:TODO 設定を見直す
./src/main.txt:10:TODO エラー処理を追加
オプション意味
-i大文字小文字を区別しない
-n行番号表示
-r再帰検索

4. find:ファイルを探す

find は条件に一致するファイルやディレクトリを検索します。

-name:名前で検索する

$ find . -name "*.txt"

期待される出力(例):

./memo.txt
./notes/todo.txt
./notes/archive/old.txt

-type f:ファイルだけに限定する

$ find . -type f -name "*.txt"

期待される出力(例):

./memo.txt
./notes/todo.txt
./notes/archive/old.txt
条件意味
-name "*.txt".txtファイルを検索
-type fファイルのみ対象

5. wc:件数や行数を数える

wc は行数や単語数を数えるコマンドです。

-l:行数を数える

$ wc -l access.log

期待される出力(例):

5 access.log

grep と組み合わせる

ERROR行の件数を数えます。

$ grep "ERROR" access.log | wc -l

期待される出力(例):

1

grep -c:件数だけを表示する

$ grep -c "ERROR" access.log

期待される出力(例):

1
コマンド結果
grep "ERROR" access.log該当行を表示
grep "ERROR" access.log | wc -l件数を表示
grep -c "ERROR" access.log件数を表示

演習

課題:ERRORログを検索して件数を数える

ログファイルを作成します。

$ cd ~
$ echo "2026-05-29 10:00:01 INFO  GET /index.html 200" > access.log
$ echo "2026-05-29 10:00:05 INFO  GET /about.html 200" >> access.log
$ echo "2026-05-29 10:01:12 ERROR GET /missing.html 404" >> access.log
$ echo "2026-05-29 10:02:30 INFO  POST /login 200" >> access.log
$ echo "2026-05-29 10:03:44 ERROR GET /old.html 500" >> access.log
$ echo "2026-05-29 10:04:10 ERROR POST /pay 500" >> access.log

内容を確認します。

$ cat access.log

行数を確認します。

$ wc -l access.log

期待される出力(例):

6 access.log

ERROR行だけ抽出します。

$ grep "ERROR" access.log

期待される出力(例):

2026-05-29 10:01:12 ERROR GET /missing.html 404
2026-05-29 10:03:44 ERROR GET /old.html 500
2026-05-29 10:04:10 ERROR POST /pay 500

件数を数えます。

$ grep "ERROR" access.log | wc -l

期待される出力(例):

3
$ grep -c "ERROR" access.log

期待される出力(例):

3

演習の確認ポイント

  • >>> を使い分けられる
  • | でコマンドを連結できる
  • grep で目的の行を検索できる
  • wc -lgrep -c で件数を確認できる
目次