「grep -rオプションの使い方がわからない」
Linuxの
grep コマンドに -r(recursive)オプションを付けると、指定したディレクトリ以下を再帰的に検索して、特定の文字列を含むファイルとその行を表示できます。この記事では、grepコマンドでディレクトリを再帰検索する方法と実務で役立つオプションを解説します。
・grep -rでディレクトリ内を再帰的に検索する基本手順
・-lオプションでファイル名のみ表示する方法
・--excludeオプションで特定ファイルを除外する方法
・大文字・小文字を区別しない検索(-i)との組み合わせ
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
grep -rでディレクトリを再帰的に検索する(基本)
grep -r の基本構文は次の通りです。# grep -r "検索文字列" 検索対象ディレクトリ
1. ディレクトリ内を再帰的に検索する
# workディレクトリ内から "japan" を含むファイルを検索(大文字小文字区別なし) $ grep -ri "japan" work work/country_list_cpm2.txt:Japan work/country_list.txt:Japan work/country_list_cpm1.txt:Japan work/country_list_column.txt:Japan
・-i:大文字・小文字を区別しない
-R(大文字)でも同様に動作します。-R は -r と同じですが、シンボリックリンクも追跡します。応用・実務Tips
1. -lオプションでファイル名のみ表示する
マッチした行の内容ではなく、「マッチしたファイル名だけ」を知りたい場合は-l オプションを使います。$ grep -rl "japan" work work/country_list_cpm2.txt work/country_list.txt work/country_list_cpm1.txt work/country_list_column.txt
2. -nオプションで行番号も表示する
$ grep -rn "japan" work work/country_list.txt:1:Japan work/country_list_cpm1.txt:1:Japan
3. --excludeで特定のファイルを除外する
バイナリファイルや特定の拡張子を除外して検索します。# .gz(圧縮ファイル)を除外して検索 $ grep -r "ERROR" /var/log/ --exclude="*.gz" # バックアップファイルを除外 $ grep -r "password" /etc/ --exclude="*.bak"
4. --exclude-dirで特定のディレクトリを除外する
# .git ディレクトリを除外してソースコードを検索 $ grep -r "TODO" /project/ --exclude-dir=".git" # node_modules と dist を除外 $ grep -r "const" /webapp/ --exclude-dir=node_modules --exclude-dir=dist
5. -cオプションでマッチした行数をカウントする
$ grep -rc "japan" work work/country_list_cpm2.txt:1 work/country_list.txt:1 work/country_list_cpm1.txt:1 work/country_list_column.txt:1
実務での活用例
1. /etc配下から設定値を検索する
# SSH設定の確認 $ grep -r "PasswordAuthentication" /etc/ssh/ /etc/ssh/sshd_config:PasswordAuthentication no # PAM設定からpasswordを含む行を確認 $ grep -r "password" /etc/pam.d/ --exclude="*.bak"
2. ログから特定の期間のエラーを検索する
# /var/log以下のエラーログを検索(圧縮ファイル除外) $ grep -r "ERROR" /var/log/ --exclude="*.gz" --exclude="*.bz2"
本記事のまとめ
| やりたいこと | コマンド |
|---|---|
| ディレクトリ内を再帰検索 | grep -r "文字列" ディレクトリ |
| 大文字小文字を区別しない | grep -ri "文字列" ディレクトリ |
| ファイル名のみ表示 | grep -rl "文字列" ディレクトリ |
| 行番号も表示 | grep -rn "文字列" ディレクトリ |
| 特定拡張子を除外 | grep -r "文字列" ディレクトリ --exclude="*.gz" |
| 特定ディレクトリを除外 | grep -r "文字列" ディレクトリ --exclude-dir=.git |
より複雑な検索パターン(find|xargs|grepの連携)はこちらを参照してください。
grepを使いこなして、ログ調査と設定確認を効率化しませんか?
grep -rは/etc配下の設定確認や/var/log以下のエラー調査で日常的に使う基本コマンドです。オプションを知っておくと作業時間が大きく変わります。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 次のページへ:Linuxの主要なログファイルを確認する方法|/var/log/配下の一覧とjournalctlの使い方
- 前のページへ:SSHのポート番号を変更する方法|sshd_configのPort設定とfirewall-cmdでの開放手順
- この記事の属するカテゴリ:Linuxtipsへ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます