wb.ouyang

毕竟几人真得鹿,不知终日梦为鱼

导航

Linux每周几个命令--日志查看篇

本本摘自:https://www.jianshu.com/p/1a3f51202518

  作为后端开发人员,经常需要和日志打交道,查看日志也就成了一个技术活,该篇总结常用查看日志命令。

1、tail

  这个命令对于大文件处理都是很好的,因为并不是处理全部内容,所以速度会很快,尤其是tail -f 这个指令,实时查看日志时很实用。

  1.1、命令格式:tail [参数] 文件名

  1.2、命令作用:查看文件末尾内容,实时刷新日志,从第n行输出日志。

  1.3、命令参数:

-f 当文件增长时,输出后续添加的数据,也就是实现实时刷新日志
-n 输出最后的n行,默认是10行
--pid 与-f配合,表示在进程ID,PID死掉之后结束

  1.4、使用示例:

  查看日志最后20行内容

[root@VM_105_120_centos logs]# tail -n 20 catalina.out

  实时刷新日志

[root@VM_105_120_centos logs]# tail -f catalina.out

  从第100行显示日志,对于大文件很不实用

[root@VM_105_120_centos logs]# tail -n +100 catalina.out

 

2、head

  这个命令对于大文件处理都是很好的,因为并不是处理全部内容,所以速度会很快。

  2.1、命令格式:head [参数] 文件名

  2.2、命令作用:查看文件开头n行

  2.3、命令参数:

-n 显示的行数

  2.4、使用示例:

  查看文件开头前10行

[root@VM_105_120_centos logs]# head -n 10 catalina.out

 

3、more

  分页显示,而且还有类似vim的操作方式,对于大文件日志很有用处。

  3.1、命令格式:more [-dlfpcsu] [-num] [+/pattern] [+linenum] [fileNames..]
  3.2、命令参数:

-num 一次显示的行数
-d 提示使用者,在画面下方显示 [Press space to continue, 'q' to quit.] ,如果使用者按错键,则会显示 [Press 'h' for instructions.] 而不是 ''-l 取消遇见特殊字元 ^L(送纸字元)时会暂停的功能
-f 计算行数时,以实际上的行数,而非自动换行过后的行数(有些单行字数太长的会被扩展为两行或两行以上)
-p 不以卷动的方式显示每一页,而是先清除萤幕后再显示内容
-c 跟 -p 相似,不同的是先显示内容再清除其他旧资料
-s 当遇到有连续两行以上的空白行,就代换为一行的空白行
-u 不显示下引号 (根据环境变数 TERM 指定的 terminal 而有所不同)
+/pattern 在每个文档显示前搜寻该字串(pattern),然后从该字串之后开始显示
+num 从第 num 行开始显示
fileNames 欲显示内容的文档,可为复数个数

  3.3、配合指令:

Enter 向下n行,需要定义。默认为1行
空格键 向下滚动一屏
Ctrl+B 返回上一屏
= 输出当前行的行号
:f 输出文件名和当前行的行号
!命令 调用Shell,并执行命令
q 退出more
more, less 都具备查找功能,按/ 然后输入要找的字串,再按 Enter 即可,按 n(next) 会继续找,大写的 N 则是往回(上)找

  3.4、使用示例:

  从第20w行分页显示日志

[root@VM_105_120_centos logs]# more +200000 catalina.out

 

4、less

  4.1、命令格式:less [参数] 文件

  4.2、命令作用:less命令可以随意移动查看文件,并且不会加载整个文件,所以更常用。

  4.3、命令参数:

-b <缓冲区大小> 设置缓冲区的大小
-e 当文件显示结束后,自动离开
-f 强迫打开特殊文件,例如外围设备代号、目录和二进制文件
-g 只标志最后搜索的关键词
-i 忽略搜索时的大小写
-m 显示类似more命令的百分比
-N 显示每行的行号
-o <文件名> 将less 输出的内容在指定文件中保存起来
-Q 不使用警告音
-s 显示连续空行为一行
-S 行过长时间将超出部分舍弃
-x <数字> 将"tab"键显示为规定的数字空格
/字符串:向下搜索"字符串"的功能
?字符串:向上搜索"字符串"的功能
n:重复前一个搜索(与 / 或 ? 有关)
N:反向重复前一个搜索(与 / 或 ? 有关)
b 向后翻一页
d 向后翻半页
h 显示帮助界面
Q 退出less 命令
u 向前滚动半页
y 向前滚动一行
空格键 滚动一行
回车键 滚动一页
[pagedown]: 向下翻动一页
[pageup]: 向上翻动一页

  4.4、使用示例:同more

 

5、sed

  sed命令很强大,这里对于日志来说最有用的是查看指定时间段的日志。

  查看在这两个时间段的日志

sed -n ‘/2010-11-17 09:25:55/,/2010-11-17 09:25:55/p’  logfile

  并且可以使用正则表达式

sed -n ‘/2010-11-17 09:[0-9][0-9]:[0-9][0-9]/,/2010-11-17 16:[0-9][0-9]:[0-9][0-9]/p’  logfile

  如果量还是很多的话,就配合less指令,简直完美

sed -n '/08:00:00/,/10:00:00/p' catalina.out | less

  再者sed可以批量替换文本内容,这个还是很常用的功能。比如下面命令替换niudear为hero

ps -ef | sed 's/niudear/hero/g'

 

6、awk

  awk命令多用于复杂情况的筛选信息,其是每读入一行就处理,下面举几个例子。

  6.1、打印指定行号内容,列号内容

  在awk中行号使用变量NR处理,并且前面可以是逻辑表达式。
  NR==3||NR==4 指第三行或者第四行,另外还内置的列变量NF
  $0 是指当前行全部内容,$1对应第一行,依次类推$2为第二行
  该指令为打印第三行和第四行的内容。

sudo netstat -punt | awk 'NR==3||NR==4 {print NR, $0}' 

  6.2、指定分隔符

  -F参数可以指定分隔符对行元素进行切割
  下面使用/对pwd后的输出进行切割

pwd | awk -F/ '{print $1,$2,$3}'

  6.3、正则

#匹配第一列以r开头的内容
ps aux | awk '$1 ~/^r/ {printf $0"\n"}'
#忽略大小写的
awk 'BEGIN{IGNORECASE=1} /this/' log.txt
#取反匹配
awk '$2 !~ /th/ {print $2,$4}' log.txt

 

  另外可以结合sort和uniq使用。更多内容可以参考菜鸟教程上面的

  目前本人常用的就这些,对于cat指令,因为日志文件巨大,所以cat这种一下子读完的就不太适合了,查看配置文件利用cat还是很不错的。

 

其他资料:

  (1)Linux中more和less命令用法

 

 

posted on 2019-04-06 16:22  wenbin_ouyang  阅读(494)  评论(0)    收藏  举报