sudo를 사용하여 성공 및 실패 여부에 관계없이 모든 로그인을 모니터링하는 스크립트를 만들려고 합니다.
지금 나 한테있어:
set tdate = $(date "+%b %d")
set attempted_su_log = /var/log/suattempts
cat /var/log/secure | grep $tdate | grep 'servername su' >> $attempted_su_log
/var/log/secure에서 현재 날짜를 파악하여 발생한 날짜에 대한 항목만 가져오려면 어떻게 해야 합니까?
내가 달릴 때
cat /var/log/secure | grep 'Mar 18' | grep 'servername su'
명령줄에서 필요한 결과를 얻었지만 $tdate 변수로 설정된 현재 날짜로 grep을 스크립트하는 방법을 잘 모르겠습니다.
답변1
grep :의 매개변수를 인용해야 합니다 grep "$tdate"
. 이는 $tdate
큰따옴표를 추가하지 않는 한 두 개의 공백으로 구분된 단어로 확장되어 grep에 두 개의 인수로 전달되기 때문입니다 .
쓸데없는 cat 사용을 제거하고 grep을 한 번만 호출하도록 스크립트를 개선할 수 있습니다.
</var/log/secure grep "$tdate.*servername su" >>"$attempted_su_log"
답변2
tdate
거기에 공간이 있습니다. 따라서 grep은 두 번째 부분을 tdate
파일 이름으로 처리합니다. $tdate
이런 일이 발생하지 않도록 하려면 큰따옴표로 묶어야 합니다 . 명령은 다음과 같아야 합니다.
cat /var/log/secure | grep "$tdate" | grep 'servername su' >> $attempted_su_log