Come pulire / tmp?


74
rizhas@rizhas-laptop:~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda7        67G   58G  5,2G  92% /
none            4,0K     0  4,0K   0% /sys/fs/cgroup
udev            1,5G   12K  1,5G   1% /dev
tmpfs           303M  1,2M  302M   1% /run
none            5,0M     0  5,0M   0% /run/lock
none            1,5G  348K  1,5G   1% /run/shm
none            100M   80K  100M   1% /run/user
overflow        1,0M  1,0M     0 100% /tmp
overflow        1,0M  1,0M     0 100% /tmp

Come pulire /tmp?


1
Probabilmente ha risposto su Unix e Linux . Non sono sicuro che ciò renda duplicata questa domanda.
drc,

no @drc ma buona scoperta. Ho usato un link da lì per aggiornare la mia risposta.
Rinzwind,


Risposte:


117

/ tmp dovrebbe essere ripulito al riavvio, ma se non si riavvia (cosa normale per i server), la ripulitura non avverrà

find /tmp -ctime +10 -exec rm -rf {} +

eliminerà tutti i file e le cartelle più vecchi di 10 giorni. potresti volerlo aggiungere al cron giornaliero.


AGGIORNARE

Nei commenti qui sotto @sfussenegger consiglia un formato leggermente diverso di questo comando che potrebbe essere più adatto alle tue esigenze e al sistema su cui stai operando.

sudo find /tmp -type f -atime +10 -delete

Qui il comando sta usando sudoper assicurarsi che tutto sia cancellato (o è possibile eseguirlo come root), operando su file a cui non si accede da più di 10 giorni e cancella solo i file, non le cartelle . Utilizza anche -deleteper evitare di eseguire il rmcomando


2
invece del tempo di creazione (-ctime) potresti voler usare il tempo di accesso (-atime) invece - ovviamente solo se il filesystem conserva queste informazioni (controlla il tempo di noat in / etc / fstab)
sfussenegger

7
ok, per favore abbi pazienza con me, ma c'è un'altra cosa: vuoi cercare solo i file ( -type f). altrimenti potresti scoprire che il genitore di un albero di directory non è stato raggiunto da un po 'di tempo ed eliminare tutto il suo contenuto che potrebbe potenzialmente essere ancora in uso. quindi il comando finale che consiglierei èsudo find /tmp -type f -atime +10 -delete
sfussenegger,

2
@sfussenegger, forse potresti promuovere i tuoi commenti a una risposta? Penso che sia meglio che essere "nascosto" nei commenti.
Jonathan,

34

Si può presumere che qualsiasi cosa all'interno di una directory tmp (/ tmp / / usr / tmp ecc.) Possa essere cancellata. PRIMA di iniziare l'eliminazione, interrompere tutti i programmi e servizi in uso poiché / tmp / può essere utilizzato dai programmi per memorizzare temporaneamente le informazioni per quella sessione. Quindi fai un sudo service mysql stope sudo service apache2 stopse hai un mysql e / o apache in esecuzione. Il nome dei file nella directory / tmp / la maggior parte delle volte fornisce un'idea del programma a cui appartengono.

Quindi dalla riga di comando ...

cd /tmp/
pwd
sudo rm -r *

svuota la directory / tmp / e rimuove tutti i file e le sottodirectory. Fai attenzione a digitarlo correttamente. Il comando pwdlì dentro non è necessario ma dovrebbe mostrare /tmp.

