Come faccio a impedire che una cartella all'interno di / tmp venga ripulita?

11

Questa domanda riguarda Ubuntu 14.10 sul mio laptop per sviluppatori.

Ho una cartella in /tmp che viene usata da un'applicazione per inserire materiale temporaneo lì. Questa applicazione di solito crea una cartella temporanea nel mio homedir e la cancella in seguito. Per qualche motivo che non funziona quando l'homedir è crittografato. Così, invece, ho creato un link simbolico a /tmp/foo all'interno del mio homedir. La mia applicazione può scrivere lì e renderla una sottocartella temporanea.

Ora /tmp/foo viene eliminato ogni volta che riavvio il mio computer. Fino ad ora ho appena ricreato la cartella manualmente dopo il riavvio. Ora ho imparato in Come viene ripulita la directory / tmp? c'è un lavoro da fare.

Ho visto /etc/init/mounted-tmp.conf ma il mio bashfu e in particolare il mio findfu non sono sufficienti per fare ciò che voglio. Ecco un estratto da tale file:

   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

Quello che voglio fare è aggiungere una condizione che faccia cancellare tutto all'interno di /tmp/foo , ma non /tmp/foo stesso. Come faccio?

    
posta simbabque 12.06.2015 - 15:45
fonte

5 risposte

20

/etc/init/mounted-tmp.conf fa parte del pacchetto mountall , quindi verranno ripristinati tutti gli aggiornamenti su quel pacchetto e le modifiche suggerite.

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

Al contrario, secondo lo standard Hierachy del Filesystem (FHS) ;

Riguardo a / tmp :

  

I programmi non devono presumere che siano presenti file o directory in / tmp   conservato tra le invocazioni del programma.

Per quanto riguarda / var / tmp :

  

La directory / var / tmp è resa disponibile per i programmi che richiedono file temporanei o directory che vengono conservati tra i riavvii del sistema.   Pertanto, i dati memorizzati in / var / tmp sono più persistenti dei dati in / tmp.

Quindi dovresti cambiare il tuo link simbolico per usare /var/tmp invece di /tmp .

    
risposta data mgor 12.06.2015 - 18:07
fonte
8

Non è propriamente una risposta alla tua domanda, ma potresti trovare /var/tmp come posizione più adatta, poiché non viene ripulita da un riavvio. È progettato per i file temporanei che non dovrebbero essere automaticamente eliminati dopo un breve periodo di tempo.

Ciò che faccio spesso, tuttavia, è di creare me stesso una cartella sotto / optare per memorizzare le cose casuali che non voglio in casa. È un posto adatto per mettere le cose fuori dal controllo del sistema operativo principale.

    
risposta data Andrew Aylett 12.06.2015 - 18:28
fonte
6

Così:

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

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

Esempio:

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

Sono d'accordo con l'utente aap: o dovresti averne cura nel software usato ricreando la directory lì se sono file tmp o usi un'altra directory se non sono file tmp che non sono stati cancellati.

    
risposta data Rinzwind 12.06.2015 - 16:11
fonte
0

È una cattiva idea avere file con valore futuro, scrivere nella directory / tmp (/ var / tmp, come suggerito da altri, è un posto migliore). Detto questo, potresti voler dare un colpo a chattr. Questo dovrebbe essere eseguito dopo che l'applicazione è stata chiusa, ma prima di un arresto. Ricorda che questa operazione non permetterà a qualsiasi cosa di scrivere in quella directory d'ora in poi.

tocca /tmp/foo/ddmmyy/.001_immute_me chattr + i /tmp/foo/ddmmyy/.001_immute_me

    
risposta data Hopping Bunny 19.06.2015 - 06:40
fonte
-1

Esegui:

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

quindi Aggiungi questo a / etc / inittab vedi qui: dove è inittab il file :?

foo:2345:boot:/bin/foodel

Questo creerà / etc / foo all'avvio se non esiste, quindi lo svuoterà.

Questo farà lo stesso su login bash:

echo "/bin/foodel" >> ~/.bashrc
    
risposta data Daniel 12.06.2015 - 19:01
fonte

Leggi altre domande sui tag