Para responder a las preguntas:
- Es
/tmp
se supone que se vaciará automáticamente:Sí - ¿Se supone que debemos eliminar archivos en
/tmp
? regularmente y manualmente:No , su sistema se encargará de ellos.
Si puedes preguntarte:
- ¿Puedo eliminar archivos de
/tmp
? por el motivo que sea (necesita espacio, quiere eliminar rastros, etc.):Depende , sigue leyendo .
El estándar de jerarquía del sistema de archivos (FHS) establece:
El directorio /tmp debe estar disponible para los programas que requieren archivos temporales.
Los programas no deben asumir que los archivos o directorios en /tmp se conservan entre invocaciones del programa.
/var/tmp/
tiene un propósito similar, pero no debe ser eliminado durante el reinicio.
No está garantizado que /tmp/
o /var/tmp/
se limpian periódicamente. Esto puede depender de su distribución y configuración, aunque la mayoría de los sistemas realizan alguna limpieza de vez en cuando. Ver comentario de mike
.
Si necesita eliminar un archivo en /tmp , vea primero si el archivo está en uso. Puede hacerlo fácilmente con:
lsof /tmp/file_to_delete
Si tiene derechos para hacerlo, esto mostrará el proceso que tiene el identificador de ese archivo, como el nombre del proceso, el PID y el tipo de archivo. Para mostrar realmente todos los procesos, anteponga sudo
o ejecutar como usuario root .
lsof +D /tmp
le mostrará todos los archivos en /tmp
y directorios a continuación (+D
) que están abiertos actualmente. Por supuesto, no debe eliminar estos archivos.
De hecho, cuando elimina un archivo que aún está abierto, si tiene los derechos para hacerlo, se vuelve inaccesible desde el espacio de nombres del sistema de archivos, pero aún existe para los procesos que tienen un identificador de archivo abierto para él. Después de cerrar ese identificador, el archivo ya no es accesible para ese proceso, y si ningún proceso tiene más abierto el archivo, finalmente se elimina. Un proceso no debe suponer que el archivo sobrevive entre los subsiguientes open
llamadas, pero los programadores son descuidados y nunca se sabe. Por esa razón no es tan inteligente para eliminar archivos que todavía están en uso por algunos programas.
Creo que esto depende de la variante del sistema operativo. Me imagino que /tmp generalmente se borra al reiniciar y, de hecho, no sería seguro que el sistema se limpiara solo en mitad de la sesión, ya que no sabrá qué archivos están activos.
Si es valiente, es posible que desee lanzar un comando en crontab que elimine archivos anteriores a cierta edad, pero esto podría causar algunos problemas si elimina los archivos que aún se usan. Puede probar un comando (no lo he probado) como
find /tmp -type f -ctime +10 -exec rm {} +
Lo que teóricamente eliminará todos los archivos bajo /tmp que tengan más de 10 días.
Los directorios /tmp y /var/tmp se limpian según un programa normal. Esto puede depender de su distribución. En mi sistema CentOS (un clon de RedHat) hay un trabajo cron programado para ejecutar tmpwatch, un limpiador de directorios tmp, en un horario diario. Los archivos en /var/tmp pueden quedarse un poco más que los archivos en /tmp/. También he visto secuencias de comandos que eliminan /tmp (pero explícitamente no /var/tmp) en un reinicio, sabiendo que no puede haber nada que mantenga abierto ese archivo ya que todos los procesos son nuevos.
Entonces, sí, /tmp tiene mantenimiento desde scripts básicos. Todavía puede llenarse fuera de esos tiempos de mantenimiento. Si elige limpiar las cosas manualmente, la mejor práctica del administrador de sistemas es tener cuidado. La tradición de los administradores de sistemas habla sobre los enlaces simbólicos en /tmp que apuntan a los archivos del sistema necesarios que se eliminaron cuando los administradores de sistemas n00b ejecutaron un simple find
guión.