高士涛-学习日报

姓名

高士涛

日期

2023/05/23

部门

云服务业务部

导师

王晓明

学习工作内容

Shell命令参数传递实验

实验目的:

1.   查询/var/log 下面多个日志文件的最后五行信息。

2.   熟悉shell 命令参数的传递方法

3.   熟悉xargs find -exec 的使用

实验环境:

CentOS Linux release 7.9.2009 (Core)

实验说明:

    由于/var/log 有多个log文件,数量不固定,log文件名字不固定,需要通过find ls 命令找到日志文件, 然后再显示这些日志文件的最后5 行信息

    为了快速查找查询/var/log 下面多个日志文件的最后五行信息,我们希望把找到的文件名作为参数传递给日志显示命令。

实验步骤:

方法xargs 实现多个参数传递:

    [root@hostgst ~]# cd /var/log/

[root@hostgst log]# find  ./ -name "*.log" | xargs tail -n 5

输出显示:

 

试一下换行输出:

[root@hostgst log] # find ./ -name "*.log" | xargs

 

方法解释 :

find ./ -name "*.log" | xargs tail -n 5  

find ./ -name "*.log"  输出当前目录与子目录中以log结尾的日志文件名 ,并通过管道方式把文件名作为参数传递给 xargs tail -n 5

xargs tail -n 5 接收管道,传递过来的文件名 , 并把这些文件名作为 tail -n 5 命令行的参数,并执行tail -n 5 这条命令 。

 

方法二:通过find 命令的 -exec 选项来显示多个日志文件的最后五行:

[root@hostgst log]# find ./ -name "*.log" -exec tail -n 5 {} \;

输出内容为:

 

方法二解释

该方法使用了find 命令的 -exec 选项, 即通过find 命令找到查找的文件后,调用tail -n 5 命令处理查找到的文件,其中 {} 表示 find 找到的结果,作为参数,传递给tail -n 5 这个命令。

其中 , “ \; ”规定在 -exec 后面表示该命令终结的符号。

可以看到 find ./ -name "*.log" -exec tail -n 5 {} \; 也输出了日志文件的最后五行,但是没有列出文件名,不便于一些场景下的问题分析。如果要加上文件名,可以加上 -print 选项:

find ./ -name "*.log" -print -exec tail -n 5 {} \; 

输出内容为:

 

实验拓展:

    通过上述的两种方法, 列出/var/log 下面以log结尾的文件中含有 ERROR (不区分大小写)的内容。

find ./ -name "*.log" -print -exec grep -i error {} \; | tail -n 15

 

在自己的虚拟机或服务器环境试试:

find ./ -name "*.log" -print -exec grep -i error {} \;

结果表明 /var/log 目录下的所有log文件目前都没有error相关内容。

 

那就列出 /var/log 下面以log结尾的文件中含有 WARNING(不区分大小写)的内容:

find ./ -name "*.log" -print -exec grep -i warning {} \;

 

 

遗留问题

 

明日计划

继续深入学习