我使用 nmap 扫描网络,然后创建一个包含扫描信息的 XML 文件。我希望 XML 文件包含扫描日期,以便每个文件都是唯一的,并且我可以看到扫描的时间和日期,我将定期对同一网络进行大量扫描。我使用 date 命令来生成它。
nmap -sSV -oX scan_dmz_$(date +'%H'h'%M'm'%S's_'%d'-'%m'-'%Y').xml 10.0.0.0/24 10.1.0.0/24
不过,我希望将该 XML 文件名放入一个变量中,以便稍后在将 XML 转换为有用的 HTML 文件的脚本中的另一个命令 (xsltproc) 使用。本质上,xsltproc 命令必须知道 nmap 创建的 XML 文件的名称,以便它可以进行转换。
xsltproc scan_dmz_12h00m00s_01-01-2023.XML -o DMZ_HTML_report.html
我正在努力将此 XML 文件名放入变量中,以便 xsltproc 可以使用它。我尝试了一些非常基本的 bash 脚本来看看它是如何工作的,但我无法让它发挥作用。
tail /var/log/auth.log > tailout=tail_$(date +'%H'h'%M'm'%S's_'%d'-'%m'-'%Y').xml ; xsltproc $tailout -o DMZ_HTML_report.html
本质上,如何重定向到需要同时成为变量的变量文件名,以便将来的命令可以处理该文件。提前致谢。
答案1
首先填充变量,然后使用它。
tailout=tail_$(date +%Hh%Mm%Ss_%d-%m-%Y).xml
tail /var/log/auth.log > "$tailout"
xsltproc "$tailout" -o DMZ_HTML_report.html
考虑切换到%FT%T%z
(相当于%Y-%m-%dT%H:%M:%S%z
)而不是时间戳格式。它是标准的、明确的、普遍理解的,并且当按词汇排序时,按时间顺序排序。
答案2
通常的方法是生成变量并在后续调用中使用它:
file="scan_dmz_$(date +'%Hh%Mm%Ss_%d-%m-%Y').xml"
nmap -sSV -oX "$file" 10.0.0.0/24 10.1.0.0/24
xsltproc "$file" -o DMZ_HTML_report.html
或者您是否将扫描nmap
与后续的 XSLT 处理分离?
顺便说一句,我个人会使用 YMD-HMS 格式结构作为文件名(从大到小)"scan_dmz_$(date +'%Y%m%d_%H%M%S').xml"
:它更容易排序,并且关闭定时扫描列表词汇上相邻或附近。