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 の使い分け

← ファイル検索演習で練習する