サーバー上のどこかにファイルが存在することはわかっているが、どこにあるのかわからない場合、フォルダごとに検索したくなることがよくあります。これは良くない考えです。Linux では、 探す これはまさにそのために作られたものです。名前、種類、サイズ、日付、権利で検索し、結果が明確な場合にのみ行動を起こします。
特に本番サーバーでは、慎重に使用することをお勧めします。ルートレベルで`find`コマンドを実行すると、膨大な数のファイルをスキャンし、アクセス権限エラーを表示し、ディスクに不要な負荷をかける可能性があります。重要なのは、可能な限り広範囲なコマンドを入力することではなく、検索範囲を素早く絞り込むことです。

まずは正しい場所を探すことから始めましょう
基本的な形式はシンプルです。まず開始フォルダを指定し、次に検索条件を指定します。
find /etc -name "ssh_config"
ここで、Linux は、 ssh_config で /等 およびそのサブフォルダも対象となります。ファイルが特定の場所に存在することがわかっている場合は、その場所から検索を開始してください。その方が高速で読みやすく、システム全体を不必要にスキャンする必要もありません。
大文字小文字の区別を無視するには、 -iname :
find /var/www -iname "*.conf"
ルートから始めると、次のようなメッセージが表示されるはずです。 許可が拒否されましたこれは必ずしも問題ではありません。隠すことはできますが、権利問題を探している場合は、組織的に隠すのは避けてください。
find / -name "nginx.conf" 2>/dev/null
ファイルの種類で検索を絞り込む
サーバー上では、名前はファイル、フォルダ、シンボリックリンク、またはその他のものに対応します。 -親切 不必要な結果を避けるため。
find /var/log -type f -name "*.log"
find /var/www -type d -name "cache"
find /usr/bin -type l -name "python*"
-タイプf 標準ファイルを対象とします。 -タイプd フォルダーを対象とします。 -タイプl これはシンボリックリンクを対象としています。この小さなフィルターにより、結果に含まれる多くのノイズを回避できます。
木の奥深くまで進みたくない場合は、深さを制限することもできます。
find /var/www -maxdepth 2 -type d -name "cache"
これは、ウェブサイト、バックアップ、または多数のサブディレクトリを含むユーザーフォルダで非常に役立ちます。
何かを削除する前に、まず大きなファイルを探し出してください。
サーバーのディスク容量が不足してきたら、findコマンドを使って大きなファイルを探し出すことができます。まずは削除するのではなく、一覧表示から始めましょう。
find /var -type f -size +100M -print
find /home -type f -size +1G -print
サイズを読みやすい形式で表示するには、以下を実行します。 ls -lh それぞれの結果について:
find /var -type f -size +100M -exec ls -lh {} +
スペースを空けることが目的なら、すぐに rmまず、特に以下の点について、見つけたものを確認してください。 /var/lib、 /var/log またはアプリケーションフォルダ。データベースファイルやキャッシュには、特定の削除方法が必要になる場合があります。
このテーマについてより包括的なアプローチをとるには、以下のガイドを併用すると良いでしょう。 Linuxのディスク容量がいっぱいになったときに使用するコマンド。
変更日で検索
最近変更された内容を確認するには、日付オプションが非常に便利です。例えば、過去7日間に変更されたファイルなどです。
find /etc -type f -mtime -7
30日以上前に変更されたファイル:
find /var/log -type f -mtime +30
-mtime 数日で作業が完了します。より詳細な検索については、以下も参照してください。 -分数分で効果を発揮します。
find /tmp -type f -mmin -60
これは、設定変更後、アップデート後、またはファイルの場所を明確に示さずにファイルを生成したスクリプト実行後などに役立ちます。
権限を侵害することなく、権限に基づいてフィルタリングします。
Find は、権限に基づいて検索することもできます。たとえば、フォルダ内の実行可能スクリプトを検索するには、次のようにします。
find /usr/local/bin -type f -perm /111
アクセスが簡単すぎるファイルを特定するには、誰でも編集できるファイルを探します。
find /var/www -type f -perm -002 -exec ls -lh {};
結果リストを修正しないでください chmod 文脈を理解せずにグローバルに権限を設定すると、Linux のパーミッションがすぐにアプリケーションのクラッシュにつながる可能性があります。この点を確認する必要がある場合は、次の記事を参照してください。 Linuxにおける再帰的なchmod まさに、私たちが警戒を怠ってはならない理由を説明している。
-exec を使用しても重大な問題を引き起こさない
-実行 この機能を使うと、見つかったファイルに対してコマンドを実行できます。強力な機能なので、最も大きなダメージを与えることも可能です。
必ず最初に結果を表示することから始めましょう。
find /tmp -type f -name "*.tmp" -print
リストが正しい場合にのみ、削除前に確認を求めることができます。
find /tmp -type f -name "*.tmp" -exec rm -i {} +
カップル {} 見つかったファイルを表します。 + findコマンドは、可能な場合は複数の検索結果を同じコマンドにまとめるように要求します。これにより、ファイルごとにプロセスを起動する必要がなくなります。
find /var/log -type f -name "*.log" -exec ls -lh {} +
私のアドバイスはシンプルです。リストを確認するまでは、何も自動的に削除しないでください。サーバー上では、バックアップから復元する手間を考えると、ほんの少しの時間を節約するためには、それだけの価値はありません。
本番環境への導入前に見つけるための簡単な方法
- 可能な限り最も正確なファイルから始める。
- 追加
-タイプf、-タイプdまたは-タイプlできるだけ早く; - 使用
-max Depth深すぎる検索を避けたい場合は、 - で結果を表示します
-印刷または-exec ls -lh行動を起こす前に。 - 破壊的なコマンドは最後に実行し、可能であれば確認を求めるようにしてください。
参考資料については、GNU Findutils のマニュアルを参照してください。 探す そしてページ 見つける(1) man7 から。ファイルを見つけた後にログを追跡する必要がある場合は、ガイドを参照してください。 Linux でのテール この方法はそれをうまく補完する。