Я получу несколько сценариев оболочки, которые я вроде не знаю, что они будут делать. Но мне нужно знать, какие операции ввода / вывода выполняет скрипт (например, файлы, которые они читают / получают к ним доступ, файлы, которые они пишут, папки создаются ... и т. Д.).
В качестве примера можно использовать strace следующим образом:
Сценарий INPUT: g++ -Wall a.cpp -o hello
Я буду запускать его так: sudo strace -f -e trace=open g++ -Wall a.cpp -o hello 2> output.txt
* ЧТО Я ХОЧУ: * output.txt будет иметь трассировку и файлы, к которым был получен доступ (a.cpp и bh, которые используются в a.cpp и выводим привет)
...
[pid 13871] open("a.cpp", O_RDONLY|O_NOCTTY|O_LARGEFILE) = 3
[pid 13871] open("b.h", O_RDONLY|O_NOCTTY|O_LARGEFILE) = 4
...
[pid 13874] open("hello", O_RDWR|O_CREAT|O_TRUNC|O_LARGEFILE, 0666) = 3
...
Задача
1- strace
не обрабатывает трубу , поэтому, если я получу команду, подобную mkdir d2 | cp *.c d2/
он обнаружит только первую команду mkdir d2
.
2- strace
предоставляют слишком много информации, что хорошо, но если что-то более конкретное, это было бы здорово!
Я искал другие инструменты и утилиты, и большинство из них перечисляло бы информацию для запущен процесс , а я не хочу этого , так как скрипт будет выполнен немедленно и ничего не будет в списке процессов в Ubuntu.
Есть какие-нибудь идеи, как мне добиться этого в Ubuntu?
Относительно проблемы 1,
причина в том, что strace
не запускает процесс с оболочкой, из соображений безопасности.
Чтобы это исправить, вам нужно обернуть трубу в bash -c ' ... '
, заменив bash
вашей оболочкой:
sudo strace -f -e trace=open bash -c 'mkdir d2 | cp *.c d2/' hello 2> output.txt