⏱ 約 25 分
Part 1Chapter 04/Linux 基礎

テキストの検索と絞り込み

grepwc -lhead/tail・パイプ | の 4 つを組み合わせ、数万行のログファイルから必要な情報だけを 1 行で取り出せるようになります。

所要時間約 25 分
章タイプstandard
前提知識Chapter 1(SSH)・Chapter 2(パス)・Chapter 3(cat / less / /var/log
使用機材踏み台 workstation01 + 演習用サーバ learner01
関連章前: Chapter 3「ファイルとディレクトリの基本操作」/ 後: Chapter 5「ファイルを書き換える(vim 入門)」

「目で探す」を卒業する

前の章で、あなたは /var/log/auth.logless で開いて、自分自身が SSH ログインした記録を実際に見ました。G で末尾に飛び、矢印キーで遡って、「あ、これが私だ」という行を肉眼で見つけた ── ここまでは「読む」操作です。

ところが、本物のサーバはもっと喋ります。1 日動かすと /var/log/syslog は数千行から数万行に膨らみ、何かトラブルが起きたとき「どこかにエラーが書かれているはず」と分かっていても、目で探すのは現実的ではありません。

この章では、テキストを絞り込む「基本動作」4 つを手に覚えます:

grep   wc -l   head / tail   |(パイプ)

この 4 つが手になじむと、10,000 行のログから 3 行だけ抜き出して、件数を数えて、最新の出来事だけ表示する ── すべて 1 行で書けるようになります。

この章を終えるとできること

テキストを絞り込む 基本動作 4 つ ── 探す・数える・切り出す・つなぐ ── を手に入れます。

$ grep "student"
student login
student opened
student closed
探す
巨大なファイルから
必要な行だけ抜き出す
grep
$ wc -l auth.log
1842
数える
何行あるか
機械的に測る
wc -l
$ tail -n 3
切り出す
先頭・末尾の
必要な数行だけ
head · tail
grep|wc
3
つなぐ
コマンドの出力を
次のコマンドに渡す
|

この 4 つの真価は 「つなげたとき」 に出ます。「失敗ログインだけを抜き出して件数を数える」 ── これが 1 行で書けるようになる、というのが Ch4 のゴールです。

概念説明

1. テキスト絞り込みの「4 動作」

文字列を扱う操作は、考え方のうえでは 4 つに整理できます。この 4 つは個別にも使えますが、真価はつなげたときに出ます。

動作コマンド一言
探すgrep "パターン" ファイルパターンを含む行だけ抜き出す
数えるwc -l行数(件数)を測る
切り出すhead / tail先頭・末尾の N 行を取る
つなぐ|(パイプ)前のコマンドの出力を次に渡す

2. 探す ── grep の基本

grep「パターンを含む行だけ抜き出す」 コマンドです。マッチしない行は表示されません。

bash
grep "パターン" ファイル名
grep "student" /var/log/auth.log    # student を含む行だけ表示

よく使うオプションは 4 つだけです。これだけで現場の調査の 8 割は済みます。

オプション動作
-i大文字小文字を無視(Error / ERROR も拾う)
-cマッチした行数だけ表示(行そのものは出さない)
-n行番号を付ける
-vマッチしない行を出す(反転)
📝 正規表現は深追いしない ── grep のパターンは正規表現ですが、まずは「ただの文字列マッチ」として使えれば十分です。.* などの特殊文字は Part 1 では使いません。

3. 数える ── wc -l

wcword count の略で、-l(lines)を付けると 行数だけ を返します。wc -l 単独でファイルの行数を測れますが、真価は次の パイプ で分かります。

bash
wc -l /var/log/auth.log    # auth.log は何行あるか

4. つなぐ ── パイプ |

パイプ |「前のコマンドの出力を、次のコマンドの入力にする」 演算子です。水道のホースをつなぐイメージで、何本でも連結できます。

bash · パイプの基本形
grep "Failed" /var/log/auth.log | wc -l
# 「Failed を含む行を抜き出して、その行数を数える」── 失敗ログインの件数が一発で出る

grep "student" /var/log/auth.log | grep "Accepted" | wc -l
# 3 段つなぎ: student の成功ログイン件数

考え方は 「A の出力を B が受け取り、B の出力を C が受け取る」。途中でおかしくなったら、一段ずつ分解して結果を確認する のがコツです。

5. 切り出す ── head と tail

ログが何千行あっても、見たいのは 先頭の数行末尾の数行 だけ、ということがよくあります。

bash
head -n 5 ファイル名           # 先頭 5 行
tail -n 5 ファイル名           # 末尾 5 行
tail -n 20 /var/log/syslog    # syslog の最新 20 行
tail -f /var/log/syslog       # ★ 書き込まれる行をリアルタイム表示(Ctrl+C で終了)

-n を省略するとデフォルトで 10 行です。tail -f はサーバが今この瞬間に何を書いているか目の前で流れる、別格に便利な使い方で Part 7(監視と障害対応)で再登場します

試してみよう:ログから「自分の足跡」を取り出す

この演習のシナリオ: 「数日後、サーバに何回ログインしたか思い出したい」 ── Ch3 で less で目視した内容を、今度は grep| で機械的に絞り込んで数えます。実際の運用調査と同じ手順です。

🛟 演習の安全範囲

この章の演習は すべて読み取り操作 です。ファイルの中身は一切変えません。rmmv も使いません。何度実行しても安全です。
auth.log を読むには studentadm グループに入っている必要があります。演習環境では事前に設定済みなので、そのまま進めてください。グループの仕組みは Chapter 7 で詳しく学びます。

まず learner01 に入る

bash · workstation01 から SSH
ssh student@learner01

まずファイルの全体規模を測る

auth.log が何行あるか、まず把握します。この量を目で読むのは現実的ではない ── これが grep の出番です。

bash
wc -l /var/log/auth.log    # 数百〜数千行あるはず

自分の名前で grep

自分(student)に関する行だけ抜き出します。先ほどの全体行数と比べると、ぐっと減っているはずです。

bash
grep "student" /var/log/auth.log

成功ログインだけに絞り込む(パイプ初登場)

student の行の中から、さらに Accepted(ログイン成功)だけ抜き出します。パイプの初体験ですgrep "student" の結果を、そのまま次の grep "Accepted" に渡しています。

bash
grep "student" /var/log/auth.log | grep "Accepted"

件数を数える

③ の結果が何行あるか、wc -l で測ります。数えるために目で追う必要はもうありません

bash
grep "student" /var/log/auth.log | grep "Accepted" | wc -l
# たとえば「3」と出れば、student の成功ログインは 3 回

失敗ログインを実機で起こして捕まえる

⚡ 実機ならではの体験

今度はわざと 間違ったパスワードでログインを試みます。「失敗のログがどう記録されるか」を、自分の手で起こして実機で確認します。
シミュレーターで「ありそうな失敗ログ」を見るのとは違います。あなたが今この瞬間に起こした失敗イベントが、サーバ自身の手で記録される瞬間を見にいきます。

bash · workstation01 で(learner01 から exit したあと)
exit                              # まず learner01 から workstation01 に戻る
ssh student@learner01             # パスワードを 1〜2 回わざと間違える → Ctrl+C で中断
ssh student@learner01             # 今度は正しいパスワードで入る

learner01 に戻ったら、失敗ログインを grep で抜き出します。

bash · learner01
grep "Failed password" /var/log/auth.log
こんな行が出れば成功
... learner01 sshd[xxxx]: Failed password for student from 192.0.2.202 port xxxxx ssh2

最新の出来事だけ tail で見る

auth.log の末尾 10 行だけ取り出して、最新の動きを確認します。G でスクロールする必要はもうありません。

bash
tail -n 10 /var/log/auth.log

応用として tail -f を試したい人は、別のターミナルで ssh student@learner01 を試してみてください。その記録が目の前にリアルタイムに流れますCtrl + C で抜けられます。

詰まったら

💡 軽く方向だけ
grep は「含む 行だけ抜き出す」、wc -l は「行数を数える」、| は「前の結果を次に渡す」── この 3 つだけ意識すれば組み立てられます。grep の結果を | wc -l につなげば、件数が出ます。
💡 具体的なコマンドの形
grep "パターン" ファイル                  # パターンを含む行
grep "A" ファイル | grep "B"              # A も B も含む行
grep "A" ファイル | wc -l                 # A を含む行の件数
tail -n 5 ファイル                        # 末尾 5 行
「student の成功ログイン回数を数えたい」なら、左から grep "student"grep "Accepted"wc -l の順でつなぎます。途中でおかしくなったら パイプを一段ずつ外して結果を確認
✅ 答えを見る
# 全体規模
wc -l /var/log/auth.log

# 自分(student)の行だけ
grep "student" /var/log/auth.log

# 成功ログインの件数
grep "student" /var/log/auth.log | grep "Accepted" | wc -l

# 失敗ログイン
grep "Failed password" /var/log/auth.log

# 最新 10 行
tail -n 10 /var/log/auth.log

ポイント: パイプは 左から右に「ホースをつなぐ」 イメージ。A | B | C は「A の出力を B に渡し、B の出力を C に渡す」。途中でおかしくなったら、一段ずつ分解して結果を確認する のがコツです。

AI に相談

AI わからないところを自由に質問できます
この章の内容を踏まえて、Linux の基礎にやさしく答えます

修了確認

学んだことが身についたか、2 問だけ確認してみましょう。

問 1 · grep のオプションを読み解く
次の 3 つのコマンドは、それぞれ何をしますか? 一言で答えてください。

grep -i "error" /var/log/syslog
grep -c "Failed" /var/log/auth.log
grep -v "DEBUG" app.log
問 2 · パイプを組み立てる
/var/log/auth.log から 「ユーザー alice が失敗したログインの件数」 を 1 行で求めるコマンドを書いてください(alice の失敗ログインだけを数える)。

次の章へ

次は Chapter 5「ファイルを書き換える(vim 入門)」 です。

ここまで「読む」「探す」「絞り込む」までは身につきました。次の壁は 「ファイルを書き換える」 です。サーバの設定ファイルを編集するには、エディタが要ります ── そして Linux サーバの世界では、いまだに vim が事実上の標準です。

最初の数分は「終了の仕方が分からない」「カーソル移動できない」と誰もが詰まります。それを 「3 つのモード × 5 つのキー」だけで突破する のが次の章のゴールです。