it-swarm.com.de

Sollen wir den Inhalt von / tmp manuell löschen?

Ich hatte den Eindruck, dass "alte" Dateien in /tmp regelmäßig gelöscht werden. Es scheint mir jedoch, dass /tmp nur so lange wächst, wie es will, und nichts wird gelöscht. Einige Leute sagen, es ist besser, /tmp in Ruhe zu lassen und seinen Inhalt nur dann zu löschen, wenn die Festplatte voll ist.

Meine Frage ist, ist /tmp wirklich so konzipiert, dass er sich nicht um sich selbst kümmert? Was sind die Best Practices?

26
IMB

Um die Fragen zu beantworten:

  • Soll /tmp automatisch geleert werden: Ja
  • Sollen wir Dateien in /tmp regelmäßig und manuell löschen: Nein , Ihr System kümmert sich darum.

Wenn Sie sich fragen dürfen:

  • Kann ich Dateien aus /tmp löschen, aus welchem ​​Grund auch immer (Speicherplatz benötigen, Spuren entfernen möchten usw.): Es kommt darauf an , weiterzulesen .

Der Filesystem Hierarchy Standard (FHS) gibt an :

Das Verzeichnis/tmp muss für Programme verfügbar sein, die temporäre Dateien benötigen.

Programme dürfen nicht davon ausgehen, dass Dateien oder Verzeichnisse in/tmp zwischen Aufrufen des Programms erhalten bleiben.

/var/tmp/ hat einen ähnlichen Zweck , aber darf während des Neustarts nicht gelöscht werden.

Es ist nicht garantiert , dass /tmp/ oder /var/tmp/ regelmäßig bereinigt werden. Dies kann von Ihrer Distribution und Ihren Einstellungen abhängen, obwohl die meisten Systeme von Zeit zu Zeit eine Bereinigung durchführen. Siehe Kommentar von mike.

Wenn Sie eine Datei in /tmp löschen müssen, prüfen Sie zuerst, ob die Datei verwendet wird. Das geht ganz einfach mit:

lsof /tmp/file_to_delete

Wenn Sie dazu berechtigt sind, wird der Prozess angezeigt, der das Handle für diese Datei enthält, z. B. Prozessname, PID und Dateityp. Um wirklich alle Prozesse anzuzeigen, müssen Sie Sudo voranstellen oder als Benutzer root ausführen.

lsof +D /tmp

zeigt Ihnen alle Dateien in /tmp und den Verzeichnissen darunter (+D), die derzeit geöffnet sind. Natürlich sollten Sie diese Dateien nicht löschen.

Wenn Sie eine noch geöffnete Datei löschen, ist der Zugriff über den Dateisystem-Namespace zwar nicht mehr möglich, sie ist jedoch für Prozesse mit einem geöffneten Datei-Handle weiterhin vorhanden. Nach dem Schließen dieses Handles kann auf die Datei für diesen Prozess nicht mehr zugegriffen werden. Wenn kein Prozess die Datei mehr geöffnet hat, wird sie endgültig gelöscht. Ein Prozess sollte nicht davon ausgehen, dass die Datei zwischen nachfolgenden open -Aufrufen überlebt, aber Programmierer sind schlampig und Sie wissen es nie. Aus diesem Grund ist es nicht so clever , Dateien zu löschen, die noch von einigen Programmen verwendet werden.

27
trapicki

Ich denke das ist OS varientabhängig. Ich stelle mir vor, dass/tmp normalerweise beim Neustart gelöscht wird, und in der Tat wäre es für das System nicht sicher, sich während der Sitzung selbst zu bereinigen, da es nicht weiß, welche Dateien aktiv sind.

Wenn Sie mutig sind, möchten Sie möglicherweise einen Befehl in crontab ausführen, der Dateien löscht, die älter als ein bestimmtes Alter sind. Dies kann jedoch zu Problemen führen, wenn noch verwendete Dateien gelöscht werden. Sie könnten versuchen, einen Befehl (ich habe es nicht versucht) wie

 find/tmp -type f -ctime +10 -exec rm {} + 

Damit werden theoretisch alle Dateien unter/tmp entfernt, die älter als 10 Tage sind.

4
davidgo

