GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo limpiar la carpeta tmp de forma segura en Linux

Es posible que desee probar algo como eso:

find /tmp -mtime +7 -and -not -exec fuser -s {} ';' -and -exec echo {} ';'

find se utiliza para buscar archivos que coincidan con ciertos criterios.

  • -mtime +7 solo selecciona archivos que tienen más de 7 días (puede usar cualquier otro valor)
  • -exec fuser -s {} ';' llama a fuser en modo silencioso para cada archivo que coincida con los criterios de antigüedad. fuser devuelve 0 (=verdadero) para cada archivo al que se ha accedido en este momento y 1 (=falso) para los archivos a los que no se ha accedido. Como solo nos interesan los no accedidos, ponemos un -not delante de este -exec
  • -exec echo {} ';' simplemente imprime todos los nombres de archivo que coinciden con los criterios. es posible que desee utilizar -exec rm {} ';' en su lugar aquí, pero como esto puede eliminar algunos archivos que aún están en uso, creo que es más seguro hacer un simple eco primero.
  • editar: Es posible que desee agregar algo como -name 'foo*.bar' o -uid 123 para limitar los efectos de la limpieza a patrones de archivo específicos o ID de usuario para evitar efectos accidentales.

Hasta el último punto:tenga en cuenta que puede haber archivos que solo se escriben una vez (por ejemplo, en el arranque del sistema) pero que se leen con frecuencia (por ejemplo, cualquier cookie de sesión X). Por lo tanto, recomiendo agregar algunas comprobaciones de nombres para que solo afecten a los archivos creados por sus programas defectuosos.

editar2: A su última pregunta:un archivo no se eliminará del disco hasta que ningún proceso tenga un identificador abierto (al menos para los sistemas de archivos nativos de Linux). El problema es que la entrada del directorio se elimina inmediatamente, lo que significa que desde el momento en que elimina el archivo, ningún proceso nuevo puede volver a abrir el archivo (ya que no tiene un nombre de archivo adjunto).

Para obtener más información, consulte:https://stackoverflow.com/questions/3181641/how-can-i-delete-a-file-upon-its-close-in-c-on-linux

editar3: Pero, ¿y si quisiera automatizar todo el proceso?

Como dije, puede haber archivos que se escriben una vez y luego se leen de vez en cuando (por ejemplo, cookies de sesión X, archivos PID, etc.). Esos no serán excluidos por este pequeño script de eliminación (que es la razón por la que quizás quieras hacer una prueba con echo primero antes de eliminar archivos).

Una forma de implementar una solución segura es usar atime .
atime almacena la hora en que se accedió por última vez a cada archivo. Pero esa opción del sistema de archivos a menudo está deshabilitada porque tiene un impacto considerable en el rendimiento (según este blog en algún lugar en la región del 20-30%). Hay relatime , pero ese solo escribe el tiempo de acceso si mtime ha cambiado, por lo que este no nos ayudará.

Si quieres usar atime , recomendaría tener /tmp en una partición separada (idealmente, un ramdisk) para que el impacto en el rendimiento de todo el sistema no sea demasiado grande.

Una vez atime está habilitado, todo lo que tienes que hacer es reemplazar el -mtime parámetro en la línea de comando anterior con -atime .
Es posible que pueda eliminar el -not -exec fuser -s {} ';' , pero lo mantendría allí solo para estar seguro (en caso de que las aplicaciones mantengan los archivos abiertos durante un largo período de tiempo).

Pero recuerde probar el comando usando echo ¡antes de que termines eliminando cosas que tu sistema todavía necesita!


No ruede el suyo.

Debian/Ubuntu tiene tmpreaper, probablemente también esté disponible en otras distribuciones.

# tmpreaper - cleans up files in directories based on their age

sudo apt-get install tmpreaper

cat /etc/tmpreaper.conf 

Con respecto a la última parte de su pregunta:

Si bien no creo que exista un modo de apertura/creación de "eliminar esto si muero", un proceso puede eliminar de manera segura un archivo directamente después de crearlo, siempre que mantenga abierto un identificador de dicho archivo. Luego, el núcleo mantendrá el archivo en el disco y tan pronto como finalice el último proceso que abrió el archivo (ya sea por falla o normalmente), se liberará el espacio ocupado por el archivo.

Para una forma general de solucionar el problema de que algunos procesos a veces no limpian /tmp, sugeriría echar un vistazo a los espacios de nombres de montaje, descritos, por ejemplo, aquí o aquí. Si el proceso en cuestión es un demonio del sistema, systemd y su función nativa para permitir sistemas de archivos privados /tmp podrían ser de interés.


Linux
  1. Cómo administrar las capacidades de archivos de Linux

  2. Cómo encontrar un archivo en Linux

  3. Cómo crear un intercambio en Linux

  4. Cómo crear un archivo de intercambio en Linux

  5. ¿Cómo cambiar el nombre de un archivo en Linux?

Cómo vincular un archivo en Linux

Cómo proteger con contraseña una carpeta en Linux

Cómo cifrar archivos en Linux

Cómo comprimir una carpeta en Linux

Cómo deshabilitar el intercambio en Linux

¿Cómo usar gzip en Linux?