Nie ma ogólnego rozwiązania, ponieważ istnieje niezliczona ilość sposobów, za pomocą których skrypt może wywoływać inne skrypty. Możesz zrobić coś, grep
co może działać dla twoich skryptów, ale ogólnie nie.
Jakie skrypty to wywołuje?
$(find / -executable -name "*.sh" -print0 | shuf -z -n 1)
Jeśli jesteś w stanie uruchomić te skrypty, możesz je prześledzić na dwa sposoby.
set -x
sprawi, że skrypt wydrukuje każde wykonane polecenie w rozszerzonej formie. Następnie możesz sprawdzić te polecenia pod kątem tych, które uruchamiają skrypty.
strace -ff
Przesada, ale strace
daje ci wszystko, co robi proces, a dzięki -ff
opcji podąża za króliczą dziurą prawie do końca. Mówię prawie dlatego, że istnieją sposoby na obejście tego. Czy podąża za demonami?
Grep strace
dla wywołań open()
lub exec*()
filtruj je w poszukiwaniu plików, które są skryptami, a możesz być gdzieś w pobliżu pełnego obrazu [dla tego jednego uruchomienia skryptu, który wykonałeś - nie licząc skryptów, które są wywoływane tylko w innych warunkach].
$ strace -ff ./testscript.sh |& grep 'open.*\.sh"'
open("./testscript.sh", O_RDONLY) = 3
[pid 24486] open("./CD-DVD Image erstellen.sh", O_RDONLY) = 3
Możesz więc być kreatywny ze swoimi rozwiązaniami, po prostu nie oczekuj takiego, który pasuje do każdej sytuacji.
truss
Wywołańexec
systemowych?