Есть ли команда Linux, которая будет следить за новыми процессами?
Моя цель — увидеть, когда gulp
вызывается новая команда, выполнить командную строку с помощью чего-то вроде ps
, а затем отфильтровать ее с помощью sed
.
Важной частью является наблюдение за новыми процессами, поскольку я не могу посмотреть PID после его завершения.
решение1
Вы можете использовать auditd
подсистему для регистрации команд, запущенных в вашей системе. Она подключена к ядру, поэтому очень надежно регистрировать все, что выполняется.
Мои примеры приведены для Fedora Linux, вы можете заметить небольшие различия в зависимости от вашего дистрибутива. (Подсистема auditd
довольно сложная, поэтому может быть сложно сделать все правильно.)
Сначала проверьте, что у вас уже установлен и запущен Auditd, выполнив:
$ systemctl status auditd.service
Затем вы можете проверить, какие правила загружены. По умолчанию в Fedora вы получаете:
$ sudo auditctl -l
-a never,task
Поэтому нам нужно удалить этот список «задач» (который подавляет системные вызовы) и добавить тот, который регистрирует «execve» (системный вызов, который выполняет команды).
$ sudo auditctl -d never,task
$ sudo auditctl -a always,exit -F arch=b64 -S execve
После этого все команды будут регистрироваться в системе аудита.
Затем вы можете выполнить поиск, используя ausearch
команду. Например, чтобы найти все выполнения, которые вызывают "gulp", вы можете использовать:
$ sudo ausearch -c gulp
Вывод будет довольно подробным... Сосредоточьтесь на строке type=EXECVE. Аргументы будут перечислены какa0="gulp" a1="first_argument" a2="second_argument" ...
Если вместо строки в кавычках вы получили длинную последовательность чисел, используйте -i
для ее интерпретации.
Регистрация каждой команды, которая выполняется в вашей системе, может быть очень затратной и занимать много места на диске! Возможно, это также влияет на производительность. Если вы хотите отменить эти изменения, вы можете перезагрузить набор правил по умолчанию с помощью этой команды:
$ sudo augenrules --load
Вы также можете применить фильтр к правилу ведения журнала, например, регистрировать только выполнения /usr/bin/gulp:
$ sudo auditctl -a always,exit -F arch=b64 -F exe=/usr/bin/gulp -S execve
Так что, возможно, это излишество... Но это настолько надежно, насколько это возможно. Надеюсь, вы сможете разобраться в auditd
подсистеме, и она даст вам информацию, которую вы ищете!