Linux查看文件和日志的常用命令

2021-02-26 15:43:11 浏览数 (1)

当项目部署和运行起来后,会产生很多的运行日志。日志的内容是程序里定义的重要输出信息,还有程序出错的报错信息。

查看日志文件大部分是去日志中获取一些数据,确认某些信息,还有定位问题时查看报错信息。查看文件是查看代码文件和配置文件,确认是否需要修改。

在服务器上查看文件,都没有图形界面(当然可以把日志导出到 windows 中查看,但不是很方便,而且比较大的文件一般软件打不开),所以需要熟悉 Linux 中常用的查看命令。

我先 vim date.sh 创建了一个 Shell 脚本 date.sh ,里面的代码如下,用于生成一个模拟的日志文件。

代码语言:javascript复制
#! /bin/bash
i=0
until [[ $day == "2019-12-31" ]]
do
        day=$(date -d "2019-01-01 $i days"  %Y-%m-%d)
        echo $day
        ((i  ))
done

执行命令将2019年的所有日期写到 date.log 文件中。

代码语言:javascript复制
sh date.sh > date.log

一、grep 命令

使用 grep 可以根据指定的内容在文件中匹配满足条件的行,匹配到的内容会高亮显示。

如找包含“10”的行,执行命令后会匹配到所有包含“10”的行(每个月10号的日期和所有10月的日期)。

代码语言:javascript复制
grep 10 date.log

可以加参数(使用--help查看详细参数)来辅助查询。

如使用 -n 显示行号。

代码语言:javascript复制
grep -n 10-01 date.log

可以多次使用 grep 命令,不断缩小匹配的数据范围,直到精准地找到某行日志。如要找国庆节所在的行并查看这是一年的第几天,但不知道日期的格式,先匹配10,匹配的数据有很多,再匹配10-01和加上-n参数,就可以完成了。

二、vi 和 vim 命令

vi 和 vim 都是 Linux 系统中的编辑器, vim 是从 vi 发展出来的,功能更丰富一些,最直观的区别是 vim 查看和编写代码时有颜色提示,方便编写程序。

一般不会使用 vi 和 vim 查看日志,因为日志是不需要编辑的。

使用 vi 和 vim 主要是查看配置文件和代码文件,查看时如果需要修改,立即就可以切换模式进行编辑,更方便。

代码语言:javascript复制
vim date.sh

三、cat 和 tac 命令

cat 命令会一次将整个文件的内容显示出来,tac(cat倒着写) 命令一样,cat 是从头往尾显示,tac 是从尾往头显示,显示顺序刚好相反。

代码语言:javascript复制
tac date.log

cat 命令适合查看内容比较少的文件(最好小于一个屏幕)。不适合使用来查看比较大的文件,那样需要滚动屏幕(大文件会滚动很久),而且也不方便查找想找的内容(配合其他参数使用另说)。

如果查看时想查看行号,可以加-n参数或-b参数,-n会计算空行的数量,-b不会计算空行的数量,更多参数信息使用--help查看。

代码语言:javascript复制
cat -b date.log

四、tail 和 head 命令

tail 命令是从尾部显示内容,head 命令是从头部显示内容。

代码语言:javascript复制
tail date.log
head date.log

tail 和 head 命令默认都是显示10行内容,可以使用-n参数指定显示的行数,-n还可以省略,直接在-(杠)后跟行数,如下面两个命令都是显示5行内容。

代码语言:javascript复制
tail -n 5 date.log
tail -5 date.log

还有一个经常使用的参数-f,表示循环读取。因为到服务器上查看日志时,不可能将项目停掉再查看日志。项目运行着就会继续往日志文件中写内容,调试时也需要查看实时的日志信息,使用-f可以循环读取实时的日志内容。-f参数会占用一个终端,使用 Ctrl Z 或 Ctrl C 都可以停掉。

代码语言:javascript复制
tail -f date.log

对于比较大的日志文件(如有10万行的日志文件),tail 可以与 head 配合使用,也可以与前面的 cat 和 grep 配合使用,在实际使用时可以灵活运用。date.log 文件一共365行,假如要查看第101行到第110行,同时要显示行号,可以用如下命令。

代码语言:javascript复制
cat -b date.log | head -110 | tail -10

五、more 和 less 命令

more 命令和 less 命令是查看文件里的所有内容,按页来展示日志信息。

more 和 less 会从文件开头显示一页的内容(根据屏幕大小自动分页,也可以自定义页的大小),按回车键往后滚动一行,按空格键往后滚动一页,按B键往回滚动一页,可以随时按q键退出浏览。

对于比较大的日志文件,使用 more 和 less 命令比 cat 命令好用很多。

代码语言:javascript复制
more date.log
less date.log

more 命令与 cat 命令一样,一开始就会将整个文件的内容都加载出来,显示内容多少根据屏幕大小自动显示,屏幕下方会显示当前处于文件中的大概位置,有一个百分比进度,当查看到文件最后,进度到100%,自动退出显示。

less 命令一开始不会将整个文件的内容都加载出来,而是边查看边加载,没有显示进度。less 命令可以使用上下方向键任意上下按行滚动显示,也可以使用左右方向键向左或向右滚动屏幕,对于比较长的行可以方便查看右边的内容,而 more 不能。当 less 查看到文件末尾时,会显示 END,不会自动退出,需要自己使用q退出。

使用 more 和 less 时,可以使用参数来协助查看,如使用-s参数可以将多个连续的空行显示成一行。

more 要查看行号,可以按=(等号)键显示当前行的行号,less 要查看行号,可以使用-N参数显示所有行的行号。

代码语言:javascript复制
less -N date.log

要了解更多参数可以使用--help查看,less 的参数比 more 多很多,说明 less 支持的功能更多。

六、nl 命令

nl 命令的功能主要是设置行号显示的,不过在显示行号的同时也会显示对应的内容,所以可以用来查看文件的内容。

nl 命令与 cat 相似,会一次将文件中的所有内容显示到控制台。

默认显示时就有行号,且不计算空行的数量。

代码语言:javascript复制
nl date.log

可以使用-b参数来指定是否计算空行的数量,指定-b为a会计算,指定-b为t不计算。

可以使用-w参数指定行数占用多少位,默认是6位,使用-n参数指定行号的对齐方式,指定-n为ln会左对齐,指定-n为rn会右对齐,指定-n为rz会右对齐并且前面补0,补满-w指定的位数。

代码语言:javascript复制
nl -b t -n rz date.sh

在 Linux 中查看文件内容的常用命令大概就以上这些了,它们都是 Linux 自带的。还有一些根据它们扩展出来的命令,有些需要安装后才能使用,如果上面的命令不满足使用需求时,可以按需去安装一些其他命令。

0 人点赞