Linuxにおけるfindコマンドの詳細解説

ファイル検索の基本

Linuxでは、ファイルシステム内で特定の条件に合致するファイルを検索することが可能である。主に使用されるコマンドはlocatefindである。

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): 条件が成立しない

具体的なサンプルコマンド

  1. /var配下でrootユーザーかつmailグループが所有するファイルを検索
  2. find /var -user root -group mail -ls
  3. /usr配下でroot, bin, hadoop以外のユーザーが所有するファイルを検索
  4. 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
  5. /etc配下で最近7日以内に更新され、rootやhadoop以外が所有するファイルを検索
  6. find /etc -mtime -7 -a -not \( -user root -o -user hadoop \) -ls
  7. 所有者または所有グループがないが、最近7日以内にアクセスされたファイルを検索
  8. find / $ -nouser -o -nogroup $ -atime -7 -ls
  9. /etc配下で1MBを超える通常ファイルをリスト表示
  10. find /etc -size +1M -type f -exec ls -lh {} \;
  11. /etc配下で全ユーザーが書き込み権限を持たないファイルを検索
  12. find /etc -not -perm /222 -type f -ls
  13. /etc配下で少なくとも誰かが実行権限を持たないファイルを検索
  14. find /etc -not -perm -111 -type f -ls
  15. /etc配下で全ユーザーが実行可能かつ他ユーザーが書き込み可能なファイルを検索
  16. find /etc -perm -113 -type f -ls

タグ: linux find locate コマンドライン ファイル検索

8月7日 12:37 投稿