作为一名测试工程师,测试任务中和Linux打交道的地方有很多,比如查看日志、定位bug、修改文件、部署环境等。产品部署在Linux上,如果某个功能发生错误,就需要我们去排查出错的原因,所以熟练的掌握查看log的方法显得尤为重要。
谈到查看log的方法,最常使用的命令可以说是cat与more及less了,但是如果查看一个很大的文件,并且只想看到该文件最后几行的结果输出时,你还记得用什么吗?对了,就是tail,此外tac也可以达到这个目的。接下来文章将通过实例来讲解各个查看日志的命令。
cat:由第一行开始显示文件内容
tac:从最后一行开始显示,不知道你是否观察出来,tac是cat倒着写的,所以功能上两个是相反的
nl :显示的时候,同时输出行号
more:一页一页地显示文件内容
less :与more类似,相比于more,可以往前翻页
head:只看前面几行
tail:只看后面几行
想要直接查看一个文件的内容,可以使用cat/tac/nl命令行。
1. cat(concatenate,串联)
cat [-AbEnTv] 文件
选项与参数:
-A : 相当于-vET的整合,可列出一些特殊字符而不是空白而已;
-b : 列出行号,仅针对非空白行做出行号显示,空白行不标行号;
-E : 将结尾的换行符$显示出来;
-n : 打印出行号,连同空白行也会有行号,与-b的选项不同;
-T : 将[tab]按键以^I显示出来 ;
-v : 列出一些看不出来的特殊字符;
实例1:查看/etc/spring.log的文件内容。
cat /etc/spring.log
\a
\ab
\abc
实例2:查看/etc/spring.log的文件内容并打印行号。
cat -n /etc/spring.log
1 \a
2 \ab
3 \abc
#如果对于大文件,cat -n 可以解决找特定行的需求。
实例3:将/etc/spring.log的内容完整的显示出来(包含特殊字符)。
cat -A /etc/spring.log
\a$
\ab$
\abc$
在一般情况下,使用[tab]与空格键的效果差不多,都是一堆空白,无法区分出两者,但是如果使用cat -A 就能够发现空白的地方到底是什么,其中[tab]是以^I表示,换行符则是以$表示。当文件内容的行数超过40行以上时,根本来不及在屏幕上看到结果。所以cat配合less或者more是不错的选择。
2. tac(反向列示)
实例1:反向输出/etc/spring.log的文件内容。
cat /etc/spring.log
\abc
\ab
\a
3. nl(添加行号打印)
nl [-bnw] 文件
选项与参数:
-b : 指定行号指定的方式:主要2种:
-b a :表示不论是否为空行,也同样列出行号(类似cat -n);
-b t :如果有空行,空的那一行不要列出行号(默认值);
-n : 列出行号表示的方法,主要3种:
-n ln :行号在屏幕的最左方表示;
-n rn :行号在自己栏位的最右方显示,且不加0;
-n rz :行号在自己栏位的最右方显示,且加0;
-w : 行号栏位的占用的字符数。
实例1:用nl列出/etc/spring.log的内容。
nl /etc/spring.log
1 \a
2 \ab
#其实文件有三行,第三行为空白(没有任何字符),因为是空白行,所以nl不会加上行号。
#如果想加上行号,使用nl -b a /etc/spring.log
实例2:
nl -b a /etc/spring.log
1 \a
2 \ab
3
#如果想在行号前面自动补上0,使用nl -b a -n rz /etc/spring.log
实例3:
nl -b a -n rz /etc/spring.log
000001 \a
000002 \ab
000003
# 默认6位数,想改为3位数可以使用nl -b a -n rz -w -3 /etc/spring.log
实例4:
nl -b a -n rz -w -3 /etc/spring.log
001 \a
002 \ab
003
nl可以将输出的文件内容自动地加上行号,其默认的结果与cat -n不太一样,nl可以将行号做比较多的显示设计,包括位数与是否自动补齐0等的功能。
想要一页一页的查看文件的内容,可以使用more和less命令。
1. more(一页一页翻动)
more 文件
实例1:
more /etc/spring.log
OpenJDK 64-Bit Server VM (25.171-b10) for linux-amd64 JRE (1.8.0_171-b10), built on May 9 2018 13:15:45 by "mockbuild" with gcc 4.8.5 201
50623 (Red Hat 4.8.5-28)
Memory: 4k page, physical 3881804k(1452992k free), swap 0k(0k free)
....省略....
--More--(75%) #这一行为重点,如果文件内容行数大于屏幕输出的行数时,就会展示出目前文件展示的百分比,此时光标也会停留在这里等待你输入信息,在more展示文件时,有几个功能按键可供使用:
1. 空格键(space): 代表向下翻一页
2. Enter : 代表向下翻一行
3. /字符串 : 代表在这个显示的内容中,向下查找字符串这个关键词
4. :f :立刻显示出文件名以及当前显示的行数
5. q : 代表立刻离开more,不再显示该文件内容
6. b或[ctrl]-b :代表往回翻页
2. less(一页一页翻动)
less 文件
实例1:
less /etc/spring.log
OpenJDK 64-Bit Server VM (25.171-b10) for linux-amd64 JRE (1.8.0_171-b10), built on May 9 2018 13:15:45 by "mockbuild" with gcc 4.8.5 201
50623 (Red Hat 4.8.5-28)
Memory: 4k page, physical 3881804k(1452992k free), swap 0k(0k free)
....省略....
: #这一行等待你输入信息,展示文件时,有几个功能按键可供使用:
1. 空格键(space): 代表往下翻动一页
2. [pagedown] : 代表向下翻动一页
3. [pageup] :代表向上翻动一页
4. /字符串 : 向下查找字符串这个关键词
5. ?字符串 : 向上查找字符串这个关键词
6. n : 重复前一个查找(与/或?有关)
7. N:反向的重复前一个查找(与/或?有关)
8. g:前进到这个数据的第一行
9. G:前进到这个数据的最后一行
10. q : 退出
对比less和more,less的用法更加的灵活,more的缺点是没有办法向前翻页,只能往后翻,但是less既能往后翻也能往前翻页。
如果只想关注日志内容的前一段或者最后一段的内容,使用head/tail。
1. head(取出前面几行)
head [-n number] 文件
选项与参数:
-n : 后面接数字,代表显示几行的意思。
# 默认情况下是显示前10行,如果想要显示前20行,使用head -n 20 文件
实例1:
head -n 20 /etc/spring.log
# 行数可以为正数,也可以为负数,为负数的时候,这样理解,比如一个文件有131行,我不想看最后的100行,也就是说想看前31行,其实有2种命令方式:
1. head -n 31 /etc/spring.log
2. head -n -100 /etc/spring.log
2. tail(取出后面几行)
tail [-n number] 文件
选项与参数:
-n : 后面接数字,代表显示几行的意思。
-f : 表示持续刷新显示后面所接文件中的内容,按下ctrl -c 才会结束
# 默认情况下是显示最后10行,如果想要显示最后20行,使用tail -n 20 文件
实例1:如果不知道文件有多少行,但是想要列出100行以后的数据?
tail -n +100 /etc/spring.log
实例2:持续检测/etc/spring.log的内容。
tail -f /etc/spring.log
几种查看log的方式总结的也差不多了,想要熟练的使用还需要多练。