ファイルを効率的に検索することは、Linuxユーザー、開発者、システム管理者にとって不可欠なスキルである。Linuxには、ファイルやディレクトリを検索したり、その中身を検索したりするための複数のツールやコマンドが用意されている。

find “コマンドは、名前、タイプ、サイズ、変更時間、さらにはパーミッションに基づいてファイルを検索するための最も多用途なツールの1つである。

基本構文

find [path] [options] [expression]

a) ファイル名による検索

find /home -name "report.pdf"
  • /home→ 検索パス。

  • name→ ファイル名の完全一致(大文字小文字を区別)。

🔹大文字小文字を区別しない検索:

find /home -iname "report.pdf"

b) 拡張子による検索

find /var/log -type f -name "*.log"
  • -type f →ファイルのみ検索。
  • ディレクトリは-type dを使う。

c) サイズで検索

find / -size 500M
  • 500M→ 500MB以上のファイル。
  • 100k→ 100KBより小さいファイル。

d) 変更時間で検索

find /etc-typef -mtime -7
  • -mtime -7 → 過去7日以内に更新されたファイル。
  • 7日以上前のファイルを探すには7を使う。

e) 見つかったファイルに対するコマンドの実行

find /var/log -name "*.log" -exec gzip {} \;
  • var/log内のすべての.logファイルを圧縮します。

f) 複数の条件を組み合わせる

find /home -type f \( -name "*.pdf" -o -name "*.docx" \) -size +1M
  • 1MB以上のPDFまたはDOCXファイルを検索します。

locateコマンドでより高速に検索(ハイパフォーマンス)

find“と異なり、“locate “は事前に構築されたデータベースを使用し、ほぼ瞬時に検索を行います。

データベースのインストールと更新

sudo apt install mlocate # Debian/Ubuntu
sudo yum install mlocate # CentOS/RHEL
sudo updatedb # Update locate database

使用方法

locate report.pdf

🔹大文字小文字を区別せずに検索します:

locate -i report.pdf

🔹結果の数を制限する:

locate -n 20 nginx

⚠️ヒント検索する前に必ずsudo updatedbを実行してデータベースをリフレッシュしてください。

grepを使ったファイル内部の検索

ファイル内のテキストパターンを検索する必要がある場合は、grepを使います。

基本的な検索

grep"error"/var/log/syslog
  • var/log/syslogの中にある「error」という単語を検索する。

再帰検索

grep -rnw '/etc' -e "root"
  • r→ 再帰検索。
  • n→ 行番号を表示する。
  • w→ 単語全体にマッチする。

正規表現による検索

grep -E"([0-9]{3})-[0-9]{3}-[0-9]{4}"*.txt
  • .txtファイル内の電話番号を検索します。

whereis “と “which “を使う

a) 実行可能なバイナリを探す

whereis python
  • バイナリ、マニュアルページ、ソースの場所を表示します。

b) 正確な実行可能パスを見つける

which python3
  • 実行ファイルへのフルパスを出力します。

fd で検索する – find に代わるモダンな方法🚀(推奨)

fdfindより高速でユーザーフレンドリーな代替ツールです

fdをインストールする

sudo apt install fd-find # Ubuntu/Debian
sudo dnf install fd-find # Fedora

fd report.pdf
  • デフォルトの検索パス:カレントディレクトリ

fd -e log error
  • 拡張子が .log でerrorという名前のファイルを検索します。

fd -t d backup
  • backup” という名前のディレクトリを検索します。

fzf (Interactive Fuzzy Finder) による検索

fzfはリアルタイムの検索インターフェースを提供します。

fzfのインストール

sudo apt install fzf

使用方法

fzf
  • インタラクティブな検索UIを開きます。
  • 結果を即座にフィルタリングするために入力を開始します。

大規模ファイルシステムのパフォーマンスに関するヒント

  • 不要なディレクトリを除外する:

find / -path"/proc"-prune -o -name"*.conf" -print
  • 深さを制限して検索を高速化する:

find /var -maxdepth 2 -name"*.log"
  • 可能な限り、findの代わりにlocateを使う。
  • grepと組み合わせてライブ・コンテンツ検索を行う:
grep -r"DATABASE_URL"$(locate .env)

セキュリティに関する注意

  • 必要なとき以外はsudoの使用を避ける。
  • マルチユーザー環境では、grepと locateの検索を制限する。
  • 機密ディレクトリのパーミッションを正しく保つ。

結論

Linuxには、ファイルやコンテンツを効率的に検索するための強力で柔軟なツールが用意されている。

  • 高度な条件検索にはfindを使う。
  • 即座に検索したい場合はlocateを使う。
  • ファイル内部を検索する場合はgrepを使う。
  • fdや fzfのような最新のツールを使えば、使い勝手とパフォーマンスが向上する。

大規模な環境では、findgreplocateのようなインデックス検索を組み合わせることで、速度と精度の最適なバランスを実現できます。