Redhat7完整补丁信息

     以前间接的也学过一些Linux的基础,长期不用,很多知识点都已遗忘。现如今准备在运维这条道路上更进一步,所以近期开始深入的研究下Linux这门学科,语言。

     最近与公司沟通,幸运的是准许了我们能够跟大牛一起做些项目,来促进我们的进步。获得的第一个课题就是将Redhat7完整补丁信息进行归纳统计。项目具体要求如下:

https://access.redhat.com/errata/#/?q=&p=1&sort=portal_publication_date%20desc&rows=100&portal_advisory_type=Security%20Advisory&portal_product=Red%20Hat%20Enterprise%20Linux&portal_product_variant=Red%20Hat%20Enterprise%20Linux%20Server&portal_product_version=7&portal_architecture=x86_64 链接打开的信息中获取补丁信息,按照如下方式进行存储

image.png

    想完成这个项目方法有很多种,其中之一就是一个个的打开相关链接然后将我们所得到的信息一一填入上述表格,但是太费时了,也失去了我们项目的初衷,所以我们肯定要借助我们所学的知识去简化这个问题,使费力的事情变得轻松欢快起来。如下是我这几天的思路以及成果,当然花费这么多时间,也跟我刚初步的系统学习Linux有关,没办法知识点薄弱呀,只能学一个知识点用一个知识点了!

     一、  接下来的我们具体分析下这个问题:

          1、想完成这个表格其实我们只需要找到RHSA编号、CVE、相关链接、安全类型、以及描述即可

          2、如何获取这个链接里的数据,我们需要获得这个链接的源代码

          3、其中通过打开源代码得知RHSA编号、相关链接这两个数据是可以从网页的源代码里直接获得,CVE、安全类型、以及描述则需要从获取的相关链接里打开的内容中获得。

     二、项目过程(知识点有限,只能以现有知识储备的情况下思考问题)

          1、如何获取Redhat7链接源代码

           在Linux系统实际操作中发现通过#curl  Redhat7链接  >>linux.html 再所得到的HTML文件源代码中,没有我们所需要的上述几个关键字,所以我只能通过将Redhat7链接 所打开的网页另存为到桌面更名为redhat.html这个文件,然后我将这个redhat.html网页在本地打开,然后按F12获得的源代码保存到另一个文件test.html文件中,此时我们发现test.html文件中是有我们所需要的关键字RHSA的编号以及相关链接的地址信息。(其实,这个test.html文件中并不包含所有RHSA编号的所有信息,因为这个信息经过查看有九百多条,是分页打开的,而已另存为的方式打开的只是其中我们设置一页的100条编号信息,当然这个不影响我们研究这个问题,我们只需要在在完成这一页100条数据的基础上多重复操作几次就好了)

         2、通过工具我们将本地桌面上的test.html这个文件上传到我们用来操作的Linux系统上,这里我用的是CentOS6.8系统。上传后我们来操作这个文件来获得我们想要的RHSA编号以及相关链接这个数据

        获取RHSA编号的命令#grep "RHSA" test.html |grep --color "href" |cut -d = -f7 |cut -d'"' -f2 |cut -d'/' -f5

        获取相关链接的命令#grep "RHSA" test.html |grep --color "href" |cut -d = -f7 |cut -d'"' -f2 >test1.txt 这个命令结果是将我们获取到的100个链接保存到test1.txt这个文件中

        3、获取这100个链接后,我们则需要通过这些链接一一链接进去获得所对应的CVE、安全类型、以及描述,例如:

获取其中某单个连接里面的CVE的命令 

#curl https://access.redhat.com/errata/RHSA-2019:1166 |grep --color -A 50 "CVEs" |grep -o "CVE-.*\." |sed 's/\.//g'


获取其中某单个连接里面的安全类型的命令

#curl https://access.redhat.com/errata/RHSA-2019:2462 |grep --color -o "Security Advisory:[[:space:]][[:alnum:]]*" |cut -d' ' -f3


获取其中某单个连接里面的Description(描述)的命令

