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