Linux日誌檔案內容過濾和日誌檔案排序

2021-06-18 22:26:54 字數 1818 閱讀 9073

鏡頭拉回今天,今天下午值班的工作是日誌分析,以前基本沒做過類似的工作,所謂分析,無外乎從中提取點有用的東西出來。前天發現伺服器上某**被黑,**檔案被篡改,經查,ftp帳號被黑客破解。處理工作很簡單,修改ftp密碼,恢復**備份即可。但是老師要我們查查ftp的日誌檔案,想知道還有沒有別的帳號被破解,於是,真正的工作開始了……

伺服器是linux系統,日誌檔案在/var/log目錄下,vsftpd.log,乙個300多m的文字檔案。因為**是最近剛被黑的,看來ftp被破解沒多久,於是把目光放到日誌檔案的最後面,那麼,怎麼檢視日誌檔案呢,乙個cat命令出去,得到的只有無盡的刷屏~要知道有700w行記錄啊!還好linux有 tail 命令和 head 命令,顧名思義,自然是只檢視檔案最後面和最前面的記錄,執行:

tail vsftp.log

預設顯示最後10條記錄,head命令同樣,但是可以通過引數 -n 指定顯示後/前多少行,於是修改命令,執行:

tail -n100 file

開始發現同乙個外網ip多次出現,再多來點資料,但是上百條以上的資料在控制台下不好看,這時就要用到管道和 tee 命令了,這個命令可以幫助把資料追加到檔案中,執行:

tail -n1000 file | tee res.txt

有人會說直接重定向到檔案中就行,幹嘛還要 tee 命令多此一舉呢?請注意,重定向後控制台就沒有輸出了哦~ tee 命令的好處就在這裡!本地分析res.txt檔案,這時發現日誌裡有同乙個ip的大量登入記錄。其中被破解的帳號也只嘗試了區區三百多次就爆出來了,看來弱口令真害死人啊!

為了檢查是否還有別的帳號被破解,只需要提取登入成功的日誌記錄即可,vsftp中記錄登入成功的資訊是「ok login」,再借助 grep 命令,可以達到要求:

cat file | grep "ok login" | tee res.txt

分析結果檔案,倒是發現不少記錄,不過還好基本都是可信任位址,看來只有那乙個帳號被破解了,暫時不用擔心~

關於grep,後面的表示式可以是乙個正規表示式,不過一般情況下都是簡單的字串,注意這個命令是可以組合的,例如我想查詢十月份登入成功的記錄,則執行:

cat file | grep "oct" | grep "ok login" | tee res.txt

有人可能已經看出來了,如果這個「oct」 和 「ok login」在檔案中是相鄰位置的話 自然可以放到一起,但是熟悉日誌檔案格式的朋友肯定也知道,這兩個關鍵字明顯不會連續,所以需要兩個grep組合查詢。

另外,如果不想把檢索結果輸出到控制台,可以直接執行:

grep "oct" file | grep "ok login" > res.txt

利用重定向輸出到檔案即可,注意兩個grep的匹配串一般沒有先後順序,當然如果如某個條件能快速縮小檔案範圍,建議放前面~

最後再說說日誌檔案排序,在apache的日誌目錄下有許多虛擬主機的日誌檔案,有大有小,如果我想看具體檔案大小,簡單的 ls 可是不行的,需要執行:

du -m *

即可看到每個檔案的大小,但有乙個問題,那就是這些日誌檔案是沒有排序的,如果想按照從小到大或者從大到小排序那該怎麼辦呢,利用管道和 sort 吧:

du -m * | sort

執行之後,有人可能會說,這還是沒排序的呀,如果你要這麼說,那便是你錯了!因為 sort 命令預設按照檔案第乙個域的ascii值排序,因為 du -m * 得到的結果是:檔案大小 檔名,注意這個」檔案大小「在文字檔案中可是字元型的,sort按照預設方式排序,當然比較ascii值了~所以,我們需要指定排序方式,引數 -n 即可達到要求,指定按照數值型別排序,然後引數 -r 表示從大到小,忽略則表示從小到大,好了,再執行:

du -m * | sort -r -n

再執行,是不是你要的結果呀~!

linux檔案查詢和內容過濾命令

grep fgrep和egrep命令 這組命令以指定模式搜尋檔案,並通知使用者在什麼檔案中搜尋到與指定的模式匹配的字串,並列印出所有包含該字串的文字行,在該文本行的最前面是該行所在的檔名。grep命令一次只能搜尋乙個指定的模式 egrep命令檢索擴充套件的正規表示式 包括表示式組和可選項 fgrep...

logging日誌過濾和日誌檔案自動擷取

1.日誌過濾 import logging class ignorefilter logging.filter def filter self,record return girl not in record.getmessage 如果girl不在record裡,則返回true 1.生成logger...

python過濾檔案內容 python過濾檔案內容

我是python新手,我正在嘗試完成以下任務,但是我的輸出與它應該是不一樣的。有誰能幫我解決問題嗎?感謝你的幫助!在 分配 在第三個程式中,我們將研究檔案內容的分類。在與源 相同的目錄中是乙個檔案 字串.txt,它在幾行中有隨機字串。這些線可以分為兩類 一類是只有字母 a z,a z 和數字 0 9...