Я хотел бы получить журнал всех процессов, запущенных с момента их запуска, и аргументов, с которыми они были запущены. Возможно ли это в Linux?
55
Ваша отправная точка должна быть проверена.
Попробуйте что-то вроде этого:
apt-get install auditd
auditctl -a task,always
ausearch -i -sc execve
The audit system is disabled
Где я могу его включить?chmod 0750 /sbin/audispd
но она все еще не работает (Debian Wheezy)Unable to set audit pid, exiting
но я думаю, что реальная проблема будет в том, что система работает в контейнере LXCМне нужно было сделать это, за исключением того, что (1) мне не требовалось время и (2) меня интересовали только процессы, запускаемые данным процессом, его дочерние элементы и последующие потомки. Кроме того, в среде, которую я использовал, было невозможно получить
auditd
илиaccton
, но былоvalgrind
.Добавьте следующий префикс к интересующему процессу в командной строке:
Необходимая информация будет в журнале, отображаемом на STDERR.
источник
memcheck
инструментом. Чтобы отключить инструмент и связанный с ним ведение журнала, и печатать только создание новых команд (в дополнение к обычному выходу вашей программы), используйте следующую команду вместо:valgrind --tool=none --trace-children=yes [command and args here]
. Каждый раз, когда создается подпроцесс, Valgrind будет регистрировать полную команду, включая аргументы, которые ей были переданы.Вы можете использовать Snoopy для этого.
Его очень просто установить, и начиная с 2.x он может регистрировать произвольные данные (аргументы, переменные окружения, cwd и т. Д.).
Раскрытие: сопровождающий Snoopy здесь.
источник
Вы можете запустить startmon и следовать его стандартному выводу, Ctrl-C, когда закончите. Вот как можно скомпилировать и запустить startmon в последних дистрибутивах Red Hat (RHEL, Fedora, CentOS):
В Debian (и Ubuntu и т. Д.) Первая строка приведенного выше изменяется на:
В качестве альтернативы вы можете попробовать
execsnoop
скрипт в perf-tools, см. Этот ответ . По умолчанию отображаются только первые 8 аргументов (9, включая имя программы); Вы можете увеличить это черезЕсли у вас нет root-доступа к системе, лучшее, что вы можете сделать, это продолжать опрашивать
/proc
и надеяться, что он перехватит все (чего не будет), но для полноты приведем скрипт для этого (я поставил duplicate-Removal для упрощения вывода) - хотя это не так хорошо, как правильное отслеживание их с помощью одного из вышеперечисленных методов, у него есть небольшое преимущество однозначного отображения разделителей между аргументами командной строки, на случай, если вам когда-нибудь понадобится сообщить разница между пробелами внутри аргумента и пробелом между аргументами. Этот скрипт неэффективен, так как он использует процессор (ну, одно из его ядер) 100% времени.Вы также можете
execsnoop
установить патч, чтобы более четко указать, какой аргумент какой:grep -v sub.*arg < execsnoop > n && chmod +x n && mv n execsnoop
источник
CONFIG_FTRACE
иCONFIG_KPROBES
черезbrendangregg/perf-tools
На другой оболочке:
Первая оболочка показывает данные формата:
CONFIG_PROC_EVENTS
Пример сеанса:
CONFIG_PROC_EVENTS
выставляет события в userland через сокет netlink .proc_events.c адаптирован из: https://bewareofgeek.livejournal.com/2945.html
GitHub upsatream .
Однако я не думаю, что вы можете получить данные процесса, такие как UID и аргументы процесса, потому что они
exec_proc_event
содержат так мало данных: https://github.com/torvalds/linux/blob/v4.16/include/uapi/linux/cn_proc .h # L80 Мы могли бы попытаться немедленно прочитать его/proc
, но есть риск, что процесс завершится, и другой получит свой PID, поэтому он не будет надежным.Протестировано в Ubuntu 17.10.
источник
Также вы можете использовать поверх для просмотра использования ресурсов процессами. Это полезные инструменты для регистрации и анализа использования ресурсов в каждой части времени
источник
Вы можете попробовать
cat ~/.bash_history
Естьsystem log viewer
, это может помочь вам.источник
~/.bash_history
очевидно, содержит только те команды, которые я выполнил в терминале. Я ищу журнал всех выполненных программ, например, когда я щелкаю значок, чтобы открыть мой почтовый клиент, gedit или открываю свой браузер, и мой браузер выполняет другой процесс сам по себе. Ответ new123456 сделал свое дело.history
является обычным способом доступа к этой информации.