Como limpar / tmp?

74
rizhas@rizhas-laptop:~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda7        67G   58G  5,2G  92% /
none            4,0K     0  4,0K   0% /sys/fs/cgroup
udev            1,5G   12K  1,5G   1% /dev
tmpfs           303M  1,2M  302M   1% /run
none            5,0M     0  5,0M   0% /run/lock
none            1,5G  348K  1,5G   1% /run/shm
none            100M   80K  100M   1% /run/user
overflow        1,0M  1,0M     0 100% /tmp
overflow        1,0M  1,0M     0 100% /tmp

Como limpar /tmp?

Rizhas
fonte
11
Provavelmente respondeu em Unix e Linux . Não tenho certeza se isso faz desta pergunta uma duplicata.
drc 21/11
nope @drc mas bom achado. Usei um link para atualizar minha resposta.
Rinzwind
11
Consulte também Como é limpo o diretório / tmp?
Reinstate Monica - M. Schröder

Respostas:

117

/ tmp deve ser limpo na reinicialização, mas se você não reiniciar (o que é normal para servidores), a limpeza não ocorrerá

find /tmp -ctime +10 -exec rm -rf {} +

excluirá todos os arquivos e pastas com mais de 10 dias. convém adicioná-lo ao cron diário.


ATUALIZAR

Nos comentários abaixo, o @sfussenegger recomenda um formato ligeiramente diferente deste comando que pode ser mais adequado às suas necessidades e ao sistema em que você está operando.

sudo find /tmp -type f -atime +10 -delete

Aqui, o comando está sendo usado sudopara garantir que tudo seja excluído (ou você pode executá-lo como root), operando em arquivos que não foram acessados por mais de 10 dias e exclui apenas arquivos, não pastas . Ele também usa -deletepara evitar ter que executar o rmcomando

Andrei R
fonte
2
em vez de tempo de criação (-ctime), você pode querer usar o tempo de acesso (-atime) em vez -, naturalmente, apenas se o sistema de arquivos mantém esta informação (verificar noatime em / etc / fstab)
sfussenegger
7
ok, por favor, tenha paciência comigo, mas há mais uma coisa: você deseja pesquisar apenas arquivos ( -type f). caso contrário, você poderá descobrir que o pai de uma árvore de diretórios não foi acessado por um tempo e excluir todo o conteúdo que ainda poderia estar em uso. de modo que o comando final eu recomendo ésudo find /tmp -type f -atime +10 -delete
sfussenegger
2
@sfussenegger, talvez você possa promover seus comentários a uma resposta? Eu acho que é melhor do que estar "escondido" nos comentários.
Jonathan
34

Você pode assumir que qualquer coisa dentro de um diretório tmp (/ tmp / / usr / tmp etc) pode ser excluída. ANTES de começar a excluir, interrompa todos os programas e serviços que você está usando, já que / tmp / pode ser usado por programas para armazenar temporariamente informações para essa sessão. Então faça a sudo service mysql stope sudo service apache2 stopse você tiver um mysql e / ou apache em execução. O nome dos arquivos no diretório / tmp / na maioria das vezes fornece uma pista de qual programa eles pertencem.

Então, na linha de comando ...

cd /tmp/
pwd
sudo rm -r *

esvaziará o diretório / tmp / e removerá todos os arquivos e subdiretórios. Cuidado para digitar corretamente. O comando pwdnão é necessário, mas deve aparecer /tmp.

Se você deseja interativamente (é necessário confirmar a exclusão):

cd /tmp/
sudo rm -ri *

Também é importante notar que uma reinicialização também limpará o / tmp, como mostrado aqui: Como o diretório / tmp é limpo? Portanto, se / tmp / estiver cheio de arquivos após uma reinicialização, você precisará investigar a origem desses arquivos.

Eu também gostaria de afirmar que 1 Mb para / tmp não é muito espaço. Você está usando o MySQL? Consulte https://unix.stackexchange.com/a/76058/10017 sobre como corrigir isso (obrigado @drc)

