如何從伺服器中尋找某個特定時間的特定日誌以及僅該時間的 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 中。詳情請參閱「男人約會」。順便說一句,這不是儲存日期/時間的最佳方式。出於快速參考/排序的原因,更傾向於使用 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 '{印 $9}'

從剩餘的行中,它提取第 9 個元素(檔案名稱):

fontconfig.log

zip 日誌hostname_ _${DATE}.zip $i

使用上述命令的「for」循環,然後將每個檔案新增到一個 zip 檔案中,該檔案的名稱為:

logs_`hostname`_${DATE}.zip

其中hostname是您的主機名,「${DATE}」是先前儲存的日期。因此,如果您的主機名稱是 BLUERAY 並使用上面的日期,您將獲得一個名為:

logs_BLUERAY_10192016-171249.zip

再說一次,這個腳本寫得非常糟糕,你當然不應該使用它(或同一作者編寫的任何其他腳本)來學習如何編寫腳本...

相關內容