日志处理--高效Linux命令整理
序
在學習使用python處理日志開始階段,對我阻力最大的莫過于對linux的不熟悉了,有種寸步難行的感覺。
在之后亂學一通之后,發現有點對我頗有益處:
大概整理下之前常用的命令:
一、find命令
1、查找當前目錄下非空且滿足命名要求的文件
find ./ ! -empty -name "*20160228*"(注意空格)
2、在一堆文件中查詢關鍵字所在的行
find ./-name "*20160228*" | xargs cat | grep "189"也可以直接使用
cat "*20160228*" | grep "189"cat一堆文件首先會把一堆文件合并為一個大文件。
3、查找并復制
find ./ -name "*201504101446*" | xargs -i cp {} ./yourDir4、查找并刪除
$find ./ -name "*201502*.log" -exec rm {} \;【注】exec與xargs差異
在使用find命令的-exec選項處理匹配到的文件時, find命令將所有匹配到的文件一起傳遞給exec執行。 但有些系統對能夠傳遞給exec的命令長度有限制,這樣在find命令運行幾分鐘之后,就會出現 溢出錯誤。 錯誤信息通常是“參數列太長”或“參數列溢出”。 5、查詢當前目錄下每個文件的行數 find . -type f | xargs wc -l僅獲取當個文件行數
cat tcpSocketSer.py | wc -l僅獲取所有文件的總行數
find . -type f -exec wc -l {} \; | awk '{sum+=$1}END{print sum}'二、awk命令
6、將某一列的值累加
cat flowgw_billing.log.201512 | awk '{sum +=$5} END {print sum}'7、更改文件列順序
cat daily_partner_bill.log.20150806 | awk '{print $4"\t"$1"\t"$2"\t"$3}' > test2;mv test2 daily_partner_bill.log.20150806比較笨拙的做法,暫時想不到其他的了。
8、指定列條件并累加
cat 201507.log | awk '$2=="hengDa" {sum +=$4} END {print sum}'指定條件分開累計
cat 201511.log | awk '$3=="selectName" {a[$2]+=$5;} END {for(i in a) print i,a[i]}'9、分運營商初步統計
cat 201511??.log | \ awk '$3=="selectName" {a[$2]+=$5;} END {for(i in a) print i,a[i]}' | \ awk --re-interval '{if($1 ~/(133|153|180|181|189|177)[0-9]{8}/) print "CTCC",$1,$2;\ else if($1 ~/(134|135|136|137|138|139|150|151|152|158|159|182|183|184|157|187|188|147|178)[0-9]{8}/) print "CMCC",$1,$2;\ else if($1 ~/(130|131|132|155|156|145|176|185|186|175)[0-9]{8}/) print "CUCC",$1,$2;\ else print "None",$1,$2}END{}'三、壓縮文件
10、不解壓查詢壓縮文件列表
gzip -dc fff.tar.gz | tar tvf -如果壓縮文件內帶有文件夾則不行
11、不解壓查看文件內容
zcat fff.tar.gz | cut -f 2-12輸入內容會附帶文件屬性信息,可以用cut -f 按字段截取部分想要的
12、查詢已打包文件內容
zcat *201504_30*.log | grep --binary-files=text 15360436158 | cut -f 2-11若需要匹配文件復雜,可以使用find命令銜接
find . -type f -name "201504_30" | xargs zcat {} \; | grep --binary-files=text "15360436158"13、將當前文件夾所有壓縮文件解壓,并刪除原文件
for tar in *.tar.gz; do tar xvf $tar; done find ./ -name "*.gz" | xargs rm -rf四、排序去重
由于uniq只是針對相鄰行去重,所以通常和sort配合使用。
sort參數簡要說明
-n 按數值 -k 2 按第二列 -r 反序 -t: 以冒號分隔uniq參數簡要說明
-i 忽略大小寫字符的不同 -c 進行計數 -u 只顯示唯一的行 -d 僅顯示存在重復的行14、查詢累計用戶數(每條記錄包含一個電話號碼)
cat 201?????.log | cut -f 1 | sort | uniq | wc -l15、查詢非電信累計用戶數(添加正則匹配條件)
cat 201?????.log | cut -f 1 | sort | uniq | egrep -v '^1(33|53|77|8[019]|700).{7,8}$' | wc -l五、文件合并
- 行合并
- cat file1 file2
- 列合并
- paste file1 file2
- 取文件交集
- cat file1 file2 | sort | uniq -d
- 取文件并集
- cat file1 file2 | sort | uniq
六、其他
16、查詢進程是否存在
ps -ef | grep test.py | grep -v grepgrep本身存在一進程,容易誤導
查詢并殺死進程
ps -ef | grep test.py| grep -v grep | awk '{print $2}' | xargs kill -917、查詢端口占用情況
lsof -i:6543218、查找文件并打包,以當前時間命名
find ./ -name "*log"| xargs tar -zvcf logs.`date +%Y-%m-%d`其中,`date +%Y-%m-%d-%H%M%S`為可嵌入命令時間格式
19、在后臺運行程序
nohup python test.py &這種方式運行不穩定,可以使用Linux下的腳本管理工具supervior來統一管理。
20、標準輸出和標準錯誤輸出
find ./ -name *.log >& all_result21、啟動簡易http服務器,實現簡單的文件訪問
$ python -m SimpleHTTPServer 8080在你想要啟用訪問的目錄下執行
22、格式化json
我們經常需要用curl訪問一個已存在的接口,但是返回結果不易查看,可以簡單格式化
cat jsonString | python -mjson.tool?
?
LINUX學習參考:
?http://linuxtools-rst.readthedocs.org/zh_CN/latest/base/index.html
?
?
轉載于:https://www.cnblogs.com/Hughzm/p/5234749.html
總結
以上是生活随笔為你收集整理的日志处理--高效Linux命令整理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android中使用jni对字符串加解密
- 下一篇: 【Linux开发】linux设备驱动归纳