it-swarm.com.de

Wie verhindere ich, dass ein Ordner in / tmp bereinigt wird?

Diese Frage bezieht sich auf Ubuntu 14.10 auf meinem Entwickler-Laptop.

Ich habe einen Ordner in /tmp, der von einer Anwendung verwendet wird, um temporäre Inhalte dort abzulegen. Diese Anwendung erstellt normalerweise einen temporären Ordner in meinem Homedir und löscht ihn anschließend. Aus irgendeinem Grund funktioniert das nicht, wenn das Homedir verschlüsselt ist. Also habe ich stattdessen einen Symlink zu /tmp/foo in meinem Homedir erstellt. Meine Anwendung kann dort schreiben und den temporären Unterordner erstellen.

Jetzt wird /tmp/foo jedes Mal gelöscht, wenn ich meinen Computer neu starte. Bisher habe ich den Ordner nach dem Neustart nur manuell neu erstellt. Jetzt habe ich in Wie wird das/tmp-Verzeichnis aufgeräumt? erfahren, dass es einen Job gibt, der das erledigt.

Ich habe /etc/init/mounted-tmp.conf angeschaut, aber mein Bashfu und besonders mein Findfu reichen nicht aus, um das zu tun, was ich will. Hier ist ein Auszug aus dieser Datei:

   EXCEPT='! -name .
            ! ( -path ./lost+found -uid 0 )
            ! ( -path ./quota.user -uid 0 )
            ! ( -path ./aquota.user -uid 0 )
            ! ( -path ./quota.group -uid 0 )
            ! ( -path ./aquota.group -uid 0 )
            ! ( -path ./.journal -uid 0 )
            ! ( -path ./.clean -uid 0 )
            ! ( -path "./...security*" -uid 0 )'

   # Remove all old files, then all empty directories
   find . -depth -xdev $TEXPR $EXCEPT ! -type d -delete
   find . -depth -xdev $DEXPR $EXCEPT -type d -empty -delete

Ich möchte eine Bedingung hinzufügen, die bewirkt, dass alles in /tmp/foo, aber nicht in /tmp/foo selbst gelöscht wird. Wie mache ich das?

12
simbabque

/etc/init/mounted-tmp.conf ist Teil des Pakets mountall, daher werden alle Aktualisierungen dieses Pakets und die vorgeschlagenen Änderungen rückgängig gemacht.

$ Sudo dpkg -S /etc/init/mounted-tmp.conf 
mountall: /etc/init/mounted-tmp.conf

Stattdessen nach dem Filesystem Hierachy Standard (FHS) ;

In Bezug auf / tmp :

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

In Bezug auf / var/tmp :

Das Verzeichnis/var/tmp wird für Programme verfügbar gemacht, die temporäre Dateien oder Verzeichnisse benötigen, die zwischen Systemneustarts erhalten bleiben. Daher sind Daten, die in/var/tmp gespeichert sind, beständiger als Daten in/tmp.

Daher sollten Sie Ihren symbolischen Link so ändern, dass /var/tmp anstelle von /tmp verwendet wird.

20
mgor

Dies ist nicht unbedingt eine Antwort auf Ihre Frage, aber möglicherweise ist /var/tmp ein geeigneterer Ort, da er bei einem Neustart nicht bereinigt wird. Es wurde für temporäre Dateien entwickelt, die nach kurzer Zeit nicht automatisch gelöscht werden sollen.

Was ich jedoch oft mache, ist, selbst einen Ordner unter/opt zu erstellen, um zufällige Dinge zu speichern, die ich nicht zuhause haben möchte. Dies ist ein geeigneter Ort, um Dinge zu platzieren, die außerhalb der Kontrolle des Hauptbetriebssystems liegen.

8
Andrew Aylett

Wie so:

EXCEPT='! -name .
            ...
            ! ( -path "./foo" )'

   # Remove all old files, then all empty directories
   ...
   find /tmp/foo/* -depth -xdev $TEXPR -delete

Beispiel:

$ cd /tmp/foo/
$ mkdir 1 2 3
$ touch 3 4 5
$ find /tmp/foo/* -depth -xdev $TEXPR -delete
$ ls /tmp/foo/
$

Ich stimme dem Benutzer aap zu: Entweder sollten Sie dies in der verwendeten Software berücksichtigen, indem Sie das Verzeichnis dort neu erstellen, wenn es sich um tmp-Dateien handelt, oder ein anderes Verzeichnis verwenden, wenn es sich nicht um tmp-Dateien handelt, die nicht gelöscht wurden.

6
Rinzwind

Es ist eine schlechte Idee, Dateien mit zukünftigem Wert in das Verzeichnis/tmp zu schreiben (/ var/tmp ist, wie von anderen vorgeschlagen, ein besserer Ort). Das heißt, möchten Sie vielleicht eine Chance auf chattr geben. Dies sollte ausgeführt werden, nachdem die Anwendung beendet wurde, jedoch vor dem Herunterfahren. Denken Sie daran, dass diese Operation nichts von nun an nicht mehr in dieses Verzeichnis schreiben lässt.

tippen Sie auf /tmp/foo/ddmmyy/.001_immute_me chattr + i /tmp/foo/ddmmyy/.001_immute_me

0
Hopping Bunny