特定の時間のサーバーから特定のログを検索し、その時間のみのログを zip 圧縮する方法

特定の時間のサーバーから特定のログを検索し、その時間のみのログを zip 圧縮する方法

上記の質問に対するコマンドを入手しました。どなたか下記のコマンドを説明していただけますか?

DATE=`date +%m%d%Y-%H%M%S` ; for i in `ls -lt *.log* | grep "Oct 11" | grep -E '12:|13:|14:' | awk '{print $9}'`; do zip logs_`hostname`_${DATE}.zip $i; done

答え1

あなたが参照しているスクリプトは、まったく適切に記述されておらず、期待どおりに動作しない可能性があります。

これが何をしているかの内訳は次のとおりです。

日付=date +%m%d%Y-%H%M%S

現在の日付を「10192016-171249」のような形式で DATE に保存します。詳細については、「man date」を参照してください。ちなみに、これは日付/時刻を保存する最良の方法ではありません。日付部分には、クイック参照/並べ替えの理由から、YYYYMMDD 形式を使用することをお勧めします。

ls -lt *.log*

これにより、現在のディレクトリ内のパターン「*.log*」に一致するすべてのファイルのディレクトリ リストが取得されます。たとえば、次のようになります。

-rw-r--r-- 1 root root  174106 Sep 30 17:28 dpkg.log.1
-rw-r--r-- 1 root root    1642 Oct 11 12:28 fontconfig.log
-rw-r----- 1 root adm   272254 Oct 11 11:28 kern.log.4.gz
-rw-r----- 1 root adm   272254 Oct 11 17:14 kernXX.log.1.gz
-rw-r----- 1 root adm      414 Sep 29 18:09 user.log.4.gz
-rw-r--r-- 1 root root     209 Sep 26 14:18 chipsee_clone.log
-rw-r--r-- 1 root root    1333 Apr  9  2015 pm-powersave.log.1

grep "10月11日"

次に、「Oct 11」が存在する行のみを「抽出」します。次のようになります。

-rw-r--r-- 1 root root    1642 Oct 11 12:28 fontconfig.log
-rw-r----- 1 root adm   272254 Oct 11 11:28 kern.log.4.gz
-rw-r----- 1 root adm   272254 Oct 11 17:14 kernXX.log.1.gz

grep -E '12:|13:|14:

次に、「12:」または「13:」または「14」が存在するものだけを再度抽出します。(これも時間フィールドだけでなく、分と秒フィールドにも適用されるため、非常に不十分です)

-rw-r--r-- 1 root root    1642 Oct 11 12:28 fontconfig.log
-rw-r----- 1 root adm   272254 Oct 11 17:14 kernXX.log.1.gz

awk '{print $9}'

残りの行から、9 番目の要素 (ファイル名) を抽出します。

fontconfig.log

zip ログhostname_ _${DATE}.zip $i

上記のコマンドを「for」ループで囲むと、各ファイルは次のような名前の zip ファイルに追加されます。

logs_`hostname`_${DATE}.zip

ここでhostname、 はホスト名で、 "${DATE}" は以前に保存した日付です。したがって、ホスト名が BLUERAY で、上記の日付を使用すると、次の名前のファイルが作成されます。

logs_BLUERAY_10192016-171249.zip

繰り返しますが、このスクリプトは非常に下手に書かれているので、スクリプトの書き方を学ぶためにこのスクリプト (または同じ作者が書いた他のスクリプト) を使用するべきではありません...

関連情報