Diretório $ HOME limpo

16

Durante alguns anos, no meu $HOMEdiretório, muitos arquivos e diretórios ocultos apareceram.

Eu gostaria de excluir continuamente os desnecessários.

Como posso descobrir quais aplicativos criaram esses arquivos e diretórios ocultos.

Como posso ter certeza de que é seguro remover os arquivos e diretórios ocultos e nada importante será perdido e nada dependendo deles não parará de funcionar?

xralf
fonte
2
Verificar quais aplicativos criaram as pastas e arquivos pode ser complicado. Geralmente, correlacionar os arquivos associados a aplicativos criados por desenvolvedores decentes é direto, mas esse nem sempre é o caso. Se você encontrar uma boa resposta, eu gostaria de saber o que é.
0xSheepdog
2
Auditoria do 0xSheepdog para o futuro - para a história, praticamente nada.
Jenny D
Verifique se você possui um backup dos arquivos antes de removê-los. (Isto inclui verificar se você pode restaurar os arquivos.)
Jenny D
1. Você está usando Linux? Qual versão do kernel? (somente maior / menor) 2. O SELinux está ativado ou você pode ativá-lo? 3. Você tem acesso root?
Otheus 16/10

Respostas:

15

Você pode apenas substituí-los temporariamente.

cd ~
mkdir .trash
find . ! -name . -prune ! -type d -atime +365 -exec \
    sh -c 'touch -a -- "$@"
           mv -- "$@" ~/.trash
    ' --   {} +

Isso encontrará todos os arquivos em seu $HOMEdiretório - sem recorrer a diretórios filhos - que não foram acessados ​​por um ano. Ele atualizará o tempo de acesso de todos eles agora e depois os moverá para um diretório chamado .trash. Se você encontrar algum problema entre o momento em que o executa e o momento em que decide começar a excluir arquivos antigos ~/.trash, tente mover alguns deles de volta e ver se algum deles foi colocado na lixeira.

mikeserv
fonte
Embora isso tecnicamente não responda à pergunta, acho que é uma boa solução alternativa.
Jesse K
1
@JesseKeilson - eu acho que não tecnicamente responder à pergunta: Como posso ter certeza de que é seguro para remover os arquivos e diretórios ocultos e nada de importante será perdido e nada dependendo deles não vai parar de trabalhar?
mikeserv
1
Alguns sistemas de arquivos são montados com a opção "noatime". O atime nunca será modificado, mesmo que o mtime ou o ctime sejam. Isso fará com que a sua localização mova incorretamente arquivos recentes.
Adrien M.
@AdrienM. - isso é verdade. de uma maneira geral, porém, todos os aspectos sãos em que entro em contato com os usos são relatimesubstituídos. from man mount:: relatimeatualiza os tempos de acesso do inode em relação à modificação ou alteração da hora. O tempo de acesso é atualizado apenas se o tempo de acesso anterior for anterior ao tempo de modificação ou alteração atual. (Semelhante a noatime, mas não quebra muttou outros aplicativos que precisam saber se um arquivo foi lido desde a última vez em que foi modificado.) E, de qualquer maneira, use -me -mtimetrabalhe com modtime. ou o que você quiser.
mikeserv
Ele não responde à ' e diretórios parte "da questão Por que você precisa para andar cada .directory, e verificar todos os arquivos são mais velhos do que um ano..
naught101
6

Se você é o root do seu sistema, pode usar o recurso de kernel de auditoria para obter o máximo de informações sobre quem / quando / o que acessou / criou / modificou arquivos. veja este tutorial para exemplos com sabor debian

Se você não tiver acesso root, poderá usar um crontab ou um script com um loop infinito + suspensão para executar arquivos lsof & grep em seu homedir. Veja a página de manual de lsof . No entanto, ele exibirá apenas seus aplicativos que possuem um editor de arquivos aberto no momento em que você inicia o lsof. Se um aplicativo abrir um arquivo, editá-lo e fechá-lo, você não verá essa alteração em lsof.

um one-liner como este deve fazer o trabalho: lsof -u $(id -u) 2>/dev/null |grep -P $HOME'/[^\s]*$'

Outra maneira é usar a API do kernel inotify para verificar quando um arquivo está sendo acessado. Infelizmente, é um sistema assíncrono e você não terá detalhes como "qual aplicativo", "precisamente quando", "qual usuário". Você terá apenas um retorno de chamada sobre "este arquivo foi modificado / acessado ...". Alguns aplicativos (Inotify, FAM, gamin) fornecem acesso simples à API

Adrien M.
fonte
Eu apenas tentei usar inotifypara disparar lsof. O sistema é muito rápido para que essa idéia funcione: o processo geralmente desaparece ou fechou o arquivo antes que o lsof possa ser executado. Em alguns casos, isso ainda pode funcionar, mas provavelmente muito poucos.
Otheus 16/10
auditd É o único sistema que fornece todos os detalhes, sem perder nada, pois está usando um caminho de código específico no kernel. Todas as outras ferramentas perderão informações, perderão dados porque o processo será encerrado / fecharam o fd.
Adrien M.
Acordado. Eu estava apenas testando o inotify e confirmando que ele realmente não fará o trabalho necessário aqui.
Otheus 16/10
3

Você pode procurar atimee remover arquivos não utilizados por um longo período de tempo (desde que você não configurou o sistema para não usar atime), mas isso é bastante arriscado (veja tmpreaperse você deseja seguir esse caminho).

Em vez disso, sugiro o Bleachbit , um programa interativo da GUI para remover a sujeira.

Radovan Garabík
fonte