Acesso a arquivos / modificado em um processo / script

1

Eu estarei recebendo alguns scripts de shell que eu meio que não sei o que eles farão. Mas eu preciso saber quais operações de E / S o script executa (por exemplo, arquivos que eles lêem / acessam, arquivos que eles escrevem, pastas criadas ... etc).

Um exemplo é usar strace da seguinte forma:

Script INPUT: g++ -Wall a.cpp -o hello

Vou executá-lo como: sudo strace -f -e trace=open g++ -Wall a.cpp -o hello 2> output.txt

* O QUE EU QUERO: * output.txt terá o rastreio e quais arquivos foram acessados (a.cpp e bh que são usados em a.cpp e output hello)

... 
[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
...

Problema

1- strace não manipula pipe , portanto, se eu obtiver um comando como mkdir d2 | cp *.c d2/ , ele detectará apenas o primeiro comando mkdir d2 .

2- strace fornece informações demais, o que é bom, mas se algo for mais concreto, seria ótimo!

Eu procurei por outras ferramentas e utils, e a maioria deles listaria informações para um processo em execução e eu não quero isso porque o script será executado imediatamente e nada estaria na lista de processos no Ubuntu.

Alguma idéia de como eu posso conseguir isso no Ubuntu?

    
por Jafar Kofahi 20.12.2013 / 19:12

1 resposta

1

Em relação ao problema 1,

a razão é que strace não inicia o processo com um shell, por questões de segurança.

Para corrigir isso, você precisa quebrar o pipe em bash -c ' ... ' , substituindo bash pelo seu shell:

sudo strace -f -e trace=open bash -c 'mkdir d2 | cp *.c d2/' hello 2> output.txt
    
por kiri 10.01.2014 / 22:25