Linux常用命令

awk 文本分析

举个例子

  • 按corpid统计访问pv:
    cat access.log | awk -F ',' '{a[$3]++}END{for(i in a){print i,a[i] | "sort -k 2 -rn"}}'
    下面这种写法是我后面回看的时候觉得应该这么写,上面这种写法看着不对,但是执行结果一样🤦‍♂️🤦‍♂️
    cat access.log | awk -F ',' '{a[$3]++}END{for(i in a){print i,a[i] }}' | sort -k 2 -rn
    cat access.log | awk -F ',' '{a[$3]=a[$3]+1}END{for(i in a){print i,a[i] }}' | sort -k 2 -rn
  • 按url统计访问pv:
    cat access.log | awk -F ',' '{a[$4]++}END{for(i in a){print i,a[i] }}' | sort -k 2 -rn

熟悉日志格式

[2018-10-23 09:59:10] [traceid=232a43a484844e2b9561df41919c0fed,uid=042227242237740794,corpId=xxx,uri=/rest/api/v1/xxx/xxx,host=127.0.0.1,ref=,ua=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36] INFO ACCESS_LOGGER - request:/rest/api/v1/xxx/xxx

awk命令拆分

awk -F ',' '{a[$3]++}END{for(i in a){print i,a[i]}}' access.log | sort -k 2 -rn

cat access.log | awk -F ',' '{print $3}'
cat access.log | awk -F ',' '{a[$3]++}END{for(i in a){print i,a[i]}}'
cat access.log | awk -F ',' '{a[$3]++}END{for(i in a){print i,a[i]}}' | sort -k 2 -rn

| 管道符左边命令的输出就会作为管道符右边命令的输入
' ' 引用代码块
{} 命令代码块,包含一条或多条命令
; 多条命令使用分号分隔
END 结尾代码块,在对每一行进行处理之后再执行的代码块,主要是进行最终计算或输出结尾摘要信息
|| | 或

进阶

  • 按照corpid+userid统计
    cat access.log | awk -F ',' '{a[$3$2]++}END{for(i in a){print $3,$2,a[i] | "sort -k 3 -rn"}}'
  • 按照corpid+userid+uri统计

应用场景--统计出错的企业等

  • 请求的部门id不在授权范围内
    cat logs/xxx.log | grep "end to get hrm, fail" | awk -F ' - ' '{print $2}' | awk -F ',' '{print $1}'
  • 不合法的access_token
    cat logs/xxx.log | grep "errorMsg = 不合法的access_token" | awk -F 'corpId = ' '{print $2}' | awk -F ',' '{print $1}' | uniq
  • 请求总次数超过了 1000 次
    cat logs/xxx.log | grep "请求总次数超过了 1000 次" | grep "corpId(" | awk -F 'corpId' '{print$2}' | awk -F 'uri' '{print substr($1,2,length($1)-4)}' | uniq
  • 请求总次数超过了 300 次
    cat logs/xxx.log | grep "请求总次数超过了 300 次" | grep "corpId =" | awk -F 'corpId = | deptId = ' '{print $2}' | uniq
  • 进阶:请求总次数超过了 300 次,发生的时间和企业,时间按企业统计

[2018-10-24 10:02:13] [traceid=,uid=,corpid=,uri=] WARN c.d.xxx.xxx.xxx.xxx - xxx. errorCode = 90002, errorMsg = 您的服务器调用钉钉开放平台当前接口的所有请求都被暂时禁用了, apiPath(/user/list), 从 2018-10-24 10:02:13 到 2018-10-24 10:02:13 请求总次数超过了 300 次, 处罚将在 2018-10-24 10:02:14 结束., corpId = xxx, deptId = 63590251.

man

cd ls df du

查看目录
cd
ls -lh

查看目录挂载点
df -lh
df -lh /home/admin/xxx/logs

查看文件夹大小
du -sh
du -sh /home/admin/xxx/logs
du -sh *

sort

排序
du -s * | sort -rn
du -sh * | sort -rn

uniq

去重
cat access.log | awk -F ',' '{print $3}' | awk -F '=' '{print $2}' | sort | uniq

进阶
排序去重统计
cat access.log | awk -F ',' '{print $3}' | awk -F '=' '{print $2}' |sort | uniq -c | sort -rnk 1

tailf tee

tailf xxx.log | tee 111.log

grep

过滤
根据日志级别,企业id等条件过滤

tailf xxx.log | grep INFO 
cat xxx.log | grep INFO 
grep --color=auto 
grep "INFO" error*
grep -v
grep -ri
grep -E 'k1|k2'
egrep 'k1|k2'
grep -B 5 "ERROR"
grep -A 5 "ERROR"
grep -5 "ERROR"
grep -5 "ERROR" -n 显示行号
vi :行号跳转

sed

echo "aaa=111" > aaa.log
echo "bbb=222" >> aaa.log
sed -n '/aaa=/p'  aaa.log
sed -n "/aaa/ s/111/112/p" aaa.log
sed  -i "/aaa/ s/111/112/g" aaa.log

n命令-->匹配行的下一行
sed -i "/aaa/ {n;s/bbb/ccc/g;}" aaa.log

tr

echo -e "dingxxx,\ndingxxx,\ndingxxx," > corp.log

cat corp.log | tr -s ',\n' ","  
cat corp.log | tr -d '\n' | awk '{print substr($0,1,length($0)-1)}' | pbcopy

dos2unix

dos2unix filename

xargs

tailf xxx.log  > sq.log &
ps -ef | grep "tailf xxx.log" | grep -v "grep" | awk -F" " '{print $2}'  | xargs kill -9

ls ./ | grep xxx | xargs grep "ERROR"   
效果等同于 grep "ERROR" ./xxx*

vi使用技巧

vi ./


set hls
set nu / set nonu  
shift g / gg
n / shift n
ctrl f / ctrl b
echo "    <logger name="METHOD_LOGGER">
        <level value="warn"/>
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
    </logger>" > logback

s/warn/debug/g
1,$s/warn/debug/g 

命令行快捷键

Ctrl + a beginning-of-line
Ctrl + e end-of-line

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容