前の記事では、 cat・less・head・tailコマンドを使ってファイルの内容を確認する方法 を学びました。
ファイルの内容を表示できるようになったら、 次に覚えたいのが 「必要な情報を探す」操作 です。
Linuxでは、大量のログやファイルの中から 必要な情報を探す場面が頻繁にあります。
grep
文字列を探す
ファイルの「中身」から検索
find
ファイルを探す
ディレクトリからファイルを検索
「server.confがどこにあるか分からない」
この2つでは、使うコマンドが異なります。
grep=ファイルの中身を検索、 find=ファイルやディレクトリを検索 という違いを理解し、基本的な検索ができるようになることを目指します。
Linuxでは「探す」操作が重要
Linuxサーバーには、 非常に多くのファイルが存在します。
さらに、ログファイルには 数千行、数万行という情報が記録されることもあります。
grep
中身を検索
find
ファイルを検索
まずは、この違いを覚えてしまいましょう。
grep
中身から探す
find
ファイルそのものを探す
grepコマンド:ファイル内から文字列を検索する
grepは、 ファイルの中から 指定した文字列を含む行を検索するコマンド です。
基本形は次の通りです。
grep "検索文字列" ファイル名
たとえば、前の記事でも使用した
app.log
があるとします。
2026-08-15 10:00:01 INFO Application started
2026-08-15 10:00:02 INFO Database connected
2026-08-15 10:00:03 WARN Response delayed
2026-08-15 10:00:04 ERROR Database timeout
2026-08-15 10:00:05 INFO Retry started
2026-08-15 10:00:06 ERROR Connection failed
このログから ERRORを含む行だけ 確認してみましょう。
grep "ERROR" app.log
$ grep "ERROR" app.log
2026-08-15 10:00:04 ERROR Database timeout
2026-08-15 10:00:06 ERROR Connection failed
ERRORを含む行だけが表示されました。
このようにgrepを使うと、 大量のログを1行ずつ目で確認する必要がありません。
grepの仕組みをイメージしよう
INFO Application started
INFO Database connected
WARN Response delayed
ERROR Database timeout
INFO Retry started
ERROR Connection failed
grep ERROR
→
ERROR Database timeout
ERROR Connection failed
grep -i:大文字・小文字を区別せず検索する
通常のgrepでは、 大文字と小文字は別の文字として扱われます。
たとえば、
ERRORとerrorを
両方検索したい場合は
-iオプションを利用できます。
grep -i "error" app.log
$ grep -i "error" app.log
2026-08-15 10:00:04 ERROR Database timeout
2026-08-15 10:00:06 ERROR Connection failed
2026-08-15 10:00:08 error cache unavailable
ERROR、Error、errorなど、 表記が統一されていない場合にも便利です。
grep -n:何行目にあるか確認する
-nを付けると、 検索結果と一緒に 行番号を表示できます。
grep -n "ERROR" app.log
$ grep -n "ERROR" app.log
4:2026-08-15 10:00:04 ERROR Database timeout
6:2026-08-15 10:00:06 ERROR Connection failed
ERRORが 4行目と6行目 に存在することが分かります。
grep -v:指定した文字列を含まない行を表示する
grepには、 検索結果を逆にする方法もあります。
-vを指定すると、 検索文字列を 含まない行が表示されます。
grep -v "INFO" app.log
これなら、 INFO以外のWARNやERRORなどを確認できます。
不要な情報を除外して、 必要な行だけ確認したい場合に便利です。
grep -r:ディレクトリ内をまとめて検索する
1つのファイルではなく、 ディレクトリ内の複数ファイルから 文字列を探したいこともあります。
その場合に利用できるのが -rです。
grep -r "ERROR" logs/
これにより、
logsディレクトリ配下のファイルを
再帰的に検索できます。
grepでまず覚えたいオプション
-i
大文字・小文字を区別しない
grep -i "error" app.log
-n
行番号を表示
grep -n "ERROR" app.log
-v
一致しない行を表示
grep -v "INFO" app.log
-r
ディレクトリ内を再帰検索
grep -r "ERROR" logs/
findコマンド:ファイルやディレクトリを検索する
次は findコマンド です。
grepが「ファイルの中身」を探すのに対し、 findは ファイルやディレクトリそのものを探す ために使います。
ファイル名から検索する基本形は次の通りです。
find 検索開始場所 -name "ファイル名"
たとえば、
/home/user配下から
memo.txtを探してみます。
find /home/user -name "memo.txt"
$ find /home/user -name "memo.txt"
/home/user/documents/memo.txt
検索条件に一致したファイルの パスが表示されます。
findコマンドの構造を理解しよう
find
検索する
/home/user
どこから?
-name
何を条件に?
"memo.txt"
何を探す?
現在のディレクトリから検索する
現在いるディレクトリから検索したい場合は、 検索開始場所に . を指定できます。
find . -name "memo.txt"
$ find . -name "memo.txt"
./documents/memo.txt
前の記事までに学習した
cd ..の..と同じように、
Linuxでは「.」や「..」に意味があります。
ワイルドカード「*」を使って検索する
ファイル名を完全には覚えていない場合や、 同じ拡張子のファイルをまとめて探したい場合があります。
その場合は *(アスタリスク) を利用できます。
find . -name "*.txt"
$ find . -name "*.txt"
./memo.txt
./documents/linux.txt
./documents/network.txt
*.txtは、
「ファイル名は何でもよいが、末尾が.txt」
という意味です。
find -typeでファイルとディレクトリを区別する
findでは -typeを使って、 検索対象の種類を指定できます。
-type f
FILE
ファイルだけ検索
-type d
DIRECTORY
ディレクトリだけ検索
たとえば、 現在のディレクトリ以下から txtファイルだけを探す場合は次のようになります。
find . -type f -name "*.txt"
ディレクトリだけを検索したい場合は、
find . -type d
と指定できます。
grepとfindの違いを整理しよう
「ERRORという文字が書かれた行はどこ?」
grep "ERROR" app.log
「app.logというファイルはどこ?」
find / -name "app.log"
「どこにある?」なら find
ここで実際に試してみよう:grep・find検索シミュレーター
ここまで学習したgrepとfindを、 疑似Linux環境で実際に試してみましょう。
コマンドを入力してEnterを押すか、 下のサンプルコマンドをクリックしてください。
Linux Search Terminal
/home/user/
├── app.log
├── memo.txt
├── documents/
│ ├── linux.txt
│ └── network.txt
└── config/
└── server.conf
まずgrepでERRORを探してみましょう
grepとfindでは「何を検索しているのか」が違います。
理解度チェック:この場合はgrep?find?
Webサーバーで障害が発生しました
app.logが存在する場所は分かっています。
このログの中から
「ERROR」を含む行だけ確認したい
とします。
どちらを使うのが適切でしょうか?
今回探したいのは「ファイル」なのか「ファイルの中身」なのかを考えてみましょう。
実務ではgrepとfindをどう使う?
Linuxサーバーを運用していると、 grepとfindはさまざまな場面で利用します。
grep "ERROR" app.log
ログからERRORを含む行だけ抽出する。
find /etc -name "*.conf"
/etc以下からconfファイルを検索する。
grep -r "timeout" logs/
logsディレクトリ以下からtimeoutを検索する。
find / は便利だが検索範囲に注意する
findでは、
検索開始位置に
/を指定することもできます。
find / -name "server.conf"
/から検索すると、
Linuxのファイルシステム全体を対象に検索します。
非常に便利ですが、 対象範囲が広いため検索に時間がかかったり、 アクセス権限がない場所で Permission denied が表示されたりすることがあります。
ファイルがありそうな場所が分かっている場合は、
/etcや/home/userなど、
検索開始場所を絞ると効率的です。
ところで「/etc」や「/home」とは何?
ここまでfindの例として、 次のような場所を指定してきました。
/
ルートディレクトリ
/etc
設定ファイルなど
/home
ユーザーのホームディレクトリなど
/var
ログなどの可変データ
ここで、
なぜログは /var/log にあるの?
/usr や /tmp は何のためにあるの?
という疑問が出てくると思います。
Linuxでは、 ファイルを保存する場所が ある程度決められています。
次の記事では、 Linux全体のディレクトリ構造 を学習します。
確認問題:grep・findを理解できたか確認しよう
app.logから「ERROR」を含む行だけ表示したい場合、適切なコマンドはどれですか?
ファイルの中から文字列を検索する場合はgrepを使用します。 app.logの中からERRORを含む行だけ表示できます。
現在のディレクトリ以下から、すべての.txtファイルを検索したい場合はどれですか?
findはファイルそのものを検索するコマンドです。 「.」は現在のディレクトリ、 「*.txt」は末尾が.txtのファイルを意味します。
grepで大文字・小文字を区別せずに検索するオプションはどれですか?
grepの-iオプションを使用すると、 ERROR・Error・errorなどを大文字・小文字を区別せず検索できます。
3問に挑戦してみましょう。
まとめ
grepは
ファイル内から指定した文字列を検索
するコマンド
grep -iで
大文字・小文字を区別せず検索
できる
grep -nで
一致した行の行番号
を確認できる
findは
ファイルやディレクトリそのものを検索
するコマンド
find . -name "*.txt"のように
検索場所と条件を指定
して利用する
次は「Linuxのディレクトリ構造を理解する」を学びましょう
grepとfindを使って、 ファイルの中身やファイルそのものを検索する方法を学びました。
しかしfindを使いこなすには、 「Linuxのどこに、どのようなファイルが保存されているのか」 を理解しておくことが重要です。
次の記事では、
/・/etc・/home・
/var・/usr・/tmp
など、Linuxの基本的なディレクトリ構造を図解しながら学習します。

