Hexdump ничего не знает об адресах (или памяти ). Он просто печатает поток байтов и добавляет к нему префикс с количеством байтов, просмотренных до сих пор. Если его ввод поступает из файла, эти числа, таким образом, соответствуют позиции в файле.
Чтобы выяснить, где эти байты оказываются в памяти после загрузки файла, необходимо просмотреть метаданные в файле. Для файлов ELF это означает заголовки разделов (, а иногда и заголовки программ ).
readelf -S path/to/your/binary
показывает что-то вроде этого:
Section Headers:
[Nr] Name Type Address Offset
Size EntSize Flags Link Info Align
…
[13].text PROGBITS 000000000050eac0 0010eac0
0000000001833275 0000000000000000 AX 0 0 16
…
Здесь значение в разделе «Смещение» — это позиция в файле, где начинается конкретный раздел, а значение в разделе «Адрес» — это соответствующий виртуальный адрес (, где он заканчивается в памяти ). Вам просто нужно добавить разницу между этими двумя числами из hexdump
, чтобы получить адреса.
Вы также можете использовать objdump -h path/to/your/binary
для получения тех же данных:
Sections:
Idx Name Size VMA LMA File off Algn
…
12.text 01833275 000000000050eac0 000000000050eac0 0010eac0 2**4
CONTENTS, ALLOC, LOAD, READONLY, CODE
…
Опять же,«File off» — это смещение в файле, а «VMA» — соответствующий виртуальный адрес. Если вам интересно, что такое «LMA», посмотрите здесь .
Вы можете настроить crontab для идентификатора пользователя, который запускает процесс apache, или под идентификатором root
, где запись crontab будет выглядеть как:
@daily cd /var/domlogs; > logfile.log
Вам не нужно создавать сценарий оболочки для такой простой задачи, как эта; просто разделяйте команды символом ;
.
@daily — это расширение GNU, запускаемое ежедневно в полночь; вы можете посмотреть https://crontab.guru/, чтобы поиграть с различными параметрами.
Для более точного времени, скажем, в понедельник, среду и пятницу в 2 :30 утра, попробуйте:
30 2 * * 1,3,5 cd /var/domlogs; > logfile.log
А вот кое-что, что я поместил в crontab (в качестве комментариев, для crontab #
— это комментарий, как сценарии оболочки):
#Minute Hour Day Month Wkday UnixCmd
#0-59 0-23 1-31 1-12 0-7 UnixCmd
Чтобы настроить задание cron для текущего пользователя, просто используйте crontab -e
, который вызовет редактор для ввода вышеуказанных команд.
Теперь, для более сложных задач, просто помните о различных ограничениях в заданиях cron. Начальная среда имеет очень ограниченную среду, настроенную до PATH
и т. д. И когда запускается задание cron, если выходные данные не перенаправляются в выходной файл, стандартный вывод и стандартная ошибка задачи будут отправлены по электронной почте в пользователь, настроивший cron.