#curl https://access.redhat.com/errata/RHSA-2019:2462 |grep --color -A 1  "<h2>Description</h2>" |grep  -E '^[[:space:]]+<p>' |sed -r 's@^[[:space:]]+@@g' |grep -o --color "^<p>.*Security Fix" |sed -r 's@<BR /><P>Security Fix@@g' |sed -r 's@<BR />@@g' |sed -r 's@<p>@@g'


当然这样一一链接很耗时,此时我们写个shell脚本来一一遍历这100个相关链接的数据来获得我们想要的数据

第一种方式(这种方式的灵感来自于$1 与shift 的轮循,就是当我们的运行脚本,参数有多个时,每次都只取第一个参数参与脚本运行,运行结束时,进行轮循,踢出第一个参数,第二个参数变成第一个参数,然后再参与脚本运行,依次类推,直到所有参数全部参与完成):

我们在/tmp目录下创建一个可执行文件#nano ceshishift.sh 即可进行编辑:

#!/bin/bash

echo -e "binhao:`echo $1 |cut -d'/' -f5` \nlianjie:$1 \nCVEs:`curl $1 |grep --color -A 50 "CVEs" |grep -o "CVE-.*\." |sed 's/\.//g'` \nanquanleixing:`curl $1 |grep --color -o "Security Advisory:[[:space:]][[:alnum:]]*" |cut -d' ' -f3`  \nDescription:`curl $1 |grep --color -A 1  "<h2>Description</h2>" |grep  -E '^[[:space:]]+<p>' |sed -r 's@^[[:space:]]+@@g' |grep -o --color "^<p>.*Security Fix" |sed -r 's@<BR /><P>Security Fix@@g' |sed -r 's@<BR />@@g' |sed -r 's@<p>@@g'`"

shift

.

.

100次

保存后 给文件添加权限#chmod +x 

设置一个变量a,将100个链接的值赋值给它#a=`cat test1.txt`

然后我们开始运行脚本#./ceshishift.sh $a   就可以获得我们想要的数据 类似如下:

image.png

通过上面查看轮循虽然可以完成,但是需要将上面的代码写100条,这就很多啦,所以还是达不到我们想要简便的效果,往下继续

第二种方法(这里我们用到for循环):

我们在/tmp目录下创建一个可执行文件#nano ceshifor.sh 即可进行编辑:

#!/bin/bash


a=`cat test1.txt`

for LJ in $a;

     do

     echo -e "binhao:`echo $LJ |cut -d'/' -f5` \nlianjie:$LJ \nCVEs:`curl $LJ |grep --color -A 50 "CVEs" |grep -o "CVE-.*\." |sed 's/\.//g'` \nanquanleixing:`curl $LJ |grep --color -o "Security Advisory:[[:space:]][[:alnum:]]*" |cut -d' ' -f3`  \nDescription:`curl $LJ |grep --color -A 1  "<h2>Description</h2>" |grep  -E '^[[:space:]]+<p>' |sed -r 's@^[[:space:]]+@@g' |grep -o --color "^<p>.*Security Fix" |sed -r 's@<BR /><P>Security Fix@@g' |sed -r 's@<BR />@@g' |sed -r 's@<p>@@g'`";

     done


保存退出,给文件添加权限#chmod +x

运行脚本#./ceshifor.sh |tee linux100.txt 就可以在屏幕上打印以及将100个编号所对应的数据一一保存到linux100.txt 文件中,例如

image.png


做这个方法有很多种,上述只是根据我现有知识量而完成的,其中很多方面在后期我的知识储备上来了我都会进行补充修改再上传,比如可能用到函数或者比如用到爬虫,这个案例我的一个好友用Python脚本爬虫能达到这个课题所要求的的全部效果,而我上述功能只能实现获得所需数据,这些数据如何通过命令或者其他方式导入到方案所需要的表格中,还需要时间去整理。下面我将我好友如何爬虫的代码以图片的形式发布下:

image.png

image.png

image.png

image.png

image.png

image.png

效果图是自动生成的一个.xlsx文件:

image.png

猜你喜欢

转载自blog.51cto.com/1344946553/2430521