변수가 되고 명령 대체를 포함하는 파일 이름으로 리디렉션

변수가 되고 명령 대체를 포함하는 파일 이름으로 리디렉션

저는 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을 유용한 HTML 파일로 변환하는 스크립트의 다른 명령(xsltproc)에서 사용할 수 있도록 XML 파일 이름을 변수에 넣고 싶습니다. 기본적으로 xsltproc 명령은 변환할 수 있도록 nmap에서 생성된 XML 파일의 이름을 알아야 합니다.

xsltproc scan_dmz_12h00m00s_01-01-2023.XML -o DMZ_HTML_report.html

xsltproc에서 사용할 수 있도록 이 XML 파일 이름을 변수에 넣으려고 합니다. 나는 그것이 어떻게 작동하는지 알아보기 위해 매우 기본적인 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". 정렬하기가 더 쉽고 어휘적으로 인접하거나 근처에 있는 파일의 시간 제한 스캔 목록을 닫는 것이 더 쉽습니다.

관련 정보