ここに初心者の質問があります。
複数の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