Шаблон grep точно соответствует из файла и поиск только в первом столбце

Проблема заключается в том, записан ли ваш пароль в журнал аутентификации.

Если вы входите в систему с текстовой консоли под Linux, и вы нажали Ctrl + C в запросе пароля, то запись в журнале не будет сгенерировано. По крайней мере, это верно для Ubuntu 14.04 или Debian jessie с SysVinit и, вероятно, для других дистрибутивов Linux; Я не проверял, так ли это в системе с Systemd. Нажатие Ctrl + C завершает процесс входа в систему до того, как он сгенерирует какую-либо запись в журнале. Итак вы в безопасности .

С другой стороны, если вы действительно попытались войти в систему, что произойдет, если вы нажали Enter или Ctrl + D в запросе пароля, то введенное вами имя пользователя отображается в журналах аутентификации в виде обычного текста. Все неудачные попытки входа в систему регистрируются; запись журнала содержит имя учетной записи, но никогда не содержит информации о пароле (только тот факт, что пароль был неверным).

Вы можете проверить это, просмотрев журналы аутентификации. В Ubuntu 14.04 или Debian jessie с SysVinit журналы аутентификации находятся в /var/log/auth.log .

Если это машина под вашим исключительным контролем, и она не ведет журнал удаленно, и для файла журнала еще не было выполнено резервное копирование, и вы готовы и можете редактировать файл журнала, ничего не нарушая, тогда отредактируйте файл журнала, чтобы удалить пароль.

Если ваш пароль записан в системные журналы, вы должны считать его скомпрометированным и вам необходимо его изменить.Журналы могут просочиться по разным причинам: резервные копии, запросы о помощи… Даже если вы единственный пользователь на этой машине, не рискуйте.

Примечание: я не проверял, работает ли Ubuntu 16.04 по-другому. Этот ответ не может быть обобщен для всех вариантов Unix и, конечно же, не может быть обобщен для всех методов входа в систему. Например, OpenSSH регистрирует имя пользователя, даже если вы нажимаете Ctrl + C в запросе пароля (фактически до того, как он покажет запрос пароля).

4
12.11.2015, 15:30
2 ответа

Вероятно, вам понадобится флаг -w - от man grep

   -w, --word-regexp
          Select  only  those  lines  containing  matches  that form whole
          words.  The test is that the matching substring must  either  be
          at  the  beginning  of  the  line,  or  preceded  by  a non-word
          constituent character.  Similarly, it must be either at the  end
          of  the  line  or  followed by a non-word constituent character.
          Word-constituent  characters  are  letters,  digits,   and   the
          underscore.

т.е.

grep -wFf patfile file
denovo1 xxx yyyy oggugu ddddd
denovo22 hhhh yyyy kkkk iiii

Чтобы обеспечить соответствие только в первом столбце, вам нужно будет изменить записи в файле шаблона, чтобы добавить привязку строки : вы также можете использовать \ b привязка слова вместо параметра командной строки -w , например в patfile :

^denovo1\b
^denovo3\b
^denovo22\b

затем

grep -f patfile file
denovo1 xxx yyyy oggugu ddddd
denovo22 hhhh yyyy kkkk iiii

Обратите внимание, что вы должны удалить переключатель -F , если файл содержит регулярные выражения вместо простых фиксированных строк.

6
29.04.2021, 00:35

можно также использовать awk:

awk 'NR==FNR{a[$0]=$0}NR>FNR{if($1==a[$1])print $0}' pattern_file big_file

вывод:

denovo1 xxx yyyy oggugu ddddd
denovo22 hhhh yyyy kkkk iiii
4
29.04.2021, 00:35

Теги

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