Linux每周几个命令(二)--日志查看篇
标签(空格分隔): linux
作为后端开发人员,经常需要和日志打交道,查看日志也就成了一个技术活,该篇总结常用查看日志命令.
1.tail和head
这两个命令对于大文件处理都是很好地,因为并不是处理全部内容,所以速度会很快,尤其是tail -f 这个指令,实时查看日志时很实用.
1.1 tail
1.命令格式
tail [参数] 文件名
2.命令作用
查看文件末尾内容,实时刷新日志,从第n行输出日志.
3.命令参数
-f 当文件增长时,输出后续添加的数据,也就是实现实时刷新日志
-n 输出最后的n行,默认是10行
--pid 与-f配合,表示在进程ID,PID死掉之后结束
4.使用示例
1.查看日志最后20行内容
[root@VM_105_120_centos logs]# tail -n 20 catalina.out
2.实时刷新日志
[root@VM_105_120_centos logs]# tail -f catalina.out
3.从第100行显示日志,对于大文件很不实用
[root@VM_105_120_centos logs]# tail -n +100 catalina.out
1.2 head
1.命令格式
head [参数] 文件名
2.命令作用
查看文件开头n行
3.命令参数
-n 显示的行数
4.使用示例
查看文件开头前10行
[root@VM_105_120_centos logs]# head -n 10 catalina.out
2.more和less
more和less是非常常用的两个命令,两者都可以分页显示,而且还有类似vim的操作方式,对于大文件日志很有用处.
2.1 more
1.命令格式
more [-dlfpcsu] [-num] [+/pattern] [+linenum] [fileNames..]
2.命令作用
Linux more 会以一页一页的形式显示,更方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按b键就会往回(back)一页显示,而且还有搜寻字串的功能(与 vi 相似)
3.命令参数
-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 欲显示内容的文档,可为复数个数
配合指令:
Enter 向下n行,需要定义。默认为1行
空格键 向下滚动一屏
Ctrl+B 返回上一屏
= 输出当前行的行号
:f 输出文件名和当前行的行号
!命令 调用Shell,并执行命令
q 退出more
more, less 都具备查找功能,按/ 然后输入要找的字串,再按 Enter 即可,按 n(next) 会继续找,大写的 N 则是往回(上)找
4.使用示例
从第20w行分页显示日志
[root@VM_105_120_centos logs]# more +200000 catalina.out
2.2 less
1.命令格式
less [参数] 文件
2.命令作用
less命令可以随意移动查看文件,并且不会加载整个文件,所以更常用.
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.使用示例
示例和more差不多,指令都类似vim
3.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'
4.awk
awk命令多用于复杂情况的筛选信息,其是每读入一行就处理,下面举几个例子.
4.1打印指定行号内容,列号内容
在awk中行号使用变量NR处理,并且前面可以是逻辑表达式.
NR==3||NR==4 指第三行或者第四行,另外还内置的列变量NF
$0 是指当前行全部内容,$1对应第一行,依次类推$2为第二行
该指令为打印第三行和第四行的内容.
sudo netstat -punt | awk 'NR==3||NR==4 {print NR, $0}'
4.2指定分隔符
-F参数可以指定分隔符对行元素进行切割
下面使用/
对pwd后的输出进行切割
pwd | awk -F/ '{print $1,$2,$3}'
4.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还是很不错的.
另外文章命令使用来源于互联网资料.