Existe uma maneira de excluir todos os arquivos / diretórios criados pelo programa?

1

Um programa que eu instalei arquivos e diretórios splattered em lugares diferentes. Eu estou tendo que remover manualmente esses arquivos e diretórios. Eu sei que você pode excluir arquivos e diretórios criados por um usuário como este:

# find /home -user student -exec rm -rf {} \;

Existe uma maneira de fazer o mesmo para um programa, especificando o nome do programa que você quer que seus arquivos e diretórios sejam removidos?

    
por MyWrathAcademia 11.07.2018 / 12:59

4 respostas

2

Como disse Hans-Martin Mosner em sua resposta , não há informações armazenadas que identifiquem qual programa criou ou modificou um arquivo ou diretório específico.

No entanto, você pode usar find para encontrar coisas que um programa possivelmente criou ou modificou. Você pode fazer isso primeiro criando um "arquivo de timestamp" e depois executar o programa. Após a execução, find pode ser solicitado a localizar todos os arquivos modificados com base em seus registros de data e hora em relação ao arquivo de registro de data e hora.

  1. Criar arquivo de timestamp:

    touch stamp
    
  2. Execute o programa.

  3. Execute find para localizar itens cuja hora de modificação é mais recente que o arquivo de registro de data e hora:

    find / -newer stamp
    

    ou, se você souber que usuário supostamente possui os arquivos,

    find / -user someuser -newer stamp
    

Observe que o comando find pode levar um tempo considerável para ser executado, a menos que você possa restringir / a um subdiretório específico em que as modificações possam ter ocorrido. Observe também que qualquer nome de caminho que o comando find acima produz pode não ter sido tocado pelo programa específico . Qualquer número de outros programas pode estar em execução desde que o arquivo stamp foi criado e também pode ter criado ou alterado arquivos.

    
por 11.07.2018 / 14:22
1

Se você sabe antes de executar o programa, então você pode marcar o programa set-gid para um grupo especial.

Talvez você possa fazer isso e executá-lo novamente, para ver o tipo de lugar que ele coloca.

    
por 11.07.2018 / 17:43
0

Não, o sistema de arquivos não armazena qual programa criou um arquivo. Você precisa selecioná-los manualmente. Se a primeira execução do programa foi muito recente, você pode usar find para pré-selecionar arquivos que poderiam ter sido criados por ele.

    
por 11.07.2018 / 13:02
0

Se você souber de antemão que quer ficar de olho no que um programa faz uma interface de kernel como sysdig ou SystemTap poderia registrar uma trilha de auditoria (ou possivelmente strace , mas isso seria lento e exigiria um wrapper perfeito em torno do programa a ser rastreado e esperamos que nenhum sudo seja executado ...). Você também precisaria considerar o que acontece quando algum outro programa cria saída sob o programa em questão: o que qualquer processo filho também deve ser rastreado?

perl -e 'qx(echo subshell-io > foo)'

Uma trilha de auditoria de cada arquivo tocado por cada programa (além de outros metadados, como o usuário e grupo (s), pai / mãe, etc) certamente seria possível. Isto pode, no entanto, ser dispendioso para configurar, dispendioso de gerar e dispendioso de manter. Provavelmente precisaria de algum meio de filtrar registros para excluir (alguns, mas talvez não todos) /tmp gravações de diretório, para possivelmente acumular várias chamadas passwd.tmp / rename("passwd.tmp","passwd") de gravação em uma operação lógica, também como você lida com as caso em que o programa em que você está interessado modifica, digamos /etc/passwd (entre muitos outros possíveis arquivos compartilhados do sistema operacional) que você provavelmente não desejará remover cegamente ao limpar após o programa ... ou como você lida com o I / O delegado? O onde seu programa usa o dbus e então algum outro processo devido a alguma mensagem não-I / O aleatória sobre o dbus, gera E / S em outro lugar devido ao seu programa ...

    
por 11.07.2018 / 16:30