GNU/Linux >> Tutoriales Linux >  >> Linux

Eliminar archivos a los que no se ha accedido durante un tiempo determinado en Linux

Ya hemos cubierto cómo buscar y eliminar manualmente archivos con más de X días usando el comando "buscar" en Linux . Hoy haremos lo mismo, pero solo si no se ha accedido a los archivos durante un cierto período de tiempo. Saluda a "Tmpwatch" , una utilidad de línea de comandos para eliminar recursivamente archivos a los que no se ha accedido durante un tiempo determinado. No solo archivos, tmpwatch también eliminará directorios vacíos.

De forma predeterminada, Tmpwatch decidirá qué archivos/directorios se deben eliminar en función de su atime (tiempo de acceso). Por supuesto, puede cambiar este comportamiento usando ctime (tiempo de cambio de inodo), mtime (tiempo de modificación) valores también. Normalmente, Tmpwatch se puede usar para eliminar el contenido de /tmp directorio y otras cosas no utilizadas y no deseadas, como archivos de registro antiguos.

¡¡Una advertencia importante!!

Antes de comenzar a usar esta herramienta, debe saber que Tmpwatch eliminará archivos y directorios de forma recursiva según los criterios dados. No ejecute tmpwatch en / (directorio raíz) . Este directorio contiene archivos importantes que se requieren para mantener el sistema Linux en funcionamiento. Si no es lo suficientemente cuidadoso, tmpwatch eliminará los archivos y directorios importantes del sistema que coincidan con los criterios dados en todo el directorio raíz. No hay un mecanismo de protección integrado en la herramienta Tmpwatch para evitar que la ejecute en el directorio raíz. Por lo tanto, no hay forma de deshacer la operación. ¡Has sido advertido!

Instalar Tmpwatch en Linux

Tmpwatch está disponible en los repositorios predeterminados de la mayoría de las distribuciones de Linux.

En Fedora, CentOS, RHEL, AlmaLinux y Rocky Linux, puede instalarlo usando el comando:

$ sudo dnf install tmpwatch

En openSUSE:

$ sudo zypper install tmpwatch

