使用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