Получить журналы на определенную дату (журнал доступа apache)

Выполнение сценария происходит в два этапа. Сначала ядро ​​читает начало файла и видит, что оно начинается с #!, поэтому оно читает строку shebang и определяет, какой интерпретатор вызывать. Затем ядро ​​преобразует исходную командную строку в путь к интерпретатору, опцию (s )¹ в строке shebang, если она есть, путь к файлу и исходные опции. Затем он выполняет эту командную строку, в основном так, как если бы это была командная строка все время, но без какой-либо дальнейшей обработки.

До сих пор ядро ​​проверяло, есть ли у вызывающего объекта разрешение на выполнение файла сценария. Разрешение на чтение не вступило в игру. Ядро читает начало файла как часть его выполнения, поэтому это контролируется разрешением на выполнение, а не разрешением на чтение.

На втором этапе выполняется интерпретатор. Поскольку он видит имя файла сценария в своей командной строке, он, вероятно, попытается его открыть. Это тот момент, когда необходимо разрешение на чтение. Если у интерпретатора нет разрешения на чтение файла, его вызов openзавершится ошибкой, а затем, вероятно, интерпретатор напечатает сообщение об ошибке и сдастся. Я говорю «предположительно», потому что это то, что делает каждый здравомыслящий интерпретатор, но нет никаких технических обязательств, что все происходит именно так. Если вы используете программу, которая не является интерпретатором строки shebang, это не имеет никакого значения на первом этапе, но программа будет делать то же, что и на втором этапе. Например,«сценарий», начинающийся с #!/bin/echo, просто напечатает имя файла сценария и любой дополнительный аргумент командной строки, а затем завершится, и для этого сценарий должен быть только исполняемым.

¹ Многие ядра, включая Linux, допускают только одну опцию.

0
23.03.2021, 11:38
2 ответа

Поскольку ваш временной диапазон очень специфичен, вы можете просто использоватьgrep:

grep '\[23/Mar/2021:2[0-2]' /var/log/apache2/access.log

. поиск строки даты и затем в диапазоне 20 -22h

В качестве альтернативы и для дальнейшего использования можно использовать sed:

sed `/START/,/END/p`

напр.

sed '/21\/Mar\/2021:01:/,/23\/Mar\/2021:22:/p'

Если вы заставите apache использоватьjournald(ref -, обратите внимание на предупреждение ), в будущем можно будет даже полагаться на:

journald -u apache2 --since "2021-03-23 20:00:00" --until "2021-03-23 22:00:00"
0
28.04.2021, 22:57

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

В VIM, когда вы не находитесь в режиме редактирования, вы можете написать /2021 :20, он перейдет на первую строку, содержащую эту метку времени. Прокрутите оттуда.

0
28.04.2021, 22:57

Теги

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