LinuxDrill › ファイル検索演習 › 解説
Linuxファイル検索コマンド解説
公開日: 2026年6月28日
Linux のファイル検索には find(ファイルそのものを探す)と grep -r(ファイルの中身を検索する)の2本柱があります。用途を正しく使い分けることが重要です。
1. find の基本構文
find [検索開始パス] [条件] [アクション]
条件を省略すると、指定パス以下のすべてのファイル・ディレクトリを再帰的に列挙します。
# カレントディレクトリ以下を全列挙 find . # /etc 以下を全列挙 find /etc
2. ファイル名で検索(-name / -iname)
# 拡張子が .log のファイルを検索 find /var/log -name "*.log" # 大文字小文字を区別しない検索 find /home -iname "readme*" # ファイル名が完全一致 find / -name "passwd"
3. ファイル種別で絞り込む(-type)
# ディレクトリだけを検索 find /var -type d # 通常ファイルだけを検索 find /etc -type f # シンボリックリンクだけを検索 find /usr -type l
4. サイズで検索(-size)
# 100MB より大きいファイル find / -size +100M # 1KB 未満のファイル find /tmp -size -1k # ちょうど 1024 バイトのファイル find . -size 1024c
単位: c=バイト、k=KB、M=MB、G=GB。+ は「より大きい」、- は「より小さい」です。
5. 更新日時で検索(-mtime / -newer)
# 3日以内に変更されたファイル find /var/log -mtime -3 # 7日以上前に変更されたファイル find /tmp -mtime +7 # file.txt より新しいファイル find . -newer file.txt
-mtime -N は「N日以内」、-mtime +N は「N日より前」を意味します。
6. パーミッションで検索(-perm)
# パーミッションが 755 のファイル find /usr/bin -perm 755 # SUID ビットが立っているファイル find / -perm -4000 -type f # ワールド書き込み可能なファイル(セキュリティ確認) find / -perm -o+w -type f 2>/dev/null
7. 所有者で検索(-user / -group)
# alice が所有するファイル find /home -user alice # staff グループのファイル find /var -group staff # 所有者が存在しないファイル(整理用) find / -nouser 2>/dev/null
8. -exec — 見つかったファイルにコマンドを実行
-exec は find が見つけたファイルごとにコマンドを実行します。{} がファイルパスに展開され、\; でコマンドを終端します。
# 見つかったファイルを削除
find /tmp -name "*.tmp" -mtime +7 -exec rm {} \;
# 見つかったファイルのパーミッションを変更
find /var/www -type f -exec chmod 644 {} \;
# 見つかったファイルの詳細を ls -l で表示
find . -name "*.sh" -exec ls -l {} \;
\; の代わりに + を使うと複数のファイルをまとめて1回のコマンドに渡せるため高速です。
find /etc -name "*.conf" -exec grep -l "timeout" {} +
9. 条件の組み合わせ(-and / -or / -not)
# .log かつ 10MB 超のファイル(-and は省略可) find /var/log -name "*.log" -size +10M # .sh または .py のファイル find . -name "*.sh" -o -name "*.py" # .txt 以外のファイル find . -not -name "*.txt"
10. grep -r — ディレクトリ内のファイル全文検索
grep -r(または grep -R)は指定ディレクトリ以下のファイルを再帰的に検索します。
# /etc 以下から "password" を含む行を検索 grep -r "password" /etc # 大文字小文字を区別しない再帰検索 grep -ri "error" /var/log # ファイル名だけ表示(-l) grep -rl "TODO" ./src # 行番号を表示(-n) grep -rn "def main" ./ # 拡張子を限定(--include) grep -r "import" --include="*.py" ./ # バイナリを除外(-I) grep -rI "api_key" ./
11. find と grep の使い分け
- ファイル名や属性で探す →
find - ファイルの中身(文字列)で探す →
grep -r - 両方を組み合わせる →
find ... -exec grep ...またはgrep -r --include=