我正在尝试遍历 CVE 列表,与 rpm -qa --changelog 进行比较,并输出 RPM 名称和 CVE grep 输出,但无法到达那里。
该列表采用列格式。
我希望输出如下: RPM : CVE output
rpm -q $RPM --changelog|grep $CVE
其中 $RPM 来自 rpm -qa,$CVE 来自 cat CVE.list
我正在尝试遍历 CVE 列表,与 rpm -qa --changelog 进行比较,并输出 RPM 名称和 CVE grep 输出,但无法到达那里。
该列表采用列格式。
我希望输出如下: RPM : CVE output
rpm -q $RPM --changelog|grep $CVE
其中 $RPM 来自 rpm -qa,$CVE 来自 cat CVE.list
以下不是一个光滑的单线,但它有效。——约翰·霍尔
#!/bin/ksh
#
# Show which installed RPM's contain specified CVE's.
#
echo "\
CVE-2011-3348
CVE-2012-0031
" | \
while read CVE
do
case $CVE in
"") break ;;
esac
echo; echo "Processing [$CVE] ... "
rpm -qa | \
while read RPM
do
rpm -q --changelog $RPM | grep $CVE > /dev/null
case $? in
0) echo "RPM: $RPM "
rpm -q --changelog $RPM | grep $CVE
;;
esac
done
done
尝试类似的东西
rpmout=$(rpm -q $RPM --changelog)
for vuln in $(cat "$CVE")
do
cvegrep=$( rpm -q "$RPM" --changelog | grep "$vuln")
echo -en "$rpmout : $cvegrep\n"
done
编辑:编辑以考虑特定的输出需求。这可能需要进一步编辑,具体取决于 CVE 文件格式的确切内容以及 rpm 命令的输出内容。