Мне нужно найти точное слово в файле паролей, но я получаю два ответа
Я использую grep для разбора файла паролей.
Когда я использую
grep -w "avahi" /etc/passwd
Я получаю два ответаavahi
а также avahi-autoipd
Я не нашел способ дать мне уникальный ответ.
Эта команда является частью большего скрипта, где имя (avahi
) на самом деле переменная.
Это работает, когда имя rpc
а также rpcuser
, Так что я предполагаю, что это как-то связано с чертой (-
) во имя.
Актуальный код:
#!/bin/ksh
getent shadow |cut -d: -f1-2|grep ':!!'| cut -d: -f1 > /tmp/pasck
while read line
do
NOLOGIN=`grep -w $line /etc/passwd | cut -d -f7|cut -d/ -f3`
if [[ $NOLOGIN != "nologin: && $NOLOGIN != "false" ]] ; then
echo "$line" "$NOLOGIN" >> /tmp/pasck.list
fi
done <?tmp/pasck
Скрипт пытается пройти через теневой файл и искать пользователей без паролей. Затем я сравниваю результаты с файлом passwd, чтобы определить, какая из этих учетных записей настроена на /bin/false
или же /sbin/nologin
, Остальные были бы фактическими пользователями без установленного пароля, но разрешенного в системе.
2 ответа
Все очень просто - вы можете включить двоеточие после имени пользователя в вашем grep
заявление:
$ grep "^avahi:" /etc/passwd
Вы можете использовать awk и явно протестировать первое разделенное двоеточиями поле:
awk -F: '$1 = "avahi"' /etc/passwd