Чтобы устранить фундаментальное заблуждение, dmesg
не считывается из /var/log/dmesg
. Он считывает непосредственно из кольцевого буфера ядра и выдает последние N сообщений. В конце процесса загрузки вызывается dmesg
для записи загрузочных сообщений в /var/log/dmesg
(при этом старые версии этого файла вращаются в обычном способе).
После запуска системного журнала ( syslogd
, rsyslogd
, syslog-ng
и т.д.) он считывается из буфера ядра и записывается в файл, например /var/log/kern.log
. (Это для Debian; другие системы будут различаться). Предполагая, что ваша система смогла записать на диск и очистить дисковые буферы, прежде чем он потерпел крах, то есть там вы найдете умирающие крики ядра.
В моей системе Debian файл /var/log/kern.log
содержит считываемые человеком метки времени.
Для этого (тщательно) отредактируйте /etc/pam.d/sshd
и добавьте в стек модуль pam _ exec
. Этот модуль можно использовать для вызова внешней программы, например сценария, когда кто-то успешно запустил сеанс ssh.
Дайте мне знать, если вам нужны инструкции «Как», и я обновлю свой ответ, чтобы включить их для системы на основе Debian. (Другие дистрибутивы имеют несколько отличающиеся стеки PAM, поэтому вам придется интерпретировать мои инструкции, а не следовать им вслепую.)
-121--84635- Совершенно нормально иметь систему без этого файла. Поэтому его нельзя найти ни на одной системе голых костей. Этот файл копируется из /etc/skel
в домашнюю папку нового пользователя при создании пользователя, и он будет находиться в домашней папке из-за этого факта или из-за того, что кто-то поместил его туда вручную.
Причина, по которой вы хотите иметь .bashrc
(или .bash _ профиль
или оба), заключается в том, что во время входа в систему Bash будет выполнять любые команды (и пользовательские настройки), которые вы хотите.
Имейте в виду, что даже сам Баш необязателен. Хотя некоторая оболочка, совместимая с POSIX, должна существовать, она не должна быть Bash.
Несколько вещей:
.
- это особый символ, поэтому он должен быть сбежен:
^10\.20\.30\.([0-1][0-9][0-9]|2[00])
2 [00]
совпадает 20, а не 200:
^10\.20\.30\.([0-1][0-9][0-9]|200)
Вы должны обрабатывать однозначные и двузначные числа отдельно:
^10\.20\.30\.([0-1][0-9][0-9]|200|[0-9][^0-9]|[0-9][0-9][^0-9])
Это дает правильный результат:
$ grep -vE -f whitetest.txt testIP.txt
10.20.30.201 20
10.20.30.250 20
222.233.201.5 20
10.233.201.5 20
111.233.201.5 20
Это должно получить то, что вы хотите, я думаю:
grep -vE '10\.20\.30\.(1|..?,|200)
' <<\IN
10.20.30.150,20
10.20.30.134,20
10.20.30.201,20
10.20.30.5,20
10.20.30.250,20
10.20.30.42,20
222.233.201.5,20
10.233.201.5,20
111.233.201.5,20
IN
в основном вам просто нужно исключить любой матч на 10.20.30 с финальным октомным восьем менее трех символов, что начинается с 1 или это полностью 200.
Вышеуказанные отпечатки:
10.20.30.201,20
10.20.30.250,20
222.233.201.5,20
10.233.201.5,20
111.233.201.5,20