Die Verzeichnisse/tmp und/var/tmp werden nach einem normalen Zeitplan bereinigt. Dies kann von Ihrer Distribution abhängen. Auf meinem CentOS-System (ein Klon von RedHat) ist ein Cron-Job geplant, um tmpwatch , einen tmp dir cleaner, auf einem Tagesablauf . Dateien in/var/tmp dürfen etwas länger als Dateien in/tmp/bleiben. Ich habe auch Skripte gesehen, die/tmp (aber ausdrücklich nicht/var/tmp) bei einem Neustart bereinigen, in dem Wissen, dass nichts diese Datei offenhalten kann, da alle Prozesse neu sind.

Also, ja,/tmp wird von einfachen Skripten aus gewartet. Es kann sich außerhalb dieser Wartungszeiten noch füllen. Wenn Sie Dinge manuell bereinigen möchten, sollten Sie vorsichtig sein. Sysadmin Lore spricht über Symlinks in/tmp, die auf notwendige Systemdateien verweisen, die gelöscht wurden, als n00b-Sysadmins ein einfaches find-Skript ausführten.

1
Rich Homolka

Auf CentOS gibt es einen Job in /etc/cron.daily mit dem Namen tmpwatch, der rekursiv Dateien entfernt, auf die für einen bestimmten Zeitraum nicht zugegriffen wurde. Normalerweise werden damit Verzeichnisse bereinigt, die für temporären Speicherplatz wie/tmp verwendet werden.

Dies ist das /etc/cron.daily/tmpwatch-Skript

 #! /bin/sh[.____.[flags=-umc[.____.[/usr/sbin/tmpwatch "$ flags" -x /tmp/.X11-unix -x /tmp/.XIM-unix\
 -x /tmp/.font-unix -x /tmp/.ICE-unix -x /tmp/.Test-unix\
 -X '/ tmp/hsperfdata_ *' 10d /tmp
