日志處理--高效Linux命令整理


在學習使用python處理日志開始階段,對我阻力最大的莫過於對linux的不熟悉了,有種寸步難行的感覺。

在之后亂學一通之后,發現有點對我頗有益處:

  1. 學《鳥哥linux私房菜基礎學習篇》,內容不多,但是對linux文件系統和基本組成有個基本的認識很有必要;
  2. 熟悉使用vim。開始的時候每次都下載到windowns再編輯實在太傻 了~;
  3. 使用ls -l + 通配符查找文件,復雜的查找使用find;
  4. 按自己需要學習linux文本領域的三大利器:grep(查找)、sed(編輯)、awk(分析)

大概整理下之前常用的命令:

一、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 {}  ./yourDir

4、查找並刪除

$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 -l

15、查詢非電信累計用戶數(添加正則匹配條件)

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 grep

grep本身存在一進程,容易誤導

查詢並殺死進程

ps -ef | grep test.py| grep -v grep | awk '{print $2}' | xargs kill -9

17、查詢端口占用情況

lsof -i:65432

18、查找文件並打包,以當前時間命名

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_result

21、啟動簡易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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM