Сценарий оболочки для анализа файла журнала - PullRequest
1 голос
/ 03 августа 2011

Я пишу сценарий оболочки для анализа файла журнала и извлечения всех случаев, когда sudo преуспел и / или потерпел неудачу.Теперь я понимаю, что это, вероятно, было бы проще с оболочкой, эквивалентной регулярному выражению, но я не хотел тратить время на копания (и теперь я плачу).В любом случае:

sudobool=0
sudoCount=0

for i in `cat /var/log/auth.log`;
do
    for word in $i;
    do
        if $word == "sudo:"
        then
            echo "sudo found"
            sudobool=1;
            sudoCount=`expr $sudoCount + 1`;
        fi
    done

    sudobool=0;

done


echo "There were " $sudoCount " attempts to use sudo, " $sudoFailCount " of which failed."

Итак, мое понимание написанного мною кода: читать auth.log и разбивать его построчно, которые хранятся в i.Каждое слово в i проверяется, чтобы увидеть, является ли оно sudo :, если оно есть, мы переворачиваем bool и увеличиваем его.Когда мы закончим разбор строки, сбросим bool и перейдем к следующей строке.

Однако, судя по моим выводам, оболочка пытается выполнить отдельные слова файла журнала, обычно возвращая '$слово: не найдено '.

Ответы [ 3 ]

4 голосов
/ 03 августа 2011

почему вы не используете grep для этого?

grep sudo /var/log/auth.log

, если вы хотите, чтобы счетчик передавал значение wc -l

grep sudo /var/log/auth.log | wc -l

или, что еще лучше, используйте параметр -c для grep, который выводит количество найденных строк, содержащих sudo

grep -c sudo /var/log/auth.log

или, может быть, я упускаю что-то простое здесь?
РЕДАКТИРОВАТЬ: я видел $ sudoFailCount после прокрутки, вы хотите подсчитать, сколько неудачных попыток было сделано, чтобы использовать sudo ??Вы не определили никакого значения для $ sudoFailCount в своем скрипте, поэтому он ничего не напечатает.Также вам не хватает test скобок [[ ]] вокруг вашей проверки состояния

1 голос
/ 03 августа 2011

В продолжение ответа Судхи, вот одна строка:

$ echo "There were $(grep -c ' sudo: ' /var/log/auth.log) attempts to use sudo, $(grep -c ' sudo: .*authentication failure' /var/log/auth.log) of which failed."
There were 17 attempts to use sudo, 1 of which failed.
1 голос
/ 03 августа 2011

Ваше сообщение об ошибке возникает из-за отсутствия синтаксиса в вашем if утверждении: вам нужно поместить условие в [[скобки]]

Использование сопоставления с образцом в bash:

#!/bin/bash
sudoCount=0
while read line; do
    sudoBool=0
    if [[ "$line" = *sudo:* ]]; then
        sudoBool=1
        (( sudoCount++ ))
        # do something with sudobool ?
    fi
done < /var/log/auth.log
echo "There were $sudoCount attempts to use sudo."

Изначально я не знаком с auth.log - по какой схеме можно определить успех или неудачу?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...