Comment nettoyer / 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

Comment nettoyer /tmp?

Rizhas
la source
1
Probablement répondu sur Unix & Linux . Je ne sais pas si cela fait de cette question un doublon.
RDC
Nope @drc mais bonne trouvaille. J'ai utilisé un lien à partir de là pour mettre à jour ma réponse.
Rinzwind
1
Voir aussi Comment le répertoire / tmp est-il nettoyé?
Réintégrer Monica - M. Schröder le

Réponses:

117

/ tmp est supposé être nettoyé au redémarrage, mais si vous ne redémarrez pas (ce qui est normal pour les serveurs), le nettoyage n'aura pas lieu

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

supprimera tous les fichiers et dossiers de plus de 10 jours. vous voudrez peut-être l'ajouter au cron quotidien.


MISE À JOUR

Dans les commentaires ci-dessous, @sfussenegger recommande un format légèrement différent de cette commande, qui peut être mieux adapté à vos besoins et au système sur lequel vous travaillez.

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

Ici, la commande utilise sudopour s'assurer que tout est supprimé (ou vous pouvez l'exécuter en tant que root), opérant sur des fichiers qui n'ont pas été accédés depuis plus de 10 jours et ne supprime que les fichiers, pas les dossiers . Il utilise également -deletepour éviter d'avoir à exécuter des rmcommandes

Andrei R
la source
2
au lieu de l'heure de création (-ctime), vous pouvez utiliser le temps d'accès (-atime) à la place - bien sûr que si le système de fichiers conserve ces informations (recherchez noatime dans / etc / fstab)
sfussenegger
7
ok, s'il vous plait, gardez avec moi, mais il y a une dernière chose: vous voulez rechercher des fichiers uniquement ( -type f). sinon, vous constaterez peut-être que le parent d'une arborescence de répertoires n'a pas été utilisé depuis un moment et supprimez tout son contenu potentiellement utilisé. donc la dernière commande que je recommanderais estsudo find /tmp -type f -atime +10 -delete
sfussenegger
2
@sfussenegger, vous pourriez peut-être promouvoir vos commentaires en réponse? Je pense que c'est mieux que d'être "caché" dans les commentaires.
Jonathan
34

Vous pouvez supposer que tout ce qui se trouve dans un répertoire tmp (/ tmp / / usr / tmp, etc.) peut être supprimé. AVANT de commencer à supprimer, arrêtez tous les programmes et services que vous utilisez depuis / tmp / peut être utilisé par les programmes pour stocker temporairement les informations de cette session. Alors faites un sudo service mysql stopet sudo service apache2 stopsi vous avez un mysql et / ou apache en cours d'exécution. Le nom des fichiers du répertoire / tmp / indique le plus souvent à quel programme ils appartiennent.

Donc, en ligne de commande ...

cd /tmp/
pwd
sudo rm -r *

va vider le répertoire / tmp / et supprimer tous les fichiers et sous-répertoires. Veillez à taper correctement. La commande pwddans ce n'est pas nécessaire mais devrait montrer /tmp.

Si vous le souhaitez de manière interactive (vous devez donc confirmer la suppression):

cd /tmp/
sudo rm -ri *

Il convient également de noter qu’un redémarrage effacera / tmp ainsi, comme indiqué ci-dessous: Comment le répertoire / tmp est-il nettoyé? Donc, si / tmp / est plein de fichiers après un redémarrage, vous devez déterminer l’origine de ces fichiers.

Je voudrais également préciser que 1 Mo pour / tmp ne représente pas beaucoup d’espace. Utilisez-vous MySQL? Voir https://unix.stackexchange.com/a/76058/10017 pour savoir comment résoudre ce problème (merci @drc).

