É possível interceptar chamadas para desvincular e redirecionar arquivos para / trash?

1

Gostaria de saber se existe uma maneira de criar uma lixeira interceptando chamadas para desvincular. Teoricamente, os arquivos seriam marcados com o tempo e excluídos após o período de tempo definido.

    
por Stuperfied 16.11.2018 / 06:01

1 resposta

1

Sim, existe. O mecanismo geral para esse tipo de coisa (sobrescrevendo uma função padrão) é chamado de LD_PRELOAD. A idéia geral é bastante simples, ao carregar bibliotecas na memória para um programa, qualquer que seja o primeiro a definir um dado nome de símbolo define o que esse símbolo faz. Assim, LD_PRELOAD permite que você diga ao vinculador dinâmico para carregar bibliotecas específicas antes de todas as outras (incluindo libc), o que significa que elas podem substituir funções específicas de bibliotecas que seriam carregadas posteriormente.

Exemplos de projetos amplamente utilizados que fazem uso de LD_PRELOAD incluem:

  • jemalloc Pode ser pré-carregado para permitir que você use o alocador de memória jemalloc com programas que não o usam explicitamente.
  • datefudge Permite que você falsifique a data e a hora do sistema.
  • libeatmydata Substitui sync() e chamadas relacionadas para não fazer nada, melhorando o desempenho de alguns aplicativos ao custo da segurança de dados.
  • dante Inclui um comando que usa LD_PRELOAD para ativar o uso do protocolo SOCKS para aplicativos que não suportam nativamente isso.

Há também uma biblioteca que faz exatamente o que você está perguntando chamado libtrash . A página oficial da web pode ser encontrada aqui . Eu não tenho certeza se isso funciona ou não, como eu nunca usei isso sozinho, mas houve um recente lançamento de uma nova versão, então parece que o autor ainda está mantendo pelo menos.

    
por 16.11.2018 / 21:44

Tags