美文网首页
Linux常用命令

Linux常用命令

作者: 南岩飞雪 | 来源:发表于2018-10-24 23:22 被阅读37次

    awk 文本分析

    举个例子

    • 按corpid统计访问pv:
      cat access.log | awk -F ',' '{a[$3]++}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=ding1dc192aa49fc9a9035c2f4657eb6378f,uri=/rest/api/v1/salaryGroup/index,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/salaryGroup/index

    awk命令拆分

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

    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/salary.log | grep "end to get hrm, fail" | awk -F ' - ' '{print $2}' | awk -F ',' '{print $1}'
    • 不合法的access_token
      cat logs/salary.log | grep "errorMsg = 不合法的access_token" | awk -F 'corpId = ' '{print $2}' | awk -F ',' '{print $1}' | uniq
    • 请求总次数超过了 1000 次
      cat logs/salary.log | grep "请求总次数超过了 1000 次" | grep "corpId(" | awk -F 'corpId' '{print$2}' | awk -F 'uri' '{print substr($1,2,length($1)-4)}' | uniq
    • 请求总次数超过了 300 次
      cat logs/salary.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.salary.client.isv.OrgUserClient - getUserList. 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 = ding39c2ca457fc3312035c2f4657eb6378f, deptId = 63590251.

    man

    cd ls df du

    查看目录
    cd
    ls -lh

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

    查看文件夹大小
    du -sh
    du -sh /home/admin/salary/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 salary.log | tee 111.log

    grep

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

    tailf salary.log | grep INFO 
    cat salary.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 "dingeec768eb823a00b035c2f4657eb6378f,\ndingcb9725d912f298d735c2f4657eb6378f,\ndinga95f2c475cc489f935c2f4657eb6378f," > 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 salary.log  > sq.log &
    ps -ef | grep "tailf salary.log" | grep -v "grep" | awk -F" " '{print $2}'  | xargs kill -9
    
    ls ./ | grep salary | xargs grep "ERROR"   
    效果等同于 grep "ERROR" ./salary*
    

    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 
    

    相关文章

      网友评论

          本文标题:Linux常用命令

          本文链接:https://www.haomeiwen.com/subject/vaywaftx.html