はじめに
「ログのどこにERRORがあるか」「プロジェクト内のどのファイルに関数名が書かれているか」「設定ファイルをどこに保存したか」。ターミナルでの検索は、開発と障害調査の両方で頻繁に使います。
一方で、grep、find、rg、fdなど、似たコマンドが多く、最初は使い分けに迷います。
この記事では、次の順で初心者向けに説明します。
- 何を探すからコマンドを選ぶ
- 標準的な
grepとfindを覚える - 開発プロジェクトで
rgとfdを使う - Ubuntu、Amazon Linux、macOSの違いを知る
- ログ調査と安全な検索方法を覚える
先に結論
まずは、「ファイルの中身」と「ファイル名」を分けて考えると整理しやすくなります。
| 探したいもの | 最初の選択 | 主な用途 |
|---|---|---|
| 1つのファイル内の文字列 | grep |
ログ、設定ファイル、コードの確認 |
| ディレクトリ配下の文字列 |
rg、またはgrep -r
|
プロジェクト全体の検索 |
| ファイル名やディレクトリ名 |
find、またはfd
|
設定ファイルや生成物の場所確認 |
| Git管理中のファイル内 | git grep |
リポジトリ内のコード検索 |
| 大きなログを開いたまま検索 | less |
ログ調査 |
| macOS全体 | mdfind |
Spotlightのインデックスを使った検索 |
| コマンド本体の場所 | command -v |
どの実行ファイルが使われるかの確認 |
最初に覚えるなら、次の4つで十分です。
# 1ファイル内で、記号を正規表現と解釈せずに検索する。
grep -nF 'ERROR' application.log
# ディレクトリ配下を再帰検索し、バイナリを除外する。
grep -r -I -n -F 'ERROR' .
# ripgrepがある場合は、プロジェクト全体を高速に検索する。
rg -nF 'ERROR' .
# ファイル名にconfigを含むファイルを探す。
find . -type f -iname '*config*'
この記事で使う構成例
以降は、次のような構成を例にします。tree sample-search の実行結果です。
sample-search
├── .gitignore
├── logs
│ ├── application.log
│ └── system.log
├── node_modules
│ └── example.js
└── src
├── config.ts
└── user.ts
3 directories, 7 files
.は現在のディレクトリを表します。実行前にpwdとlsで場所を確認すると、別のディレクトリを検索するミスを減らせます。
# 現在地とファイル一覧を確認する。
pwd
ls
1. grepでファイルの中身を探す
grepは、テキストから指定したパターンに一致する行を表示するコマンドです。Ubuntu、Amazon Linux、macOSで標準的に使えます。
1ファイルを行番号付きで検索する
# ERRORを固定文字列として検索し、行番号を表示する。
grep -nF 'ERROR' logs/application.log
15:ERROR Database connection failed
87:ERROR Request timeout
15と87が行番号です。
| オプション | 意味 | 使う場面 |
|---|---|---|
-n |
行番号を表示する | 一致箇所をエディタで開きたいとき |
-F |
正規表現ではなく固定文字列として扱う | URL、IPアドレス、設定値、コードをそのまま探すとき |
-i |
大文字と小文字を区別しない |
ERROR、Error、errorをまとめて探すとき |
-w |
単語単位で一致させる |
userを探し、usernameは除外したいとき |
-H |
ファイル名を表示する | 検索対象が複数ファイルあるとき |
URLやIPアドレスには.や[など、正規表現で特別な意味を持つ記号が含まれることがあります。正規表現が必要でなければ、-Fを付けると意図しない一致を減らせます。
大文字と小文字を区別せず探す
# ERRORの大文字・小文字を区別せず検索する。
grep -n -i -F 'error' logs/application.log
一致行の前後も表示する
エラーの直前に何が起き、直後にどのような処理が続いたかを見るときは、-A、-B、-Cを使います。
# 一致行の前後3行も表示する。
grep -n -C 3 -F 'ERROR' logs/application.log
| オプション | 意味 |
|---|---|
-A 3 |
一致行の後ろを3行表示する |
-B 3 |
一致行の前を3行表示する |
-C 3 |
一致行の前後を3行ずつ表示する |
ディレクトリ配下を検索する
# 現在のディレクトリ配下を再帰的に検索する。
grep -r -I -n -F 'getUserData' .
| オプション | 意味 |
|---|---|
-r |
サブディレクトリを含めて再帰的に検索する |
-I |
バイナリファイルを検索対象から除外する |
-n |
行番号を表示する |
-F |
固定文字列として検索する |
grep -rInに含まれるのは、-r、大文字の-I、-nです。小文字の-iは含まれません。初めのうちはgrep -r -I -nのように分けて書くと、オプションを読み違えにくくなります。
拡張子を限定し、不要なディレクトリを除外する
# TypeScriptだけを対象にし、.gitとnode_modulesを除外する。
grep -r -I -n -F \
--include='*.ts' \
--exclude-dir='.git' \
--exclude-dir='node_modules' \
'getUserData' .
一致したファイル名だけ表示する
# 一致行は表示せず、対象ファイルを1ファイル1回だけ表示する。
grep -r -I -l -F 'ERROR' .
-lは小文字のLです。大文字の-Lは、一致しなかったファイル名を表示する別のオプションです。
2. rgで開発プロジェクトを高速に探す
rgはripgrepという検索ツールのコマンド名です。最初からディレクトリを再帰検索し、通常は.gitignore、隠しファイル、バイナリを考慮して不要な対象を除外します。ソースコードの検索では、grep -rより短く書けます。
# プロジェクト全体から固定文字列を検索する。
rg -nF 'getUserData' .
# 一致したファイル名だけ表示する。
rg -lF 'getUserData' .
# TypeScriptとTSXだけを対象にする。
rg -nF \
-g '*.ts' \
-g '*.tsx' \
'getUserData' .
rgでファイル名を絞り込む
# rgの検索対象ファイルを一覧にする。
rg --files
# ファイル名にconfigを含むものを絞り込む。
rg --files | rg -i 'config'
.gitignoreの対象も検索したいときは--no-ignore、隠しファイルも含めたいときは--hiddenを明示します。ただし、検索量が増えるため、必要な場合だけ使います。
# 隠しファイルを含めるが、ignore設定は引き続き尊重する。
rg --hidden -nF 'API_URL' .
# ignore設定の対象も意図的に検索する。
rg --no-ignore -nF 'API_URL' .
3. findでファイル名や更新時刻を探す
findは、ファイル名、種類、更新時刻などの条件でパスを探すコマンドです。ファイルの中身ではなく、「どこにあるか」を探すときに使います。
# ファイル名にconfigを含むファイルを探す。
find . -type f -iname '*config*'
# ファイル名がapplication.ymlのものを探す。
find . -type f -name 'application.yml'
# ディレクトリ名にconfigを含むものを探す。
find . -type d -iname '*config*'
| 条件 | 意味 |
|---|---|
-type f |
ファイルだけを対象にする |
-type d |
ディレクトリだけを対象にする |
-name |
大文字と小文字を区別して名前を比較する |
-iname |
大文字と小文字を区別せず名前を比較する |
*config*のようなワイルドカードは、シェルではなくfindに渡す必要があります。必ずシングルクォートで囲みます。
複数の拡張子を探す
# JavaScript、TypeScript、TSXを検索対象にする。
find . -type f \( \
-name '*.js' \
-o -name '*.ts' \
-o -name '*.tsx' \
\)
\(と\)で複数条件をひとまとまりにし、-oで「または」を表します。
最近更新されたファイルを探す
# 直近7日以内に更新されたファイルを探す。
find . -type f -mtime -7
# 直近60分以内に更新されたファイルを探す。
find . -type f -mmin -60
findとgrepを安全に組み合わせる
# .confファイルのみをgrepへ渡し、timeoutを検索する。
find . -type f -name '*.conf' \
-exec grep -nH -F 'timeout' {} +
{}に見つかったパスが入り、+によって複数パスをまとめてgrepへ渡します。単純なfind ... | xargs grep ...より、空白や改行を含むファイル名を扱いやすい書き方です。
4. fdでファイル名を簡潔に探す
fdはfindよりも短いコマンドでファイル名を探せるツールです。通常は.gitignoreや隠しファイルも考慮するため、開発プロジェクトで使いやすくなっています。検索パターンは標準で正規表現として扱われ、-gを付けるとシェルのワイルドカードに近いグロブとして指定できます。
# ファイルだけを対象にし、名前にconfigを含むものを探す。
fd -t f 'config'
# log拡張子のファイルを探す。
fd -t f -e log
# グロブとしてファイル名を指定する。
fd -t f -g '*config*'
UbuntuでAPT版をインストールした場合は、コマンド名がfdではなくfdfindになります。
5. Gitリポジトリでgit grepを使う
git grepは、基本的にGitが追跡しているファイルを検索します。node_modulesや一時ファイルを避け、リポジトリのコードだけを探したいときに便利です。
# Gitの追跡対象から固定文字列を検索する。
git grep -nF 'getUserData'
# TypeScriptとTSXに対象を限定する。
git grep -nF 'getUserData' -- '*.ts' '*.tsx'
# 一致したファイル名だけ表示する。
git grep -lF 'getUserData'
Gitにまだ追加していない新規ファイルも探したい場合は、rgまたはgrep -rを使います。
6. Ubuntu、Amazon Linux、macOSの違い
基本的なgrepとfindは同じ考え方で使えます。ただし、UbuntuやAmazon LinuxではGNU版、macOSではBSD系の実装が標準です。そのため、すべてのオプションが完全に同じとは限りません。
| OS | 標準のgrep・find
|
パッケージ管理 | rg |
fd |
OS全体の検索 |
|---|---|---|---|---|---|
| Ubuntu 24.04 | GNU版 | apt |
ripgrepパッケージ |
fd-findパッケージ、コマンド名はfdfind
|
find、必要に応じてlocate
|
| Amazon Linux 2023 | GNU版 | dnf |
標準リポジトリの有無を都度確認 | 標準リポジトリの有無を都度確認 | find |
| Amazon Linux 2 | GNU版 | yum |
パッケージとサポート元を確認 | パッケージとサポート元を確認 | find |
| macOS | BSD系 | Homebrewはbrew
|
brew install ripgrep |
brew install fd、コマンド名はfd
|
mdfind |
Amazon Linux 2は2026年6月30日にサポートが終了しています。表のAmazon Linux 2は既存環境を調査するための参考です。新規構築ではAmazon Linux 2023を選び、既存のAmazon Linux 2は移行を計画します。
Ubuntuでrgとfdを入れる
Ubuntu 24.04では、APTの標準リポジトリからインストールできます。
# パッケージ情報を更新し、ripgrepとfd-findを入れる。
sudo apt update
sudo apt install -y ripgrep fd-find
# Ubuntuのfd-findパッケージはfdfindという名前で実行する。
rg --version
fdfind --version
Amazon Linuxでは先に標準コマンドを確認する
Amazon Linux 2023ではgrepとfindutilsのRPMを確認します。ripgrepやfd-findは、リリースとアーキテクチャーによって利用できるパッケージが異なる可能性があるため、インストールコマンドを固定して覚えません。
# Amazon Linux 2023で標準の検索コマンドのRPMを確認する。
rpm -q grep findutils
# 現在有効なリポジトリで提供されているか検索する。
dnf search ripgrep
dnf search fd-find
2026年8月27日にAWS公式のAmazon Linux 2023全パッケージ一覧を確認した範囲では、ripgrepとfd-findを確認できませんでした。見つからない場合は、まずgrepとfindを使います。外部バイナリやRustのcargo installを使う場合は、組織のソフトウェア導入ルールとサポート方針を先に確認してください。
Amazon Linux 2ではdnfではなくyumを使います。古い手順にあるEPELの有効化をそのまま適用せず、現在のサポート状況を確認します。
macOSでrgとfdを入れる
# Homebrewからripgrepとfdを入れる。
brew install ripgrep fd
# 実行できるコマンドとバージョンを確認する。
command -v rg
command -v fd
rg --version
fd --version
GNU版とBSD版で異なる例
この記事のgrep -nF、grep -r -I -n、find -name、find -iname、find -mmin、find -exec ... {} +は、Ubuntu、Amazon Linux、macOSの実装で使える範囲に絞っています。
一方で、次の例はmacOS標準コマンドではそのまま使えません。
| Linuxで見かける例 | macOS標準での状態 | 対処 |
|---|---|---|
grep -P |
BSD grepでは-Pを使えない |
基本正規表現や拡張正規表現で表現するか、GNU grepを入れる |
find ... -printf |
BSD findでは-printfを使えない |
-printや-execを使うか、GNU findutilsを入れる |
GNU版が必要な場合は、Homebrewで導入できます。標準コマンドと区別するため、通常はggrepとgfindという名前で実行します。
# GNU版が本当に必要な場合だけ導入する。
brew install grep findutils
# macOS標準版とGNU版を混同しないよう、実行名を確認する。
ggrep --version
gfind --version
7. ログを検索する
ログファイルをlessで開く
大きなログを開いたまま前後を確認するなら、lessが便利です。
# ログを必要な範囲だけ読み込みながら表示する。
less logs/application.log
lessを開いた後は、次のキーを使います。
| 操作 | 動作 |
|---|---|
/ERROR |
前方向にERRORを検索する |
?ERROR |
後方向にERRORを検索する |
n |
同じ方向の次の一致箇所へ移動する |
N |
反対方向の一致箇所へ移動する |
q |
lessを終了する |
ログを追跡しながら見る場合はless +Fを使います。Ctrl+Cで追跡を止めると、そのまま/ERRORで検索できます。
# 追記されるログを追跡する。
less +F logs/application.log
UbuntuとAmazon Linuxのsystemdログを探す
UbuntuとAmazon Linux 2023はsystemdを使うため、サービスログがファイルではなくJournalにある場合があります。journalctlで対象サービスと期間を絞ります。
# nginxサービスの直近1時間を取得し、errorを大文字・小文字を区別せず探す。
sudo journalctl \
-u nginx \
--since '1 hour ago' \
--no-pager \
| grep -iF 'error'
nginxの部分は実際のsystemdユニット名に置き換えます。
macOSの統合ログを探す
macOSの統合ログはlog showで検索できます。CONTAINS[c]の[c]は、大文字と小文字を区別しない指定です。
# 直近1時間の統合ログからerrorを含むメッセージを探す。
log show \
--last 1h \
--style compact \
--predicate 'eventMessage CONTAINS[c] "error"'
8. macOS全体をmdfindで探す
mdfindはSpotlightのメタデータストアを検索するmacOS専用コマンドです。find /でストレージ全体を順にたどるより速い場合があります。
# ファイル名がnginx.confに一致するものをSpotlightで探す。
mdfind -name 'nginx.conf'
# Documents配下に検索範囲を限定する。
mdfind -onlyin "$HOME/Documents" 'invoice'
# 一致件数だけ表示する。
mdfind -count 'invoice'
mdfindはインデックスを使うため、Spotlightの検索対象外にした場所や、まだインデックスが更新されていないファイルは見つからない可能性があります。結果が出ないときは、対象ディレクトリからfindも試します。
9. Vimで開いたファイルを探す
Vimのノーマルモードで/を入力すると、ファイル内を前方向に検索できます。
/ERROR
| キー | 動作 |
|---|---|
/ERROR |
前方向にERRORを検索する |
?ERROR |
後方向にERRORを検索する |
n |
同じ方向の次の一致箇所へ移動する |
N |
反対方向の一致箇所へ移動する |
* |
カーソル位置の単語を前方向に検索する |
# |
カーソル位置の単語を後方向に検索する |
Vimのwは検索ではなく、次の単語の先頭へ移動するコマンドです。カーソル位置の単語を探すときは*を使います。
10. コマンド本体の場所を探す
同じ名前のPythonやNode.jsが複数入っているときは、コマンドがどこから実行されるかを確認します。
# PATH上で最初に見つかるpython3を表示する。
command -v python3
# エイリアス、シェル関数、実行ファイルを含め、同名候補を表示する。
type -a python3
whichもよく見かけますが、シェルのエイリアスや関数まで確認するなら、command -vとtype -aを先に使うと判断しやすくなります。
よくある失敗と安全な使い方
1. 検索文字列とワイルドカードを引用符で囲む
# シェルの展開を避けるため、パターンをシングルクォートで囲む。
grep -nF 'https://example.com?a=1&b=2' config.txt
find . -type f -name '*.log'
検索したい値自体にシングルクォートが含まれる場合は、引用符の組み立て方が変わります。
2. 最初から権限エラーを隠さない
2>/dev/nullを付けると標準エラー出力を捨てられますが、アクセス権限の問題まで見えなくなります。まずエラーを読み、検索開始ディレクトリや権限が正しいか確認します。
3. 検索と削除を一度に行わない
findには-deleteや-exec rmと組み合わせる方法もありますが、条件を間違えると予期しないファイルを失います。この記事では検索だけを扱います。削除する場合は、先に対象一覧を確認し、バックアップやGitの状態を確認します。
4. rgの結果がないときはignore設定を確認する
rgは高速で便利ですが、.gitignoreや.ignoreに入っているパスを通常は除外します。rg --filesで検索対象を確認し、必要な場合だけ--hiddenや--no-ignoreを付けます。
実務用チートシート
| やりたいこと | コマンド |
|---|---|
| 1ファイル内の固定文字列を行番号付きで探す | grep -nF '文字列' file.txt |
| ディレクトリ配下を標準コマンドで探す | grep -r -I -n -F '文字列' . |
| 開発プロジェクトを高速に探す | rg -nF '文字列' . |
| 一致したファイル名だけ表示する | rg -lF '文字列' . |
| ファイル名で探す | find . -type f -iname '*ファイル名*' |
| Gitの追跡対象を探す | git grep -nF '文字列' |
Ubuntuのfd-findで探す |
fdfind -t f 'ファイル名' |
| macOS全体から名前で探す | mdfind -name 'ファイル名' |
| コマンドの場所を確認する | command -v コマンド名 |
参考・確認先
- Linux grep manual page
- Linux find manual page
- FreeBSD grep manual page
- FreeBSD find manual page
- ripgrep公式GitHubリポジトリ
- fd公式GitHubリポジトリ
- Git - git-grep Documentation
- Ubuntu 24.04 ripgrepパッケージ
- Ubuntu 24.04 fd-findパッケージ
- Amazon Linux 2023のパッケージ管理
- Amazon Linux 2023の全パッケージ一覧
- Amazon Linux 2 FAQ
- Apple macOSユーザガイド Spotlightで検索する
仕様確認日: 2026年8月27日
まとめ
- ファイルの中身は
grepまたはrgで探す - ファイル名は
findまたはfdで探す - Gitの追跡対象だけ探すなら
git grepを使う - UbuntuとAmazon LinuxはGNU版、macOSはBSD系の
grepとfindが標準のため、OS間で一部オプションが異なる - Linuxのsystemdログは
journalctl、macOSの統合ログはlog showで絞り込む -
findと削除コマンドを組み合わせる前に、必ず検索結果を確認する
おわりに
検索コマンドは、オプションをすべて暗記するより、「中身を探すのか、名前を探すのか」を切り分けることが大切です。まずgrep -nFとfind -inameから始め、開発プロジェクトではrgとfdを追加すると、無理なく使い分けられます。
Wealthy Designでは、AWS・Google Cloud・Microsoft Azureのクラウド設計やWeb開発と合わせて、Linuxの基本操作や障害調査を再現できる形で学ぶことを大切にしています。技術発信やエンジニア育成の取り組みは、会社サイトにまとめています。

