Impedire l'eliminazione di una directory in / tmp


10

Uso spesso la /tmpdirectory sulla mia macchina Linux per archiviare file temporanei (ad es. PDF da un sito che vuole che lo scarichi prima ecc.) E creo spesso una directory con il mio nome utente. Ma ad ogni avvio viene eliminato (inclusi tutti i file). Ora so di poterlo inserire /var/tmp, ma voglio che tutti i suoi contenuti vengano eliminati, ma che la directory stessa venga mantenuta. Così:

tmp
 |- me # this should stay
 |  |- foo1 # this should be deleted...
 |  |- bar1 # ...and this as well
 |- other stuff...

C'è un modo per fare questo? Magari con autorizzazioni o con una configurazione speciale?


1
Per ovviare a questo problema, potresti inserire del codice nei file di accesso della shell per "test & mkdir", se necessario.
Jeff Schaller

3
/tmpè probabilmente un tmpfsfilesystem. Quei file non sono veramente cancellati; sono semplicemente memorizzati nella RAM e persi al riavvio. Ecco perché ottieni risposte che si riducono a "ricrearlo all'avvio o al login"
MSalters

Risposte:


4

Una soluzione sarebbe quella di utilizzare un @rebootlavoro cron:

@reboot mkdir -p "/tmp/$USER"

L'aggiunta di questo al tuo crontab con crontab -elo farebbe eseguire ogni volta che la macchina si avvia.

Oppure usa

mkdir -p "/tmp/$USER"

nel file di avvio della shell.

In entrambi i casi, potresti anche voler utilizzare

TMPDIR=/tmp/$USER
export TMPDIR

nel file di avvio della shell se si desidera utilizzare quella directory come directory temporanea predefinita.


Questo a) creerà directory per tutti gli utenti eb) si innescherà anche dall'avvio "a freddo"?
Linux4win,

1
@ Linux4win Questa risposta risponde alle esigenze di un singolo utente, perché è così che hai formulato la domanda. Non importa come la macchina viene avviata (calda, fredda o tiepida), ma non si innescherà quando si riprende dal letargo (perché non si avvia).
Kusalananda

Per qualche motivo l'aggiunta @reboot mkdir -p "/tmp/$USER"alla fine del crontab non fa nulla, mentre l'esecuzione mkdir -p "/tmp/$USER"crea effettivamente la directory. Il secondo non funziona per me, comunque, perché devo accedere al mio /tmptramite altri programmi e avviare la shell ogni volta è un po 'fastidioso ...
Linux4win,

@ Linux4win Il @rebootprocesso cron non crea una directory? Ricevi un'email inviata al tuo account con messaggi di errore dal demone cron?
Kusalananda

bene no ... forse perché non l'ho configurato mail? O non è necessario?
Linux4win,

14

Uso pam-tmpdirper questo: crea una directory temporanea utente-privata al login. Per configurarlo, aggiungi

session optional pam_tmpdir.so

ai servizi PAM appropriati; su un sistema basato su Debian, l'installazione del libpam-tmpdirpacchetto offrirà di farlo per te, oppure puoi aggiungere la linea a /etc/pam.d/common-session. La prossima volta che accedi, troverai una directory /tmp/usercon il tuo ID utente, TMPe TMPDIRimpostata in modo appropriato.


7
Potresti spiegare quali sono i servizi PAM appropriati e come aggiungere la linea? Quali file devono essere modificati?
terdon

2

Se non si esegue un sistema con systemd e utilizza systemd-tmpfiles per gestire la pulizia, è necessario configurare la directory utilizzando quel sistema.

Ecco una documentazione completa . Probabilmente puoi ottenere ciò che desideri creando /etc/tmpfiles.d/something.confcon contenuti come:

d     /tmp/your_username   0750 your_user your_group  - -

1

Come sottolineato nei commenti, /tmpè per i file transitori e che non verranno persi se vengono eliminati. Se sei nel mezzo di qualcosa e il riavvio della macchina, tutto ciò che hai scritto lì scomparirà e dovrai ricominciare da capo, il che significa che quei file potrebbero non essere stati così temporanei dopo tutto.

Ho mantenuto una directory temporanea nella mia directory home per molti anni a partire da quando un gigabyte aveva molto spazio e ho scoperto che richiedeva una pulizia periodica per eliminare i file che erano diventati vecchi e crufty. Il più delle volte quello che mi restava dopo quel processo era meno di un paio di settimane, quindi ora lo pulisco con un cron job che viene eseguito una volta al giorno:

find $HOME/tmp -depth -mtime +30 -print0 | xargs -0 -r rm -rf

Tutto ciò che scarico o creo come semi-temporaneo va lì e il sistema pulisce tutto ciò che mi lascio alle spalle. Tutto ciò che ha bisogno di una casa permanente ne ottiene uno molto prima che il cron job si sbarazzi di esso.


mkdir a a/b; touch a/b/c. Ora aspetta fino alla scadenza dei 30 giorni. Una volta eliminato c, verrà aggiornato b, il che significa che dovrà attendere altri 30 giorni. Allo stesso modo con aquando si elimina b. In secondo luogo, se si creano file bma non si toccano aper 30 giorni, la adirectory verrà colpita rm -rfe cancellerà i file recenti in b.
roaima,

find "$HOME"/tmp -mtime +30 -type f -delete; find "$HOME/tmp" -depth -mmin +60 -type d -exec rmdir {} + 2>/dev/nullfunziona per me
roaima
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.