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

11

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

Ich habe einen Ordner in /tmp , der von einer Anwendung benutzt wird, um temporäre Sachen dorthin zu legen. Diese Anwendung erstellt normalerweise einen temporären Ordner in meinem Homedir und löscht ihn danach. Aus irgendeinem Grund funktioniert das nicht, wenn der Homedir verschlüsselt ist. Stattdessen habe ich einen Symlink zu /tmp/foo in meinem Homedir erstellt. Meine Anwendung kann dort schreiben und ihren temporären Unterordner erstellen.

Jetzt /tmp/foo wird jedes Mal gelöscht, wenn ich meinen Rechner neu starte. Bis jetzt habe ich den Ordner nur nach dem Neustart manuell neu erstellt. Jetzt habe ich gelernt in Wie ist das Verzeichnis / tmp aufgeräumt? das Es gibt einen Job, der das macht.

Ich habe mir /etc/init/mounted-tmp.conf angeschaut, aber mein Bashfu und besonders mein Fundfu 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

Was ich tun möchte, ist eine Bedingung hinzuzufügen, die everyting in /tmp/foo , aber nicht in /tmp/foo selbst löscht. Wie mache ich das?

    
simbabque 12.06.2015, 15:45
quelle

5 Antworten

20

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

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

Stattdessen gemäß dem Dateisystem-Hierachy-Standard (FHS) ;

Betreffend / tmp :

  

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

Betreffend / var / tmp :

  

Das Verzeichnis / var / tmp wird für Programme zur Verfügung gestellt, die temporäre Dateien oder Verzeichnisse benötigen, die zwischen Systemneustarts erhalten bleiben.   Daher sind in / var / tmp gespeicherte Daten dauerhafter als Daten in / tmp.

Sie sollten also Ihre symbolische Verbindung so ändern, dass /var/tmp anstelle von /tmp verwendet wird.

    
mgor 12.06.2015, 18:07
quelle
8

Nicht unbedingt eine Antwort auf Ihre Frage, aber Sie könnten /var/tmp als geeigneteren Speicherort finden, da er bei einem Neustart nicht bereinigt wird. Es ist für temporäre Dateien gedacht, die nach kurzer Zeit nicht automatisch verworfen werden sollten.

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

    
Andrew Aylett 12.06.2015 18:28
quelle
6

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: Sie sollten entweder in der Software darauf achten, 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 werden. p>     

Rinzwind 12.06.2015 16:11
quelle
0

Es ist eine schlechte Idee, Dateien mit zukünftigem Wert zu haben, schreiben Sie in das Verzeichnis / tmp (/ var / tmp, wie von anderen vorgeschlagen, ist ein besserer Ort). Das heißt, Sie möchten vielleicht eine Chance auf Chattr geben. Dies sollte nach dem Beenden der Anwendung, aber vor dem Herunterfahren ausgeführt werden. Denken Sie daran, dass durch diese Operation nichts mehr in dieses Verzeichnis geschrieben wird.

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

    
Hopping Bunny 19.06.2015 06:40
quelle
-1

Führen Sie Folgendes aus:

echo "if [ ! -e /etc/foo/ ]; then mkdir /etc/foo/; fi; rm -rf /etc/foo/*" > /bin/foodel; sudo chmod 755 /bin/foodel 

Fügen Sie dies zu / etc / inittab hinzu, siehe hier: wo ist inittab Datei? :

foo:2345:boot:/bin/foodel

Das erstellt / etc / foo beim Booten, wenn es nicht existiert, und leert es dann.

Dies wird das Gleiche bei bash-Login tun:

echo "/bin/foodel" >> ~/.bashrc
    
Daniel 12.06.2015 19:01
quelle

Tags und Links