tail命令及多次grep过滤存在的问题

使用tail命令查看日志,搜集整理了一些常用的命令

1. tail命令格式

tail  [ 参数 ]  [ 选择添加的参数 ] ... [ 文件 ]

常用参数:

    -f 循环读取
    -q 不显示处理信息
    -v 显示详细的处理信息
    -c<数目> 显示的字节数
    -n<行数> 显示行数
    --pid=PID 与-f合用,表示在进程ID,PID死掉之后结束. 
    -q, --quiet, --silent 从不输出给出文件名的首部 
    -s, --sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒 

示例:

1. 查看日志文件最后200行

tail -200 日志文件(打印出日志文件的最后200条信息)

tail -f -n 200 日志文件  (实时打印最新的日志信息)

tail -200 n 日志文件(实时打印最新的日志信息)

tail -n +200 日志文件(从第200 行开始显示日志信息)

 

2. 查看日志文件的前200行

head -n 200 日志文件

 

3. 查看日志文件的中间指定行

cat 日志文件 |  head -n 200 | tail -n + 101

 

4. grep过滤文件内容并打印

grep 443文件 (查看文件中中含有8080字段的行)

grep -n 443文件(确定8080字段在文件中的行数)

grep -n -i "nginx" 文件 (确定ggpush在文件中的行数并且忽略大小写)

grep 'mapper' *.cnf (匹配当前目录下所有后缀为cnf文件含有过滤字段的内容)

 

5. 过滤掉指定的日志信息

grep -v '关键字'

 

6. 查看日志文件中带有指定关键词的日志信息

tail -f  文件名 | grep 关键字 | grep 关键字

 

7. tail -f 多次grep过滤输出可能会出现的问题

对日志记录做多次grep过滤输出,格式如下:
tail -f log | grep xxx | grep yyy
发现grep失效,无法做正确输出。google研究了一下,原因如下:
管道 | 是全缓冲的,一般来说buffer_size为4096,有些是8192。不管具体值多少,只有buffer_size满了,才会看到输出。
在操作里  >>file 这个操作也是全缓冲的。调整如下
tail -f log | grep --line-buffer xxx | grep --line-buffer yyy
结果输出正常。
grep当带上了 --line-buffer 的时候,每输出一行,就刷新一次。
在unix里,块设备和普通文件,以及管道都是全缓冲的。

对日志分析告警和实时监控可以考虑如下形式:

tail -f $LOGF | while read var
do
case "$var" in
...
...
esac
done

部分内容转载自:

https://blog.csdn.net/yaomingyang/article/details/76596111

http://www.quwenqing.com/read-134.html

 

 

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值