首页 存档 技术 查看内容

Linux / Mac常用的命令行,如何玩转日志分析与数据批处理?

2018-3-30 13:00 |来自: 互联网 293 0

摘要: 主要介绍Linux 或者 Mac下常用的一些基本工具命令来帮助处理一些日常事务。 通过本文的介绍,读者应该对相关命令有一个初步的了解,知道比如用什么命令可以完成怎样的操作;至于具体的参数,不用去刻意地记,等到用 ...

主要介绍Linux 或者 Mac下常用的一些基本工具命令来帮助处理一些日常事务。

通过本文的介绍,读者应该对相关命令有一个初步的了解,知道比如用什么命令可以完成怎样的操作;至于具体的参数,不用去刻意地记,等到用到的时候,再去 cmd --help 或者 man cmd去看,用熟悉了,常用的自然也就记住了。

本文首先介绍了Linux/Mac下一些常用的命令行工具,然后介绍了一些常用的命令,最后通过一两个案例来说明这些工具的强大之处:

  • 比如给定一个Nginx日志文件,能够找出HTTP 404 请求最多的top 10 是什么?

  • 比如能找到请求耗时最多的top 10是什么?

  • 再比如能够简单的得到每小时的“PV”是多少?

  • 再比如拿到一篇文章, 能否简单统计一下这篇文章单次词频最高的10个词语是什么?

Mac 环境
  • zsh

  • on-my-zsh

  • plugin

    • git

    • autojump

    • osx(man-preview/quick-look/pfd(print Finder director)/cdf(cd Finder))

  • 常用快捷键(bindkey)

  • 演示:高亮/git/智能补全/跳转(j,d)…

关于Mac相关的技巧,更多的可以参考以下三篇文章: Mac 软件推荐(序), Mac 软件推荐续(!程序猿篇)和 Mac 软件推荐(续)之程序猿篇

Shell 基础命令
  • which/whereis,常用 whatis, man, --help

  • 基本文件目录操作

rm, mkdir, mv, cp, cd, ls, ln, file, stat, wc(-l/w/c), head, more, tail, cat...

  • 利器 管道: |

Shell 文本处理

这里就是通过案例讲了一下12个命令的大致用法和参数,可以通过点击右边的目录直达你想要了解的命令。

find, grep, xargs, cut, paste, commjoin, sort, uniq, tr, sed, awk

find

  • 常用参数

    • 文件名 -name, 文件类型-type, 查找最大深度-maxdepth

    • 时间过滤(create/access/modify) -[cam]time

    • 执行动作 -exec

  • 示例


grep

  • 常用参数

    • -v(invert-match)

    • -c(count)

    • -n(line-number)

    • -i(ignore-case)

    • -l, -L, -R(-r, recursive), -e

  • 示例

    xargs

    • 常用参数

      • -n(每行列数)

      • -I(变量替换)

      • -d(分隔符), Mac 不支持, 注意与GNU版本的区别

    • 示例

    cut

    • 常用参数

      • -b(字节)

      • -c(字符)

      • -f(第几列), -d(分隔符), f范围: n, n-, -m, n-m示例

    paste

    • 常用参数

      • -d 分隔符

      • -s 列转行

    • 示例

    join

    类似SQL中的 ...inner join ...on ..., -t 分隔符, 默认为空格或tab

    comm

    • 常用参数

      • 用法 comm [-123i] file1 file2

      • 字典序列, 3列: 只在file1/file2/both

      • - 去掉某列, i 忽略大小写

    • 示例

    sort

    • 常用参数

      • -d, dictionary-order

      • -n, numeric-sort

      • -r, reverse

      • -b, ignore-leading-blanks

      • -k, key

    • 示例

    uniq

    • 常用参数

      • -c 重复次数

      • -d 重复的

      • -u 没重复的

      • -f 忽略前几列

    • 示例


    tr

    • 常用参数

      • -c 补集

      • -d 删除

      • -s 压缩相邻重复的

    • 示例

    sed

    • 常用参数

      • -d 删除

      • -s 替换, g 全局

      • -e 多个命令叠加

      • -i 修改原文件(Mac下加参数 “”, 备份)

    • 示例

    awk

    • 基本参数和语法

      • 执行begin

      • 对输入每一行执行 pattern{ commands }, pattern 可以是 正则/reg exp/, 关系运算等

      • 处理完毕, 执行 end

      • NR 行号, NF 列数量

      • $1 第1列, $2, $3…

      • -F fs fs分隔符,字符串或正则

      • 语法: awk 'BEGIN{ commands } pattern{ commands } END{ commands }', 流程如下:

    • 示例

    实际应用
    案例一:日志统计分析

    例如拿到一个Nginx日志文件,可以做很多事情, 比如看哪些请求是耗时最久的进而进行优化,比如看每小时的”PV”数 等等。

    上面是Nginx的一个案例,例如希望找到top 10 请求的path:

    当然,你可能一次不会直接处理成功,一般会先少拿一部分数据进行处理看逻辑是否正常,或者你可以缓存一些中间结果。

    再比如每小时请求数量,请求耗时等等。

    其他实际案例 IP block

    案例二:db数据批处理
    背景:

    因为某服务bug, 导致插入到db的图片路径不对, 需要将形如(安全需要已经将敏感数据替换)https://www.tanglei.name/upload/photos/129630//internal-public/shangtongdai/2017-02-19-abcdefg-eb85-4c24-883e-hijklmn.jpg

    替换成http://www.tanglei.me/internal-public/shangtongdai/2017-02-19-abcdefg-eb85-4c24-883e-hijklmn.jpg, 因为MySQL等db貌似不支持直接正则的替换, 所以不能够很方便的进行写SQL进行替换.当然将数据导出, 然后写python等脚本处理也是一种解决方案, 但如果用上面的命令行处理, 只需要几十秒即可完成.

    步骤:

    1、 准备数据

    2、替换原文件

    一般在用sed替换的时候, 先测试一下是否正常替换.

    3、拼接SQL,然后执行

    其他
    • play framework session

      • 老方式: 需要启play环境, 慢


      • 新方式:


    • 统计文章单词频率: 下面案例统计了川普就职演讲原文中词频最高的10个词。


    • 随机数

    • 图片处理压缩, 可批量改图片大小等等 sips

    Reference
    • Linux工具快速教程

    • Linux命令大全

    • Advanced Bash-Scripting Guide

    • UNIX环境高级编程

    作者介绍

    唐磊,目前是一名后台开发工程师 @宜信大数据创新中心,毕业于中南大学和清华大学,曾工作于腾讯和友盟。

    声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

    路过

    雷人

    握手

    鲜花

    鸡蛋

    相关分类

    返回顶部