Rinzwind
fonte
2
o "sem nenhum dano" é verdadeiro para arquivos que datam antes da última reinicialização. Caso contrário, ele poderá estar em uso por um programa atual e (para esse programa) poderá causar problemas ... por exemplo, eu tenho scripts que criam arquivos em / tmp e, em seguida, os relê para executar as próximas etapas do processamento . apagar / truncar-los entre irá interromper as ações do programa (e pode mesmo conduzir a resultados perigosos, dependendo do que esses arquivos são usados para)
Olivier Dulac
... portanto, usar um who –b(data da última inicialização) e criar um arquivo / horário de validade no momento da inicialização ( touch ....... /boottime) permitirá que se faça um seguro find /tmp -type f \( ! -newer /boottime \) -delete \;, excluindo apenas arquivos anteriores à última inicialização
Olivier Dulac
Posso usar esses comentários para expandir a resposta? Lembre-se: o / tmp aqui provavelmente é do mysql.
Rinzwind
4
Como pessoa que utiliza mktempregularmente meus scripts, discordo totalmente da declaração "sem nenhum dano".
Hytromo #
2
Se /tmpcontiver algo mais antigo que a última reinicialização, os scripts de inicialização não realizaram seus trabalhos.
Simon Richter
10

O tmpreaperprograma pode ser usado para limpar / tmp periodicamente. Este programa exclui tudo o que não foi acessado em um determinado período de tempo, normalmente duas semanas. Para que isso funcione corretamente, o sistema de arquivos em que ele está deve ter a atimesopção ativada. Se você usa um tmpfs , o que parece estar fazendo, você deve estar bem.

Obviamente, reiniciar também limpa / tmp , mas isso seria chato.

Simon Richter
fonte
É surpreendente para mim que essa não seja uma opção padrão no Ubuntu e Debian. É bastante comum eu encontrar processos de usuário relativamente sem privilégios preenchendo / tmp.
sage
11
Sim, mas é uma política que precisa ser definida por um administrador do sistema. Se você possui serviços de longa duração que esperam que seus dados sejam mantidos, qualquer padrão, mas "sem limpeza", seria perigoso.
Simon Richter
7

O diretório /tmpsignifica temporário.

Este diretório armazena dados temporários. Você não precisa excluir nada dele, os dados contidos nele são excluídos automaticamente após cada reinicialização.

Ainda assim, se você deseja excluir os dados presentes, use

sudo rm -r /tmp/*

excluir dele não causará nenhum problema, pois esses são arquivos temporários.

Tarun
fonte
9
Eles são temporários no sentido de que eles não são necessários após a reinicialização, isso não significa que eles não são necessários agora ou que não será necessário em 5 minutos
Daniel Serodio
5
Não é verdade que isso "não cause nenhum problema". Eu fiz isso uma vez antes de conhecer melhor e basicamente mangueira minha máquina.
Kyle Strand
Veja também unix.stackexchange.com/q/11235/38050
Kyle Strand
4

Tenha cuidado antes de executar um comando como rm -r ./*. Depois de executá-lo, será muito difícil ou impossível recuperar quaisquer dados.

Tudo será removido. Verifique se o diretório que você está excluindo está correto.

Existe uma maneira mais segura de lidar com as coisas.

# sudo rm -r /tmp/*

Dessa forma, quando você acidentalmente executa esse comando de dentro do seu shell history, ele não exclui os arquivos errados (a menos que você os esteja mantendo /tmp).


fonte
2

O /tmpdiretório foi limpo por padrão a cada inicialização, porque TMPTIMEé 0por padrão.

Avinash Raj
fonte
1

Se sua montagem "/ tmp" em um sistema de arquivos linux estiver montada como excedente (geralmente dimensionada em 1 MB), isso provavelmente ocorrerá porque você não especificou "/ tmp" como sua própria partição e seu sistema de arquivos raiz foi preenchido e "/ tmp" foi remontado como um substituto. Para corrigir isso depois de liberar espaço, desmonte o fallback e ele deverá remontar no ponto original:

sudo umount overflow

se o dispositivo estiver ocupado, use

sudo umount -l overflow
ck reddy
fonte