Если вы хотите увидеть все программы, запускаемые командой, вы можете использовать strace
с опцией -f
, чтобы следить за детьми. .
Например, сбор всего вывода команды bash -c
в файл / tmp / out
:
$ strace -f -o /tmp/out -e execve bash -c 'ls -d . | cat -n; date'
$ grep 'execve(' /tmp/out
покажет команды и их параметры:
758 execve("/usr/bin/bash", ["bash", "-c", "ls -d . | cat -n; date"], ) = 0
759 execve("/usr/bin/ls", ["ls", "-d", "."],
760 execve("/usr/bin/cat", ["cat", "-n"],
761 execve("/usr/bin/date", ["date"], ) = 0
Альтернативно , предполагая, что ваше ядро было настроено с помощью CONFIG_FTRACE, вы можете использовать execsnoop , один из скриптов из коллекции трассировки и производительности Брендана Грегга, чтобы показать все команды, выполняемые в системе. Пример вывода при выполнении тех же 2 команд выше:
$ sudo /opt/perf-tools-master/bin/execsnoop
Tracing exec()s. Ctrl-C to end.
Instrumenting sys_execve
PID PPID ARGS
1567 2134 strace -f -o /tmp/out -e execve bash -c ls -d . | cat -n; date [...]
1569 1567 bash -c ls -d . | cat -n; date
1570 1569 ls -d .
1571 1569 cat -n
1572 1569 date
1575 2134 grep execve( /tmp/out
^C
Ending tracing...