ファイル検索の基本
Linuxでは、ファイルシステム内で特定の条件に合致するファイルを検索することが可能である。主に使用されるコマンドはlocateとfindである。
locateコマンドの特徴
locateは既存のデータベースを参照して高速に検索を行うコマンドである。
- データベースは定期的に更新されるが、手動で更新することも可能(
updatedb) - 検索速度が速く、あいまい検索が可能だが、リアルタイム性はない
- オプション:
-b: ファイル名のみを対象に検索-c: 結果の件数を表示-r: 正規表現による検索(BRE形式)
locate text.4tYe
findコマンドの詳細
findは指定されたディレクトリ配下をリアルタイムで検索するツールである。
- 検索精度が高く、リアルタイムでの検索が可能
- 検索範囲、検索条件、処理内容を柔軟に設定可能
基本構文:
find [オプション] [検索開始パス] [検索条件] [アクション]
主な検索条件
- ファイル名による検索
-name: ファイル名のマッチング(大文字小文字区別あり)-iname: 大文字小文字を区別しない-regex: 正規表現によるパス全体のマッチング
- 所有者・所有グループによる検索
-user: 指定ユーザーが所有するファイル-group: 指定グループが所有するファイル-nouser: 所有者が存在しないファイル-nogroup: 所有グループが存在しないファイル
- ファイルタイプによる検索
-type f: 通常ファイル-type d: ディレクトリ-type l: シンボリックリンク-type b: ブロックデバイス-type c: キャラクタデバイス-type p: パイプ-type s: ソケット
条件の組み合わせ
-a(AND): 複数条件がすべて成立-o(OR): 条件のいずれかが成立!(NOT): 条件が成立しない
具体的なサンプルコマンド
- /var配下でrootユーザーかつmailグループが所有するファイルを検索
- /usr配下でroot, bin, hadoop以外のユーザーが所有するファイルを検索
- /etc配下で最近7日以内に更新され、rootやhadoop以外が所有するファイルを検索
- 所有者または所有グループがないが、最近7日以内にアクセスされたファイルを検索
- /etc配下で1MBを超える通常ファイルをリスト表示
- /etc配下で全ユーザーが書き込み権限を持たないファイルを検索
- /etc配下で少なくとも誰かが実行権限を持たないファイルを検索
- /etc配下で全ユーザーが実行可能かつ他ユーザーが書き込み可能なファイルを検索
find /var -user root -group mail -ls
find /usr -not -user root -a -not -user bin -a -not -user hadoop
find /usr -not \( -user root -o -user bin -o -user hadoop \) -ls
find /etc -mtime -7 -a -not \( -user root -o -user hadoop \) -ls
find / $ -nouser -o -nogroup $ -atime -7 -ls
find /etc -size +1M -type f -exec ls -lh {} \;
find /etc -not -perm /222 -type f -ls
find /etc -not -perm -111 -type f -ls
find /etc -perm -113 -type f -ls