Existe um comando do Linux que observará novos processos?
Meu objetivo é ver quando um novo gulp
comando é chamado, executar a linha de comando com algo como ps
e filtrá-lo usando sed
.
O importante é acompanhar novos processos, já que não consigo procurar um PID depois de finalizado.
Responder1
Você pode usar o auditd
subsistema para registrar os comandos executados em seu sistema. Ele está conectado ao kernel, por isso é muito confiável para registrar tudo o que é executado.
Meus exemplos estão no Fedora Linux, você pode encontrar pequenas diferenças dependendo da sua distribuição. (O auditd
subsistema é bastante complexo, por isso pode ser complicado acertar.)
Primeiro verifique se você já possui o auditd instalado e em execução, com:
$ systemctl status auditd.service
Então você pode verificar quais regras estão carregadas. Por padrão, no Fedora, você obtém:
$ sudo auditctl -l
-a never,task
Portanto, precisamos remover esta lista de "tarefas" (que suprime syscalls) e adicionar uma que registre "execve" (que é o syscall que executa comandos).
$ sudo auditctl -d never,task
$ sudo auditctl -a always,exit -F arch=b64 -S execve
Feito isso, todos os comandos serão registrados no sistema de auditoria.
Você pode então pesquisá-lo, usando o ausearch
comando. Por exemplo, para encontrar todas as execuções que chamam "gulp", você pode usar:
$ sudo ausearch -c gulp
A saída será bastante detalhada... Concentre-se na linha type=EXECVE. Os argumentos serão listados comoa0="gulp" a1="first_argument" a2="second_argument" ...
Se você obtiver uma longa sequência de números em vez de uma string entre aspas, use -i
para interpretá-la.
Registrar cada comando executado em seu sistema pode ser muito caro e consumir muito espaço em disco! É possível que isso também afete o desempenho. Se quiser desfazer essas alterações, você pode recarregar o conjunto padrão de regras com este comando:
$ sudo augenrules --load
Você também pode aplicar um filtro à regra de registro, por exemplo, para registrar apenas execuções de /usr/bin/gulp:
$ sudo auditctl -a always,exit -F arch=b64 -F exe=/usr/bin/gulp -S execve
Então, talvez isso seja um exagero... Mas é o mais confiável possível. Espero que você consiga se orientar no auditd
subsistema e que ele lhe forneça as informações que procura!