변수로 grep

변수로 grep

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

관련 정보