InfraAcademy

InfraAcademy Blog

Linuxでファイル検索をする方法は?【findコマンドの使い方を詳しく解説!】

| #Linux #コマンド #Linux入門
Linuxをブラウザで試してみる

Linux・ネットワーク・AWSを、環境構築なしで実践学習できます

こんにちは、インフラエンジニアのryuです。

今回は、Linuxでファイルやディレクトリを検索するときに使う find コマンドについて解説します。

Linuxを使っていると、

「設定ファイルをどこに置いたか分からない」 「100MB以上ある大きなファイルを探したい」 「昨日更新されたログだけ見つけたい」

という場面があります。

そんなときに使うのが find コマンドです。

find はファイル名だけでなく、

  • ファイルかディレクトリか
  • 更新日時
  • ファイルサイズ
  • 所有者
  • パーミッション

など、さまざまな条件を組み合わせて検索できます。

この記事では、Linux初心者向けに find の基本構文から、-name-type-mtime-size-user-exec まで、実務でもよく使う検索方法を順番に解説します。

Linuxでファイル検索をするならfindコマンド

Linuxでファイルやディレクトリを検索するときは、

find

を利用します。

基本的な書き方は、

find [検索を開始する場所] [検索条件]

です。

例えば、現在のディレクトリ以下から test.txt を探すなら、

find . -name "test.txt"

です。

ここにある、

.

は「カレントディレクトリ」を意味します。

つまり、

現在のディレクトリ
↓
その配下を再帰的に探す
↓
test.txt という名前を検索

という動作です。

まず検索用のファイルを作ってみる

実際に動かしながら確認してみましょう。

touch test{1..10}.txt
ls -la

これで、

test1.txt
test2.txt
...
test10.txt

というファイルを作成できます。

検索するためのファイルを作成

作成できたら、次のコマンドを実行します。

find . -name "test1.txt"

すると、

./test1.txt

のように表示されます。

findコマンドでファイルを検索

-name でファイル名を検索する

-name は、名前を条件に検索するときに使います。

find . -name "test.txt"

完全一致ではなく、名前の一部だけ分かっている場合はワイルドカードを利用できます。

find . -name "*test*"

* は任意の文字列に一致します。

例えば、

mytest.txt
test1.log
old-test.conf

などが検索対象になります。

ここで重要なのは、*test*引用符で囲むことです。

find . -name "*test*"

とします。

引用符を付けないと、*find に渡る前にシェル側で展開される場合があるためです。

大文字・小文字を区別しないなら -iname

Linuxでは通常、ファイル名の大文字・小文字を区別します。

例えば、

Test.txt
test.txt
TEST.txt

は別の名前です。

大文字・小文字を区別せず検索したいなら、

find . -iname "test.txt"

を使います。

一部一致なら、

find . -iname "*test*"

です。

ファイルだけ検索するなら -type f

find はファイルだけでなくディレクトリなども検索します。

例えば、ディレクトリを作ってみましょう。

mkdir testdir
find . -name "*test*"

ディレクトリも検索可能

すると、ファイルだけでなく testdir も表示されます。

ファイルだけに絞りたい場合は、

find . -type f -name "*test*"

とします。

-type ff は通常のファイルです。

ディレクトリだけ検索するなら -type d

ディレクトリだけなら、

find . -type d -name "*test*"

です。

よく使うファイル種別は次のとおりです。

条件 意味
-type f 通常ファイル
-type d ディレクトリ
-type l シンボリックリンク

「設定ファイルを探したい」という場合は -type f を付けると、余計なディレクトリを除外できます。

検索する場所を指定する

find は検索開始位置が重要です。

現在のディレクトリ以下なら、

find .

/etc 以下なら、

find /etc -name "*.conf"

ユーザーのホームディレクトリ以下なら、

find ~ -name "*.txt"

です。

Linux全体から探すために、

find / -name "httpd.conf"

とすることもできますが、権限がないディレクトリでは、

Permission denied

が大量に表示される場合があります。

管理者権限が必要な調査なら、

sudo find / -name "httpd.conf"

を利用することもあります。

ただし、何でも sudo で検索する必要はありません。

まず検索範囲をできるだけ狭くする方が、速く安全に調査できます。

検索する階層を制限する -maxdepth

例えば現在のディレクトリ直下だけを探したい場合は、

find . -maxdepth 1 -type f

とします。

通常の find は配下を再帰的に検索します。

ディレクトリ階層が非常に深い場合、必要以上に広い範囲を検索すると時間がかかります。

「どこまで探す必要があるのか」が分かっている場合は -maxdepth を利用すると便利です。

更新日時で検索する

運用では、

「最近更新されたファイルを探したい」

という場面がよくあります。

例えば、過去10分以内に更新されたファイルを探すなら、

find . -type f -mmin -10

です。

-mmin は更新時刻を「分」で指定します。

過去1日以内に更新されたファイルなら、

find . -type f -mtime -1

のように -mtime を使えます。

初心者が混乱しやすいのが +- です。

例えば、

-mmin -10

なら「10分未満」。

-mmin +10

なら「10分より前」のように考えます。

「ちょうど10分前」という意味ではないため注意してください。

基準となるファイルより新しいものを探す

あるファイルより後に更新されたファイルを探したい場合は、

find . -newer reference.txt

を利用できます。

例えば、デプロイ前に、

touch /tmp/deploy-start

として基準ファイルを作っておき、その後、

find /var/www -type f -newer /tmp/deploy-start

とすれば、その時刻より後に更新されたファイルを探せます。

