コマンドは異なるディレクトリにありますが、同様のファイル拡張子を持つファイルを検索します。

コマンドは異なるディレクトリにありますが、同様のファイル拡張子を持つファイルを検索します。

ここに初心者の質問があります。

複数のLinuxマシンを管理しようとしていますが、似ているように見えますが、とても違います。たとえば、あるサーバーのmysqlログファイルは/var/log/mysql/backups/thelogに保存され、別のサーバーのmysqlログファイルは/var/log/に保存できます。今、ますます多くのサーバーがあると想像してみてください。良いニュースは、99%のサーバーでログファイル拡張子が.logであるため、ログのみが保存されている場所を検索するのに時間がかかるたびに発生することです。 dmesgはこれらのすべてのサーバーで機能しないため、あまり役に立ちません。それで、私を助けて、どのようなコマンド/スクリプトを教えてもらえますか?たとえば、すべての.logファイルを検索し、役に立つ可能性のあるエントリをgrepするために使用できますか?よろしくお願いします!

答え1

のためgrep

  • -r各ディレクトリを表示するために使用されます。

    -R, -r, --recursive
    各ディレクトリのすべてのファイルを繰り返し読み込みます。これは -d recursive オプションと同じです。

  • オプションを使用した--includeファイルの制限

    --include=GLOB
    デフォルト名が GLOB と一致するファイルのみを検索します (--exclude で説明されているようにワイルドカード一致を使用)。

.logコンピュータのサブディレクトリにあるファイルから「テキスト」を検索するには、コマンド/varは次のようになります。

grep -r --include \*.log 'text' /var

SSHを介して各サーバーに接続してgrepコマンドを実行すると、次のようになります。

for server in $(cat servers.txt); do ssh "$server" "grep-command"> "output-$server"; done

引用文書ここ

答え2

find自分でできることはたくさんあります:

find . -name "*.log" -exec grep -l "pattern" {} +

現在のディレクトリ内または下にパターンを含むログファイルが表示されます。

答え3

ファイルを探して内容を把握する必要があります。

for f in $(find -name "*.log"); do grep -n "PATTERN" $f; done

関連情報