En Debian y sus derivados como Ubuntu, Tmpwatch está disponible con un nombre diferente, es decir, Tmpreaper . Tmpreaper se basa principalmente en `tmpwatch-1.2/1.4' de Erik Troan de Redhat. Ahora, Paul Slootman mantiene tmpreaper para Debian. .

Para instalar tmpreaper en Debian, Ubuntu, Linux Mint, ejecute:

$ sudo apt install tmpreaper

Para ejecutarlo, ejecute:

$ tmpreaper <options>

O ingrese la ruta completa:

$ /usr/sbin/tmpreaper <options>

Eliminar archivos a los que no se ha accedido durante un tiempo determinado mediante Tmpwatch / Tmpreaper

El uso de Tmpwatch y Tmpreaper es casi el mismo. Si está en sistemas basados ​​en Debian, reemplace "Tmpwatch" con "Tmpreaper" en los siguientes ejemplos.

Eliminar archivos a los que no se accede por más de X días

Para eliminar archivos con más de 10 días de antigüedad, ejecute:

tmpwatch 10d /var/log/

El comando anterior eliminará todos los archivos y directorios vacíos a los que no se accede durante más de 10 días desde /var/log/ carpeta.

Eliminar archivos que no se modifican más de X días

Como ya dije, Tmpwatch eliminará archivos en función de su tiempo de acceso. También puede eliminar archivos en función de su tiempo de modificación (mtime) usando -m opción.

Por ejemplo, el siguiente comando eliminará los archivos que no se hayan modificado durante los 10 días en /var/log/ carpeta.

tmpwatch -m 10d /var/log/

Aquí, -m refiere el tiempo de modificación y d es el parámetro. El parámetro define el umbral de antigüedad para eliminar archivos. Puede usar los siguientes parámetros time_spec para eliminar archivos.

  • d - durante días,
  • h - durante horas,
  • m - durante minutos,
  • s - por segundos.

Horario es el predeterminado.

Por ejemplo, para eliminar archivos que no se hayan modificado durante las últimas 10 horas , simplemente ejecute:

tmpwatch -m 10 /var/log/

Como habrás notado, no he usado el parámetro time_spec en el comando anterior. Porque, h (por horas) es el parámetro predeterminado, por lo que no tenemos que mencionarlo al eliminar archivos que no se han modificado durante las últimas X horas.

Eliminar enlaces simbólicos

Si desea eliminar enlaces simbólicos, no solo archivos y directorios normales, use -s opción como la siguiente.

tmpwatch -s 10 /var/log/

Eliminar todos los archivos

Para eliminar todos los tipos de archivos, no solo los archivos normales, los enlaces simbólicos y los directorios, use -a opción.

tmpwatch -a 10 /var/log/

El comando anterior eliminará todos los tipos de archivos, incluidos los archivos normales, enlaces simbólicos y directorios en /var/log/ carpeta.

Excluir directorios de la eliminación

A veces, es posible que desee eliminar archivos, pero no directorios. si es así, el comando sería:

tmpwatch -am 10 --nodirs /var/log/

El comando anterior eliminará todos los archivos excepto los directorios que no hayan sido modificados durante las últimas 10 horas.

Realizar una ejecución de prueba sin borrar nada

A veces, es posible que desee ver qué archivos se eliminarán realmente. Esto será útil cuando ejecute Tmpwatch en un directorio importante. Si es así, ejecute Tmpwatch en modo de prueba con -t opción.

tmpwatch -t 30 /var/log/

Salida de muestra del servidor CentOS 7:

removing file /var/log/wtmp
removing directory /var/log/ppp if empty
removing directory /var/log/tuned if empty
removing directory /var/log/anaconda if empty
removing file /var/log/dmesg.old
removing file /var/log/boot.log
removing file /var/log/dnf.librepo.log

En los sistemas basados ​​en Debian, verá un resultado como el siguiente.

$ tmpreaper -t 30 /var/log/
(PID 1803) Pretending to clean up directory `/var/log/'.
(PID 1804) Pretending to clean up directory `apache2'.
Pretending to remove file `apache2/error.log'.
Pretending to remove file `apache2/access.log'.
Pretending to remove file `apache2/other_vhosts_access.log'.
(PID 1804) Back from recursing down `apache2'.
(PID 1804) Pretending to clean up directory `dbconfig-common'.
Pretending to remove file `dbconfig-common/dbc.log'.
(PID 1804) Back from recursing down `dbconfig-common'.
(PID 1804) Pretending to clean up directory `dist-upgrade'.
(PID 1804) Back from recursing down `dist-upgrade'.
(PID 1804) Pretending to clean up directory `lxd'.
(PID 1804) Back from recursing down `lxd'.
Pretending to remove file `/var/log//cloud-init.log'.
(PID 1804) Pretending to clean up directory `landscape'.
Pretending to remove file `landscape/sysinfo.log'.
(PID 1804) Back from recursing down `landscape'.
[...]

Esto solo simulará la operación, pero en realidad no eliminará nada. Tmpwatch simplemente realizará una ejecución en seco y le mostrará qué archivos se eliminarán en la salida.

Forzar eliminación de archivos

Si desea eliminar los archivos a la fuerza, use -f opción.

tmpwatch -f 10h /var/log/

Normalmente, los archivos propiedad del usuario actual, sin acceso de escritura, no se eliminan. El -f la opción también los eliminará.

Omitir ciertos archivos para que no se eliminen

Tmpreaper tiene una opción para omitir la eliminación de archivos. Esto será útil cuando desee conservar ciertos tipos de archivos y eliminar todo lo demás. Si es así, use --protect opción.

tmpreaper --protect '*.txt' -t 10h /var/log/

Este comando omitirá todos los archivos que tengan .txt extensión de la eliminación