Rinzwind
la source
2
le "sans dommage" est vrai pour les fichiers datant d'avant le dernier redémarrage. Sinon, il pourrait être utilisé par un programme actuel et (pour ce programme) pourrait causer des problèmes ... Par exemple, j'ai des scripts qui créent des fichiers dans / tmp, puis je les relis pour effectuer la ou les prochaines étapes du traitement. . les supprimer / les tronquer entre les deux perturbera l'action du programme (et pourrait même conduire à des résultats dangereux, en fonction de l'utilisation de ces fichiers)
Olivier Dulac
... donc utiliser un who –b(date du dernier démarrage), puis créer un fichier / boottime daté au moment du démarrage ( touch ....... /boottime), permettra de faire une sauvegarde en find /tmp -type f \( ! -newer /boottime \) -delete \;ne supprimant que les fichiers antérieurs au dernier démarrage
Olivier Dulac
Puis-je utiliser ces commentaires pour développer la réponse? Rappelez-vous: le / tmp ici provient probablement de mysql.
Rinzwind
4
En tant que personne utilisant mktemprégulièrement dans mes scripts, je suis fortement en désaccord avec la déclaration "sans dommage".
Hytromo
2
Si /tmpcontient quelque chose de plus ancien que le dernier redémarrage, les scripts de démarrage n'ont pas terminé leur travail.
Simon Richter
10

Le tmpreaperprogramme peut être utilisé pour nettoyer / tmp périodiquement. Ce programme supprime tout ce qui n’a pas été consulté dans un laps de temps donné, généralement deux semaines. Pour que cela fonctionne correctement, l' atimesoption activée doit être activée sur le système de fichiers . Si vous utilisez un fichier tmpfs , ce qui semble être le cas, tout devrait bien se passer.

Bien sûr, le redémarrage efface également / tmp , mais ce serait ennuyeux.

Simon Richter
la source
Il est surprenant que ce ne soit pas une option standard dans Ubuntu et Debian. Il est assez courant pour moi de rencontrer des processus utilisateur relativement non privilégiés en train de remplir / tmp.
Sage
1
Oui, mais cette stratégie doit être définie par un administrateur système. Si vous avez des services de longue durée qui s’attendent à ce que leurs données soient conservées, tout défaut sans "nettoyage" serait dangereux.
Simon Richter
7

Le répertoire /tmpsignifie temporaire.

Ce répertoire stocke des données temporaires. Vous n'avez rien à supprimer, les données qu'il contient sont automatiquement supprimées après chaque redémarrage.

Toujours si vous voulez supprimer les données présentes, utilisez

sudo rm -r /tmp/*

sa suppression ne posera aucun problème car il s'agit de fichiers temporaires.

Tarun
la source
9
Ils sont temporaires dans le sens où ils ne sont plus nécessaires après le redémarrage. Cela ne signifie pas pour autant qu'ils ne sont plus nécessaires ou qu'ils ne le seront pas dans 5 minutes
Daniel Serodio
5
Ce n'est pas vrai que cela "ne posera aucun problème". Je l'ai fait une fois avant que je sache mieux et essentiellement arrosé ma machine.
Kyle Strand
Voir aussi unix.stackexchange.com/q/11235/38050
Kyle Strand
4

Soyez prudent avant d'exécuter une commande comme rm -r ./*. Une fois que vous l'exécutez, il sera très difficile, voire impossible, de récupérer des données.

Tout sera supprimé. Assurez-vous que le répertoire que vous supprimez est correct.

Il existe un moyen plus sûr de gérer les choses.

# sudo rm -r /tmp/*

Ainsi, lorsque vous exécutez cette commande par inadvertance à partir de votre shell history, il ne supprimera pas les mauvais fichiers (sauf si vous les conservez /tmp).


la source
2

Le /tmprépertoire a été effacé par défaut à chaque démarrage, car TMPTIMEc’est 0par défaut.

Avinash Raj
la source
1

Si votre montage “/ tmp” sur un système de fichiers Linux est monté en débordement (souvent de 1 Mo), cela est probablement dû au fait que vous n'avez pas spécifié “/ tmp” comme étant sa propre partition et que votre système de fichiers racine s'est rempli et que “/ tmp” a été ajouté. remonté comme un repli. Pour résoudre ce problème une fois que vous avez libéré de l’espace, démontez simplement la solution de repli et elle doit remonter à son point initial:

sudo umount overflow

si l'appareil est occupé, utilisez

sudo umount -l overflow
ck reddy
la source