Сначала проверьте в ~ / .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.
попробуй
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 ; }'
Простой 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
$
Я бы отслеживал, кто вошел в систему, поэтому мы не совпадаем с этим пограничным случаем:
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