Se lo desideri in modo interattivo (quindi devi confermare l'eliminazione):

cd /tmp/
sudo rm -ri *

Vale anche la pena notare che un riavvio cancellerà / tmp come mostrato qui: come viene ripulita la directory / tmp? Quindi se / tmp / è pieno di file dopo un riavvio, è necessario investigare da dove provengono quei file.

Vorrei anche affermare che 1 Mb per / tmp non è molto spazio. Stai usando MySQL? Vedi https://unix.stackexchange.com/a/76058/10017 su come risolvere questo problema (grazie @drc)


2
il "senza alcun danno" è vero per i file risalenti a prima dell'ultimo riavvio. Altrimenti potrebbe essere in uso da un programma corrente e (per quel programma) potrebbe causare problemi ... per esempio ho degli script che creano file in / tmp, e poi li rileggo per fare i passi successivi dell'elaborazione . la loro eliminazione / troncatura tra loro interromperà le azioni del programma (e potrebbe persino portare a risultati pericolosi, a seconda di quali file vengono utilizzati)
Olivier Dulac,

... quindi l'utilizzo di una who –b(data dell'ultimo avvio) e quindi la creazione di un file / periodo di avvio datato al momento dell'avvio ( touch ....... /boottime), consentiranno di fare un sicuro find /tmp -type f \( ! -newer /boottime \) -delete \;, eliminando solo i file più vecchi dell'ultimo avvio
Olivier Dulac

Posso usare questi commenti per espandere la risposta? Intendiamoci: il / tmp qui proviene probabilmente da mysql.
Rinzwind,

4
Come persona che usa mktempregolarmente nei miei script, sono fortemente in disaccordo con l'affermazione "senza alcun danno".
hytromo,

2
Se /tmpcontiene qualcosa di più vecchio dell'ultimo riavvio, gli script di avvio non hanno fatto il loro lavoro.
Simon Richter,

10

Il tmpreaperprogramma può essere utilizzato per pulire / tmp periodicamente. Questo programma elimina tutto ciò a cui non è stato effettuato l'accesso in un determinato periodo di tempo, in genere due settimane. Affinché funzioni correttamente, l' atimesopzione del file system su cui è attiva dovrebbe essere abilitata. Se usi un tmpfs , che sembra stia facendo, allora dovresti andare bene.

Naturalmente, anche il riavvio cancella / tmp , ma sarebbe noioso.


Mi sorprende che questa non sia un'opzione standard in Ubuntu e Debian. È abbastanza comune per me imbattermi in processi utente relativamente non privilegiati riempiendo / tmp.
saggio il

1
Sì, ma è un criterio che deve essere impostato da un amministratore di sistema. Se si dispone di servizi a lungo termine che prevedono la conservazione dei propri dati, qualsiasi impostazione predefinita ma "nessuna pulizia" sarebbe pericolosa.
Simon Richter,

7

La directory /tmpsignifica temporanea.

Questa directory memorizza i dati temporanei. Non è necessario eliminare nulla da esso, i dati in esso contenuti vengono eliminati automaticamente dopo ogni riavvio.

Tuttavia, se si desidera eliminare i dati presenti in esso, utilizzare

sudo rm -r /tmp/*

l'eliminazione da esso non causerà alcun problema in quanto si tratta di file temporanei.


9
Sono temporanei nel senso che non sono necessari dopo il riavvio, non significa che non siano necessari in questo momento o che non saranno necessari in 5 minuti
Daniel Serodio,

5
Non è vero che questo "non causerà alcun problema". L'ho fatto una volta prima di conoscere meglio e fondamentalmente ho nascosto la mia macchina.
Kyle Strand,


4

Fai attenzione prima di eseguire un comando come rm -r ./*. Una volta eseguito, sarà molto difficile o impossibile recuperare qualsiasi dato.

Tutto sarà rimosso. Assicurati che la directory in cui stai eliminando sia corretta.

C'è un modo più sicuro di gestire le cose.

# sudo rm -r /tmp/*

In questo modo, quando esegui accidentalmente questo comando dalla tua shell history, non cancellerà i file sbagliati (a meno che tu non li stia mantenendo /tmp).


2

La /tmpdirectory è stata cancellata per impostazione predefinita ad ogni avvio, perché TMPTIMEè 0per impostazione predefinita.


1

Se il tuo mount "/ tmp" su un filesystem linux è montato come overflow (spesso dimensionato a 1 MB), ciò è probabilmente dovuto al fatto che non hai specificato "/ tmp" come propria partizione e il tuo filesystem di root riempito e "/ tmp" era rimontato come fallback. Per risolvere questo problema dopo aver liberato spazio, basta smontare il fallback e dovrebbe rimontarlo nel punto originale:

sudo umount overflow

se il dispositivo è occupato, utilizzare

sudo umount -l overflow
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.