Распечатать имена пользователей, которым удалось войти в систему с третьей попытки

Сначала проверьте в ~ / .fluxbox / init , что файл приложений настроен правильно:

session.appsFile:   ~/.fluxbox/apps

Затем xprop действительно дает вам строку имени bibek @Arch: ~ ? (первая строка поля WM_CLASS )

Лучше попробуйте без этого. Итак, у нас есть в ~ / .fluxbox / apps :

[group]  (workspace=[current])
[app] (class=Gnome-terminal)
[end]

Это работает на Fluxbox 1.3.5.

-1
12.06.2019, 08:11
3 ответа

попробуй

awk -F: '/failed/ { f[$1]++;} /success/ && f[$1]==2 { print ; f[$1]=0 ; }'

где

  • -F:используйте :в качестве разделителя
  • /failed/ { f[$1]++;}количество неудачных попыток входа пользователя
  • /success/ && f[$1]==2 { print $1; f[$1]=0 ; }распечатать результат при условии.

согласно комментарию, в случае специального имени (разрыв строки для удобства чтения)

awk -F: '$2 == "failed" { f[$1]++;} 
         $2 == "success" && f[$1]==2 { print ; f[$1]=0 ; }'
3
28.01.2020, 05:07

Простой bash -только решение :перебирать строки, увеличивая счетчик для каждой неудачи, и для каждого успеха проверяя значение этого счетчика и, если оно соответствует желаемому значению, генерировать некоторый вывод. Бонус sort -uв конце, чтобы выводить только пользователей, которые соответствуют, а не каждый случай. Возможным улучшением может быть сброс счетчика на 0 в случае успеха -, но вы должны быть в состоянии решить, как это сделать самостоятельно.

$ unset FAILURES  # In case you've already tried inthis shell
$ declare -A FAILURES
$ while IFS=: read USERNAME STATUS ; do [ "$STATUS" == "failed" ] && (( FAILURES[$USERNAME] += 1)); [ "$STATUS" == "success" -a "0${FAILURES[$USERNAME]}" -eq 2 ] && echo $USERNAME because status is $STATUS and failures is ${FAILURES[$USERNAME]}; done < login.log | sort -u
user1 because status is success and failures is 2
user2 because status is success and failures is 2
$
0
28.01.2020, 05:07

Я бы отслеживал, кто вошел в систему, поэтому мы не совпадаем с этим пограничным случаем:

joe:success
joe:failed
joe:failed
joe:success
awk -F: '
    $2 == "failed" {fail[$1]++} 
    $2 == "success" && !loggedin[$1] {
        if (fail[$1] == 2) print $1
        loggedin[$1] = 1
    }
' login.log

Если вас не интересует кто-либо, кто входит в систему после двух неудачных попыток подряд, независимо от предыдущих входов в систему. В этом случае вы хотите:

awk -F: '
    $2 == "failed" {fail[$1]++} 
    $2 == "success" {
        if (fail[$1] == 2) print $1
        fail[$1] = 0
    }
' login.log
0
28.01.2020, 05:07

Теги

Похожие вопросы