Salida de muestra:

(PID 2623) Pretending to clean up directory `/var/log/'.
(PID 2624) Pretending to clean up directory `apache2'.
Pretending to remove file `apache2/error.log'.
Pretending to remove file `apache2/access.log'.
Pretending to remove file `apache2/other_vhosts_access.log'.
(PID 2624) Back from recursing down `apache2'.
(PID 2624) Pretending to clean up directory `dbconfig-common'.
Pretending to remove file `dbconfig-common/dbc.log'.
(PID 2624) Back from recursing down `dbconfig-common'.
(PID 2624) Pretending to clean up directory `dist-upgrade'.
(PID 2624) Back from recursing down `dist-upgrade'.
Pretending to remove empty directory `dist-upgrade'.
Entry matching `--protect' pattern skipped. `ostechnix.txt'
(PID 2624) Pretending to clean up directory `lxd'.

Como puede ver, Tmpreaper se salta el *.txt archivos de la eliminación.

Por cierto, esta opción no está disponible en Tmpwatch.

Configurar trabajo cron para eliminar archivos periódicamente

Es posible que no desee ejecutar manualmente Tmpwatch/Tmpreaper todo el tiempo. En ese caso, podría configurar un trabajo cron para automatizar el proceso de limpieza.

Al instalar Tmpreaper , creará un trabajo cron diario (/etc/cron.daily/tmpreaper ). Este trabajo leerá las opciones de /etc/timereaper.conf presentar y actuar en consecuencia. Abra el archivo y cambie los valores según sus requisitos. De forma predeterminada, Tmpreaper eliminará los archivos que tengan 7 días de antigüedad. Sin embargo, puede cambiar esto modificando el valor "TMPREAPER_TIME=7d" en el archivo tmpreaper.conf.

Si usa "Tmpwatch", debe crear manualmente el trabajo cron y colocar la entrada cron en él.

# crontab -e

Agregue la siguiente línea:

0 1 * * * /usr/sbin/tmpwatch 30d /var/log/

Según el trabajo cron anterior, Tmpwatch se ejecutará todos los días a la 1 a. m. y eliminará los archivos que tengan 30 días de antigüedad.

Para obtener más detalles sobre la configuración de trabajos cron, consulte el siguiente enlace.

  • Una guía para principiantes sobre los trabajos de Cron

Nuevamente, cuidado al usar los comandos Tmpwatch/Tmpreaper . Vuelva a verificar la ruta antes de ejecutarla para evitar la pérdida de datos.

Para obtener más detalles, consulte las páginas man.

$ man tmpwatch

O,

$ man tmpreaper

Lectura relacionada:

  • Papelera automática:una herramienta CLI para eliminar automáticamente los archivos viejos de la papelera
  • Trash-cli:una papelera de línea de comandos para sistemas tipo Unix
  • Buscar y eliminar el archivo más antiguo si hay más de X archivos en un directorio
  • Cómo encontrar y eliminar paquetes no utilizados en Linux
  • Cómo limpiar archivos basura en Ubuntu usando Ubuntu Cleaner

Linux
  1. Linux Eliminar archivos y directorios

  2. Eliminar solo archivos en el directorio en linux NO directorios

  3. Encuentra los archivos que han sido modificados en las últimas 24 horas

  4. ¿Es posible que el descriptor de archivo de Linux 0 1 2 no sea para stdin, stdout y stderr?

  5. ¿Cuál es la explicación más sencilla del hecho de que las aplicaciones de Windows no sean compatibles con Linux?

Comando ls en Linux para listar archivos

Cómo encontrar y eliminar archivos que contienen un texto específico en sus nombres en Linux

Cómo eliminar archivos enumerados en otro archivo en Linux

Cómo quitar/eliminar archivos en Linux usando el comando rm

Configuración de Dropbox para un servidor en la nube de Linux

¿Linux rastrea todos los archivos a los que accede el proceso?