はじめに
Linuxシステム内で、特定の名前、サイズ、更新日時、パーミッションなどの条件に一致するファイルやディレクトリを検索する際に使用するのが、findコマンドです。
findコマンドは、単にファイルを検索するだけでなく、検索結果に対して別のアクション(コマンド実行など)を適用できるため、システム管理やスクリプト作成において不可欠なツールです。その柔軟性と強力さから、LPICレベル1の試験でも重要度の高いコマンドとして扱われます。
この記事では、findコマンドの基本的な書式、コマンド名の由来、ファイルの検索に必須となる主要オプション、そしてLPIC対策として押さえるべき高度な検索条件とアクションについて詳しく解説していきます。
findコマンドの基本
まずは、findコマンドの基本的な書式と、検索の流れを確認しましょう。
findコマンドの書式
find 検索開始ディレクトリ [検索条件] [アクション]
- ポイント:
findコマンドは、指定された検索開始ディレクトリを起点に、その配下(サブディレクトリ含む)を再帰的に探索します。
主要オプション一覧(検索条件のカテゴリ)
findコマンドのオプションは、ファイルの種類や名前、時間、サイズなど、検索の条件として機能します。
| カテゴリ | オプション(代表例) | 意味 | 補足 |
| 名前 | -name | 指定したファイル名に一致するものを検索する | *や?などのワイルドカードが使える |
| 種類 | -type | 指定したファイルの種類(ファイル、ディレクトリなど)を検索する | f (ファイル), d (ディレクトリ) など |
| 日時 | -mtime | 指定した日数前に更新されたファイルを検索する | +n (n日以上前), -n (n日以内) など |
| サイズ | -size | 指定したサイズに一致するファイルを検索する | c (バイト), k (KB) などで指定 |
| パーミッション | -perm | 指定したパーミッションを持つファイルを検索する | 8進数で指定 |
| 所有者 | -user | 指定したユーザーが所有するファイルを検索する |
コマンド名の由来:なぜ「find」なのか?
findコマンドの「find」は、英語の “find”(見つける、探す) という動詞から来ています。
このコマンドの目的は、ファイルシステム全体からユーザーが求めているファイルやディレクトリの情報を「見つけ出す」ことです。その直接的な機能が、そのままコマンド名として使われています。
必須オプションの詳細と実践例
findコマンドは非常に多くのオプションを持ちますが、ここではLPIC対策として特に重要な検索条件とアクションに焦点を当てて解説します。
1. -name(名前による検索)
意味: 指定したパターンに一致する名前のファイルやディレクトリを検索します。シェルのワイルドカード(*, ?)を使用できますが、シェルに展開されないようにクォーテーション(''または"")で囲むのが一般的です。
実践例:
find /home/bunsoko -name '*.log'
# /home/bunsokoディレクトリ以下で、ファイル名が「.log」で終わるファイルを検索

2. -type(ファイルの種類による検索)
意味: ファイルの種類を指定して検索します。
f: 通常のファイル (File)d: ディレクトリ (Directory)l: シンボリックリンク (Link)
実践例:
find . -type d -name 'test*'
# 現在のディレクトリ以下で、名前が「test」で始まるディレクトリのみを検索

3. -mtime(最終更新日時による検索)
意味: ファイルの最終更新日時(Modification Time)に基づいて検索します。
n: ちょうど n 日前に更新されたファイル+n: n 日より前(n+1 日以上前)に更新されたファイル-n: n 日以内(n 日未満前)に更新されたファイル
実践例:
find /var/log -mtime +30
# /var/log以下で、30日より前(31日以上前)に更新されたファイルを検索

4. -size(サイズによる検索)
意味: ファイルサイズに基づいて検索します。単位をサフィックスとして指定します。
c: バイト (byte)k: キロバイト (KB)M: メガバイト (MB)
実践例:
find /var/log -size +1M
# /tmp以下で、サイズが10MBより大きいファイルを検索

注意:一般ユーザでは検索先の/var/logの一部ファイルへの権限が足りないのでrootユーザで実行しています。
5. -perm(パーミッションによる検索)
意味: 指定したパーミッション(権限)を持つファイルを検索します。8進数で指定します。
モード: 厳密にその権限(例: 755)を持つファイルを検索-モード: 指定した権限を全て持つファイルを検索(例: -644は、rw-r--r--以上の権限を持つファイルを検索)
実践例:
find /etc -perm 644
# /etc以下で、厳密にパーミッションが644のファイルを検索

高度な検索とアクション
1. 検索条件の組み合わせ
findは複数の条件を論理演算子で組み合わせることができます。
| 演算子 | 意味 | 補足 |
-and (または省略) | AND(かつ) | 複数の条件がすべて満たされる場合に一致 |
-or | OR(または) | いずれかの条件が満たされる場合に一致 |
! または -not | NOT(〜ではない) | 条件が満たされない場合に一致 |
実践例:
find . -mtime +7 -and -name '*.bak'
# 最終更新日時が7日以前 **かつ** ファイル名が「.bak」で終わるファイルを検索

2. -exec(検索結果に対するアクション)
意味: 検索によって見つかったファイルそれぞれに対して、指定した外部コマンドを実行します。
書式:
-exec コマンド {} \;
{}: 見つかったファイル名に置換されるプレースホルダー\;: コマンドの終了を示す区切り文字
実践例:
find . -type f -exec ls -l {} \;
# 現在のフォルダ内で見つけたファイルに対して詳細表示(ls -l)する

LPIC対策としてのポイント
findコマンドに関するLPICの出題傾向として、以下の点を確実に押さえておきましょう。
- 再帰的探索:
findはデフォルトで再帰的にディレクトリを探索すること。 - ワイルドカードのクォーテーション:
-nameオプションでワイルドカードを使用する場合、シェルによる展開を防ぐために''または""で囲む必要があること。 - 日時 (
-mtime) の符号:+n(n日より前)と-n(n日以内)の区別。
まとめ
今回は、ファイルシステム内の高度な検索を行うfindコマンドについて、その基本的な使い方から、多様な検索条件、そして検索結果にアクションを実行する-execオプションまでを詳しく解説しました。findコマンドをマスターすることは、Linuxのファイル管理と自動化スキルを大きく向上させます。
LPICレベル1の試験対策としては、-typeや-mtimeによる条件指定、そして-execによるアクション実行の書式をしっかりと理解しておきましょう。



コメント