ファイルサイズで検索する

100MBより大きいファイルを探すなら、

find . -type f -size +100M

です。

1MB未満なら、

find . -type f -size -1M

のように指定できます。

代表的な単位には、

c  バイト
k  KiB相当
M  MiB相当
G  GiB相当

などがあります。

ディスク容量が足りないときに、

find /var -type f -size +1G

のように大きなファイルを探すことがあります。

ただし、ファイルを見つけたからといって、すぐ削除しないでください。

ログ、DB、アプリケーションデータなど重要なファイルの可能性があります。

所有者で検索する

特定ユーザーが所有しているファイルを探すなら、

find /var/www -user www-data

です。

グループなら、

find /var/www -group www-data

とします。

「デプロイしたファイルだけ所有者がおかしい」

といったトラブル調査で便利です。

パーミッションで検索する

例えば、モードが完全に 777 のファイルやディレクトリを検索するなら、

find . -perm 0777

です。

指定した権限ビットをすべて持つものを探す場合など、-perm には複数の指定方法があります。

権限調査では非常に便利ですが、最初は、

find . -perm 0777

のような完全一致から覚えると分かりやすいでしょう。

Linuxの権限についてはこちらで詳しく解説しています。

Linuxのファイル権限とは?chmodの数字・rwx・Permission deniedを解説

複数条件を組み合わせる

find の強みは、複数条件を組み合わせられることです。

例えば、

find /var/log -type f -name "*.log" -size +100M

なら、

/var/log以下
+
通常ファイル
+
.logで終わる
+
100MBより大きい

という条件です。

過去1日以内に更新されたログなら、

find /var/log -type f -name "*.log" -mtime -1

とできます。

実務では、1つのオプションだけでなく複数条件を組み合わせることが多いです。

OR条件を使う

例えば、.log または .txt を探したい場合は、

find . -type f \( -name "*.log" -o -name "*.txt" \)

とします。

-o がORです。

括弧はシェルに解釈されないよう、

\(
\)

とエスケープしています。

少し難しいので、最初は「複数条件も書ける」と覚えておけば十分です。

検索したファイルにコマンドを実行する -exec

find では、見つけたファイルに対して別のコマンドを実行できます。

例えば、

find . -type f -name "*.log" -exec ls -lh {} \;

とすると、見つけたログファイルへ ls -lh を実行します。

{} の部分に、検索で見つかったパスが入ります。

ただし、-exec と削除コマンドを組み合わせる場合は特に注意してください。

例えば、

find . -type f -name "*.tmp" -delete

rm を使えばファイルを削除できますが、条件を間違えると大量のファイルを失う可能性があります。

最初は必ず、

find . -type f -name "*.tmp"

だけを実行し、対象を確認してから削除処理へ進みましょう。

findgrep の違い

初心者のうちは findgrep を混同しやすいです。

大まかには、

find
→ ファイル名や属性を探す

grep
→ ファイルの中身にある文字列を探す

と考えます。

例えば、

find /etc -name "*.conf"

は設定ファイルそのものを探します。

一方、

grep -R "Listen 80" /etc

は、ファイルの中にある文字列を探します。

「ファイルを探したいのか」「ファイル内の文字を探したいのか」を最初に考えましょう。

locate との違い

Linuxには locate という検索コマンドもあります。

locate は事前に作成されたデータベースからファイル名を検索するため、高速に検索できる場合があります。

一方、find は実際のディレクトリツリーをたどりながら検索します。

そのため、

find
→ 条件を細かく指定して現在の状態を検索

locate
→ ファイル名を高速に探す

という違いがあります。

Linux初心者なら、まず find をしっかり使えるようになれば問題ありません。

findコマンドは実際に条件を変えながら覚える

find はオプションが多いため、一覧を全部暗記する必要はありません。

まずは、

find . -name "*.txt"
find . -type f
find . -type d
find . -mmin -10
find . -size +100M

あたりを実際に試してみるのがおすすめです。

InfraAcademyでは、Linuxコマンドをブラウザ上で実行しながら学習できます。

「本を読んでもコマンドがなかなか覚えられない」という方は、自分でファイルを作成し、条件を変えて検索してみると理解しやすくなります。

InfraAcademyでLinuxを実行しながら学ぶ

Linuxのfindコマンドまとめ

今回は、Linuxでファイルを検索する find コマンドについて解説しました。

基本構文は、

find [検索開始位置] [条件]

です。

まず覚えたいのは次のコマンドです。

find . -name "test.txt"
find . -iname "*test*"
find . -type f
find . -type d
find . -mmin -10
find . -size +100M
find . -user username

find は条件を組み合わせることで、実務のトラブル調査でもかなり役立ちます。

検索範囲をむやみに / へ広げるのではなく、

どこにありそうか → 何を条件に絞れるか

と考えながら使うのがポイントです。

あわせて読みたい

Next Action

記事で読んだ内容を、講座で実装してみましょう

InfraAcademyでは、ブラウザ上でLinuxやネットワークの実践環境を使いながら学習できます。無料で始められる講座から、学習の流れを試せます。

この記事を書いた人

ryu

InfraAcademy運営 / エンジニア

エンジニア歴10年。Linux、ネットワーク、クラウドを中心に、実務で役立つインフラ技術を初心者にもわかりやすく解説しています。

X: @ryu63614894

Related

関連記事

ブログ一覧へ

Roadmap

まずはこの4講座から

ログインすれば無料で始められる講座です。気になったテーマから手を動かして学べます。

講座一覧を見る