J'avais l'impression que les "anciens" fichiers en /tmp
seront régulièrement supprimés. Cependant, il me semble que cela /tmp
ne fera que croître aussi longtemps qu'il le voudra, et rien ne sera supprimé. Certaines personnes disent qu'il vaut mieux laisser /tmp
seul et supprimer son contenu uniquement si le disque est plein.
Ma question est, est /tmp
vraiment conçue pour ne pas prendre soin d'elle-même? Quelles sont les meilleures pratiques?
/tmp
nettoyé après le redémarrage, mais cela dépend du système de fichiers qui y est monté. Quedf -h
dit-on?Réponses:
Pour répondre aux questions:
/tmp
censé être vidé automatiquement: Oui/tmp
régulièrement et manuellement: Non , votre système s'en occupera.Si vous vous demandez:
/tmp
pour une raison quelconque (besoin d'espace, vouloir supprimer les traces, etc.): Cela dépend , lisez la suite .La norme de hiérarchie du système de fichiers (FHS) stipule :
/var/tmp/
a un objectif similaire , mais ne doit pas être supprimé lors du redémarrage.Il n'est pas garanti que
/tmp/
ou/var/tmp/
sont nettoyés régulièrement. Cela peut dépendre de votre distribution et de vos paramètres, bien que la plupart des systèmes effectuent de temps en temps un nettoyage. Voir le commentaire demike
.Si vous devez supprimer un fichier dans / tmp , voyez d'abord si le fichier est en cours d'utilisation. Vous pouvez le faire facilement avec:
Si vous avez le droit de le faire, cela affichera le processus qui détient le descripteur de ce fichier, comme le nom du processus, le PID et le type du fichier. Pour afficher vraiment tous les processus, ajoutez
sudo
ou exécutez en tant qu'utilisateur root .vous montrera tous les fichiers
/tmp
et répertoires ci-dessous (+D
) qui sont actuellement ouverts. Bien sûr, vous ne devez pas supprimer ces fichiers.En fait, lorsque vous supprimez un fichier qui est toujours ouvert - si vous en avez le droit - il devient inaccessible à partir de l'espace de noms du système de fichiers, mais il existe toujours pour les processus qui ont un descripteur de fichier ouvert. Après avoir fermé cette poignée, le fichier n'est plus accessible pour ce processus et si aucun processus n'a plus ouvert le fichier, il est finalement supprimé. Un processus ne doit pas supposer que le fichier survit entre les
open
appels suivants , mais les programmeurs sont bâclés et on ne sait jamais. Pour cette raison, il n'est pas si intelligent de supprimer des fichiers qui sont encore utilisés par certains programmes.la source
Je pense que cela dépend du système d'exploitation. J'imagine que / tmp est généralement effacé au redémarrage, et en effet il ne serait pas sûr que le système se nettoie en cours de session car il ne saura pas quels fichiers sont actifs.
Si vous êtes courageux, vous voudrez peut-être lancer une commande dans crontab qui supprime les fichiers antérieurs à un certain âge, mais cela peut entraîner des problèmes s'il supprime les fichiers encore utilisés. Vous pourriez essayer une commande (je ne l'ai pas essayée) comme
Ce qui supprimera théoriquement tous les fichiers sous / tmp datant de plus de 10 jours.
la source
-r
à celaLes répertoires / tmp et / var / tmp sont nettoyés selon une planification normale. Cela peut dépendre de votre distribution. Sur mon système CentOS (un clone de RedHat), il y a un travail cron prévu pour exécuter tmpwatch , un nettoyeur de dir tmp, sur une base quotidienne . Les fichiers dans / var / tmp sont autorisés à rester un peu plus longtemps que les fichiers dans / tmp /. J'ai également vu des scripts qui élaguent / tmp (mais explicitement pas / var / tmp) lors d'un redémarrage, sachant qu'il ne peut rien y avoir de fichier ouvert car tous les processus sont nouveaux.
Donc, oui, / tmp a une maintenance à partir de scripts de base. Il peut toujours se remplir en dehors de ces périodes de maintenance. Si vous avez choisi de nettoyer les choses manuellement, la meilleure pratique sysadmin est d'être prudent. Sysadmin lore parle de liens symboliques dans / tmp pointant vers les fichiers système nécessaires qui ont été supprimés lorsque n00b sysadmins a exécuté un
find
script simple .la source
Sur CentOS, il existe un travail
/etc/cron.daily
appelétmpwatch
qui supprime récursivement les fichiers qui n'ont pas été consultés depuis un certain temps. Normalement, il est utilisé pour nettoyer les répertoires qui sont utilisés pour l'espace de stockage temporaire tel que / tmp.Ceci est le
/etc/cron.daily/tmpwatch
script/tmp
le contenu du répertoire n'est supprimé qu'au redémarrage du système, car le processus en cours d'exécution peut avoir accès aux fichiers à partir de ce répertoire.la source
Vous pouvez supprimer le contenu de
/tmp/
; mais le problème est que si vous avez un service qui écrit régulièrement/tmp/
et que vous supprimez les fichiers, vous pouvez faire planter ou interrompre le service jusqu'à ce qu'il soit redémarré.la source
Le FHS définit le
/tmp
répertoire comme "des fichiers temporaires (voir aussi / var / tmp), souvent non conservés entre les redémarrages du système", et/var/tmp
comme "des fichiers temporaires à conserver entre les redémarrages".De nos jours,
/tmp
étant un système de fichiers RAM (tmpfs) par défaut (bien que facultatif) dans de nombreuses distributions GNU / Linux, il/tmp
est effectivement non persistant.(Sans doute), les applications devraient gérer leurs fichiers temporaires en conséquence, ce qui, à mon avis, inclut les supprimer lorsque leur utilisation est terminée, et ne pas exiger des administrateurs qu'ils planifient d'éventuelles suppressions destructives.
la source
/tmp
lorsqu'ils en ont fini avec eux, ou lorsqu'ils se/tmp
terminent , mais il existe toujours un problème de fichiers laissés après une interruption anormale (crash) d'un programme.Si vous utilisez Debian (ou un dérivé comme Ubuntu), vous devriez regarder votre fichier / etc / default / rcS et ajuster la
TMPTIME
variable d'environnement. Par définition, ce qui réside dans / tmp n'a rien à voir ici au prochain redémarrage.je recommande
TMPTIME
variable sur un serveurla source
Les distributions sont bien sûr différentes, mais je m'attends à ce que les fichiers temporaires soient gérés automatiquement par le système prêt à l'emploi. Ils utiliseraient probablement des tâches cron ou le service systemd-tmpfiles-clean. Si vous êtes inquiet à propos de l'espace disque, il s'agit d'une commande utile pour jeter un œil à l'espace occupé par chaque dossier racine:
Pour voir si votre système utilise le service systemd pour gérer les fichiers temporaires, vous pouvez simplement essayer:
En bas, vous verrez quelque chose comme ce qui suit, qui vous indique la dernière exécution du service:
Notez que ce service se terminera dès qu'il aura terminé le nettoyage. Un service de minuterie est chargé de le déclencher régulièrement. Vous pouvez le vérifier avec:
Et vous devez vous attendre à quelque chose comme ceci:
Si vous regardez à nouveau le service réel responsable du nettoyage des fichiers, vous verrez que tout ce qu'il fait est exécuté:
Donc, vous pouvez soit exécuter cette commande directement, soit la faire correctement:
Qui exécutera la commande appropriée pour votre système. Cependant, vous devez savoir que ce n'est pas une commande "supprimer tous les fichiers temporaires maintenant". Il existe plusieurs fichiers de configuration qui contrôlent ce qui est réellement supprimé et quand, afin que les applications puissent configurer individuellement leurs fichiers temporaires.
Un endroit pour rechercher une gestion générique des fichiers temporaires pourrait être celui
/usr/lib/tmpfiles.d/tmp.conf
qui pourrait avoir les lignes pertinentes suivantes:Vous pouvez les remplacer par un temps plus court, si votre système continue de manquer d'espace, par exemple, pour:
Pour être sûr de ce que vous faites,
man tmpfiles.d
lisez le manuel. Encore une fois, j'ai trouvé l'approche présentée ici pertinente sur un CentOS (basé sur RedHat) et un système Ubuntu, mais je ne connais pas grand-chose aux autres distributions.la source