¿Cómo limpiar / 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

¿Cómo limpiar /tmp?

Rizhas
fuente
1
Probablemente respondido en Unix y Linux . No estoy seguro si eso hace que esta pregunta sea un duplicado.
drc
no @drc pero buen hallazgo. Utilicé un enlace desde allí para actualizar mi respuesta.
Rinzwind
1
Consulte también ¿Cómo se limpia el directorio / tmp?
Restablece a Monica - M. Schröder el
Relacionado: unix.stackexchange.com/questions/11235/is-it-safe-to-rm-rf-tmp | superuser.com/questions/499039/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Respuestas:

117

Se supone que / tmp debe limpiarse al reiniciar, pero si no reinicia (lo cual es normal para los servidores), no se realizará la limpieza

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

eliminará todos los archivos y carpetas de más de 10 días. es posible que desee agregarlo al cron diario.


ACTUALIZAR

En los comentarios a continuación, @sfussenegger recomienda un formato ligeramente diferente de este comando que puede adaptarse mejor a sus necesidades y al sistema en el que está operando.

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

Aquí el comando se usa sudopara asegurarse de que todo se elimine (o podría ejecutarlo como root), operando en archivos a los que no se ha accedido durante más de 10 días y solo elimina archivos, no carpetas . También se usa -deletepara evitar tener que ejecutar el rmcomando

Andrei R
fuente
2
en lugar del tiempo de creación (-ctime) es posible que desee utilizar el tiempo de acceso (-atime) en su lugar, por supuesto, solo si el sistema de archivos mantiene esta información (verifique noatime en / etc / fstab)
sfussenegger
77
ok, por favor tengan paciencia conmigo pero hay una cosa más: solo desea buscar archivos ( -type f). de lo contrario, es posible que no se haya accedido al padre de un árbol de directorios durante un tiempo y elimine todo su contenido que aún podría estar en uso. así que el comando final que recomendaría essudo find /tmp -type f -atime +10 -delete
sfussenegger
2
@sfussenegger, ¿quizás podría promover sus comentarios a una respuesta? Creo que es mejor que estar "oculto" en los comentarios.
Jonathan
34

Puede suponer que se puede eliminar cualquier cosa dentro de un directorio tmp (/ tmp / / usr / tmp, etc.). ANTES de comenzar a eliminar, detenga todos los programas y servicios que está utilizando, ya que / tmp / puede ser utilizado por los programas para almacenar temporalmente información para esa sesión. Entonces, haga una sudo service mysql stopy sudo service apache2 stopsi tiene un mysql y / o apache ejecutándose. El nombre de los archivos en el directorio / tmp / la mayoría de las veces da una idea de a qué programa pertenecen.

Entonces, desde la línea de comando ...

cd /tmp/
pwd
sudo rm -r *

vaciará el directorio / tmp / y eliminará todos los archivos y subdirectorios. Tenga cuidado de escribirlo correctamente. El comando pwdallí no es necesario pero debería mostrar /tmp.

Si lo desea de forma interactiva (por lo que debe confirmar la eliminación):

cd /tmp/
sudo rm -ri *

También vale la pena señalar que un reinicio borrará / tmp también como se muestra aquí: ¿Cómo se limpia el directorio / tmp? Entonces, si / tmp / está lleno de archivos después de un reinicio, debe investigar de dónde se originan esos archivos.

También me gustaría decir que 1 Mb para / tmp no es mucho espacio. ¿Estás usando MySQL? Consulte https://unix.stackexchange.com/a/76058/10017 sobre cómo solucionar esto (gracias @drc)

Rinzwind
fuente
2
el "sin ningún daño" es cierto para los archivos que datan de antes del último reinicio. De lo contrario, podría estar en uso por un programa actual y (para ese programa) puede causar problemas ... por ejemplo, tengo scripts que crean archivos en / tmp, y luego los vuelvo a leer para realizar los siguientes pasos de procesamiento . eliminarlos / truncarlos entre ellos interrumpirá las acciones del programa (e incluso podría conducir a resultados peligrosos, dependiendo de para qué se utilicen esos archivos)
Olivier Dulac
... así que usando una who –b(fecha de último arranque), y luego creando un archivo / tiempo de arranque con fecha en el momento del arranque ( touch ....... /boottime), le permitirá a uno hacer una operación segura find /tmp -type f \( ! -newer /boottime \) -delete \;, eliminando solo archivos anteriores al último arranque
Olivier Dulac
¿Puedo usar estos comentarios para ampliar la respuesta? Eso sí: el / tmp aquí es probablemente de mysql.
Rinzwind
44
Como una persona que usa mktempregularmente mis scripts, estoy totalmente en desacuerdo con la declaración "sin ningún daño".
hytromo
2
Si /tmpcontiene algo más antiguo que el último reinicio, entonces los scripts de inicio no han hecho su trabajo.
Simon Richter
10

El tmpreaperprograma se puede utilizar para limpiar / tmp periódicamente. Este programa elimina todo lo que no se ha accedido en un período de tiempo determinado, generalmente dos semanas. Para que esto funcione correctamente, el sistema de archivos en el que se encuentra debe tener la atimesopción habilitada. Si usa un tmpfs , que parece que está haciendo, entonces debería estar bien.

Por supuesto, reiniciar también borra / tmp , pero eso sería aburrido.

Simon Richter
fuente
Me sorprende que esta no sea una opción estándar en Ubuntu y Debian. Es bastante común que me encuentre con procesos de usuario relativamente desfavorecidos que se llenan / tmp.
sabio
1
Sí, pero es una política que debe establecer un administrador del sistema. Si tiene servicios de larga duración que esperan que se conserven sus datos, cualquier defecto pero "no limpiar" sería peligroso.
Simon Richter
7

El directorio /tmpsignifica temporal.

Este directorio almacena datos temporales. No necesita eliminar nada de él, los datos contenidos en él se eliminan automáticamente después de cada reinicio.

Aún así, si desea eliminar los datos presentes en él, use

sudo rm -r /tmp/*

eliminarlo no causará ningún problema, ya que estos son archivos temporales.

Tarun
fuente
9
Son temporales en el sentido de que no son necesarios después de reiniciar, no significa que no sean necesarios en este momento o que no serán necesarios en 5 minutos
Daniel Serodio
55
No es cierto que esto "no cause ningún problema". Hice esto una vez antes de que supiera mejor y básicamente mangué mi máquina.
Kyle Strand
Ver también unix.stackexchange.com/q/11235/38050
Kyle Strand
4

Tenga cuidado antes de ejecutar un comando como rm -r ./*. Una vez que lo ejecute, será muy difícil o imposible recuperar datos.

Todo será eliminado. Asegúrese de que el directorio que está eliminando es correcto.

Hay una forma más segura de manejar las cosas.

# sudo rm -r /tmp/*

De esa manera, cuando ejecuta accidentalmente este comando desde el interior de su shell history, no eliminará los archivos incorrectos (a menos que los esté manteniendo /tmp).


fuente
2

El /tmpdirectorio se borró de manera predeterminada en cada arranque, porque TMPTIMEes 0por defecto.

Avinash Raj
fuente
1

Si su montaje "/ tmp" en un sistema de archivos de Linux está montado como desbordamiento (a menudo con un tamaño de 1 MB), esto probablemente se deba a que no especificó "/ tmp" como su propia partición y su sistema de archivos raíz se llenó y "/ tmp" remontado como una alternativa. Para solucionar esto después de que haya despejado el espacio, simplemente desmonte el respaldo y debería volver a montar en su punto original:

sudo umount overflow

si el dispositivo está ocupado use

sudo umount -l overflow
ck reddy
fuente