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
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