Determina os arquivos / diretórios alterados como resultado da execução de um comando

2

Se eu executar um comando no bash, existe alguma maneira de determinar quais arquivos e diretórios foram modificados como resultado da execução desse comando?

Por exemplo, se eu executar:

export $MYDIR="/home/users/myuser/"
touch $MY_DIR/*

Gostaria de poder listar os arquivos que foram modificados:

/home/users/myuser/file1
/home/users/myuser/file2
/home/users/myuser/file3

Mas não especificamente para touch . Eu gostaria que a solução fosse geral para qualquer comando .

Isso é possível?

    
por moebius 21.08.2018 / 08:33

2 respostas

2

Existem algumas ferramentas que gosto bastante para esse tipo de uso:

  • maybe executará um comando, mas falsificará qualquer modificação no sistema de arquivos (finja que ele foi bem-sucedido sem executá-lo e registre-o) , em seguida, exiba uma lista de todas as alterações; você pode então decidir se quer executar o comando novamente - não é perfeito, veja a lista de problemas , mas é bom o suficiente muitos casos;
  • LoggedFS fornece uma sobreposição do sistema de arquivos de log, que permite que todas as alterações em um sistema de arquivos sejam processadas, mas de forma configurável ( consulte Sintaxe do arquivo de configuração do LoggedFS para obter detalhes).

Outras ferramentas comumente usadas para rastrear operações do sistema de arquivos incluem inotifywait e auditd ; consulte Monitoramento de acesso a arquivos do Linux para obter detalhes.

    
por 21.08.2018 / 10:17
1

Para uma solução básica / simplista, que tal criar primeiro um arquivo e depois, após a sua operação, executar um find para exibir arquivos mais novos que o dito arquivo?

touch /tmp/myfile
( do stuff )
find ${MY_DIR} -newer /tmp/myfile

Como aponta @roaima, isso apenas endereça o requisito "quais arquivos e diretórios foram modificados como resultado": ele não identificaria arquivos que foram removidos.

    
por 21.08.2018 / 10:10