/usr/sbin/tmpwatch "$ flags" 30d /var/tmp[.____.‹für d in/var/{cache/man, catman}/{cat?, X11R6/cat ?, local/cat?} ; do 
 if [-d "$ d"]; dann 
/usr/sbin/tmpwatch "$ flags" -f 30d "$ d" 
 fi 
 done 
 

Der Inhalt des Verzeichnisses /tmp wird nur beim Neustart des Systems gelöscht, da der laufende Prozess möglicherweise auf Dateien in diesem Verzeichnis zugreift.

1
max

Wenn Sie Debian (oder ein Derivat wie Ubuntu) verwenden, sollten Sie sich Ihre /etc/default/rcS -Datei ansehen und die Umgebungsvariable TMPTIME anpassen. Per Definition hat das, was sich in/tmp befindet, beim nächsten Neustart hier nichts zu tun.

Ich empfehle

  • verwenden der Variablen TMPTIME auf einem Server
  • mount/tmp als tmpfs (im RAM) auf einem Desktop (für mehr Geschwindigkeit)
0
maxxvw

Die Distributionen sind natürlich unterschiedlich, aber ich würde erwarten, dass temporäre Dateien automatisch vom System verwaltet werden. Sie würden wahrscheinlich entweder Cron-Jobs oder den systemd-tmpfiles-clean-Dienst verwenden. Wenn Sie sich Gedanken über den Speicherplatz machen, ist dies ein nützlicher Befehl, um zu prüfen, wie viel Speicherplatz jeder Stammordner belegt:

du -hs /* | sort -h

Um festzustellen, ob Ihr System den systemd-Dienst zum Verwalten temporärer Dateien verwendet, können Sie Folgendes versuchen:

systemctl status systemd-tmpfiles-clean

Unten sehen Sie so etwas wie das Folgende, das Ihnen sagt, wann der Service das letzte Mal ausgeführt wurde:

systemd-tmpfiles-clean.service - Cleanup of Temporary Directories
   Loaded: loaded (/usr/lib/systemd/system/systemd-tmpfiles-clean.service; static; vendor preset: disabled)
   Active: inactive (dead) since Wed 2018-07-18 15:43:36 IST; 18h ago
     Docs: man:tmpfiles.d(5)
           man:systemd-tmpfiles(8)
  Process: 30495 ExecStart=/usr/bin/systemd-tmpfiles --clean (code=exited, status=0/SUCCESS)
 Main PID: 30495 (code=exited, status=0/SUCCESS)

Jul 18 15:43:36 Host-name systemd[1]: Starting Cleanup of Temporary Directories...
Jul 18 15:43:36 Host-name systemd[1]: Started Cleanup of Temporary Directories.

Beachten Sie, dass dieser Dienst beendet wird, sobald die Bereinigung abgeschlossen ist. Ein Zeitgeberdienst ist dafür verantwortlich, ihn regelmäßig auszulösen. Sie können es überprüfen mit:

systemctl status systemd-tmpfiles-clean.timer

Und Sie sollten folgendes erwarten:

systemd-tmpfiles-clean.timer - Daily Cleanup of Temporary Directories
   Loaded: loaded (/usr/lib/systemd/system/systemd-tmpfiles-clean.timer; static; vendor preset: disabled)
   Active: active (waiting) since Tue 2018-07-03 10:56:59 IST; 2 weeks 1 days ago
     Docs: man:tmpfiles.d(5)
           man:systemd-tmpfiles(8)

Jul 03 10:56:59 Host-name systemd[1]: Started Daily Cleanup of Temporary Directories.
Jul 03 10:56:59 Host-name systemd[1]: Starting Daily Cleanup of Temporary Directories.

Wenn Sie sich noch einmal den eigentlichen Dienst ansehen, der für die Bereinigung der Dateien verantwortlich ist, werden Sie feststellen, dass nur Folgendes ausgeführt wird:

/usr/bin/systemd-tmpfiles --clean

Sie können diesen Befehl also entweder direkt ausführen oder wie folgt vorgehen, um ihn ordnungsgemäß auszuführen:

systemctl start systemd-tmpfiles-clean

Welches wird den entsprechenden Befehl für Ihr System ausführen. Beachten Sie jedoch, dass dies kein Befehl zum Löschen aller temporären Dateien ist. Es gibt mehrere Konfigurationsdateien, die steuern, was und wann tatsächlich gelöscht wird, damit Anwendungen ihre temporären Dateien individuell konfigurieren können.

Ein Ort, an dem nach einer generischen Behandlung temporärer Dateien gesucht werden kann, ist /usr/lib/tmpfiles.d/tmp.conf, der möglicherweise die folgenden relevanten Zeilen enthält:

# Clear tmp directories separately, to make them easier to override
v /tmp 1777 root root 10d
v /var/tmp 1777 root root 30d

Sie können diese in eine kürzere Zeit ändern, wenn auf Ihrem System immer weniger Speicherplatz zur Verfügung steht. Beispiel:

v /tmp 1777 root root 12h
v /var/tmp 1777 root root 1d

Um sicherzugehen, was Sie tun, führen Sie man tmpfiles.d aus, um das Handbuch zu lesen. Auch hier habe ich festgestellt, dass der hier vorgestellte Ansatz für ein CentOS- (RedHat-basiertes) und ein Ubuntu-System relevant ist, aber ich weiß nicht viel über andere Distributionen.

0
Nagev

Das FHS definiert das Verzeichnis /tmp als "temporäre Dateien (siehe auch/var/tmp), die zwischen Systemneustarts häufig nicht beibehalten werden" und /var/tmp als msgstr "temporäre Dateien, die zwischen Neustarts erhalten bleiben sollen".

Heutzutage ist /tmp in vielen GNU/Linux-Distributionen standardmäßig ein RAM -Dateisystem (tmpfs) (obwohl optional). Daher ist /tmp praktisch nicht persistent.

(Vermutlich) sollten Anwendungen ihre temporären Dateien entsprechend verwalten, was meiner Meinung nach auch das Löschen nach Beendigung ihrer Verwendung einschließt und nicht erfordert, dass Administratoren mögliche destruktive Löschvorgänge planen.

0
dawud

Sie können den Inhalt aus /tmp/ entfernen. Das Problem dabei ist jedoch, dass wenn Sie einen Dienst haben, der regelmäßig in /tmp/ schreibt und die Dateien löscht, der Dienst abstürzen oder unterbrochen werden kann, bis er neu gestartet wird.

0
user1529891