¿Eliminar todo de / var / log?

26

¿Puedo borrar todo en /var/log? ¿O solo debería eliminar archivos (recursivamente) /var/logpero dejar carpetas?

¿Alguien tiene una buena rmlínea de comando? (Mis habilidades administrativas me dejan nervioso).

Nota: estoy usando Debian. No estoy seguro de qué versión.

Aaron Copley
fuente
3
Eliminar archivos de registro es una mala idea (también necesitará encontrar cada proceso en ejecución que tenga su propio archivo de registro y "matarlo", un reinicio suave que hará que el programa vuelva a crear los archivos de registro necesarios). Recomiendo encarecidamente que no elimine los archivos de registro, confíe en utilidades como logrotate para administrar el contenido de / var / log automáticamente (hace cosas como HUP los procesos). Si me gustaría, me gustaría abordar esto desde un ángulo diferente. ¿Qué problema estás tratando de resolver que te llevó a considerar esto?
Twirrim

Respuestas:

22

En lugar de eliminar los archivos, debe rotarlos, por ejemplo, utilizando logrotate.

Nunca se sabe cuándo necesitará los registros de hace algún tiempo, por lo que es mejor archivarlos (hasta una edad razonable, por ejemplo, 3 meses).

logrotate puede comprimir sus archivos de registro antiguos para que no ocupen mucho espacio en disco.

joschi
fuente
3
logrotate también puede eliminar los archivos más antiguos.
Kevin M
8
Bueno, en mi humilde opinión, eliminar todos los registros puede tener mucho sentido en algunos casos. Por ejemplo, quiero crear una imagen de Virtial Machine para utilizarla en nuevas implementaciones. No hace falta decir que me gustaría que fuera un sistema realmente limpio sin ningún registro, historial, caché, etc. guardado.
Ivan
2
Lo sentimos, pero mirar los archivos de registro de tres meses es arqueología. Si recolecta registros para identificar problemas, entonces evalúelos rápidamente.
contramodo
44
@countermode ¿Nunca estás de humor para la nostalgia? ¿Como mirar los archivos de registro de 3 meses pensando en buenos tiempos?
Broco
OK, veo el comando. ¿Cómo usarlo? man logrotate dice usarlo en cron. Supongo que con la opción -f?
SDsolar
17

Si elimina todo en / var / log, lo más probable es que termine con toneladas de mensajes de error en muy poco tiempo, ya que hay carpetas allí que se espera que existan (por ejemplo, exim4, apache2, apt, cups, mysql, samba y más). Además: hay algunos servicios o aplicaciones que no crearán sus archivos de registro, si no existen. Esperan al menos un archivo vacío para estar presente. Entonces, la respuesta directa a su pregunta es "¡No hagas esto!" .

Como joschi ha señalado, no hay razón para hacer esto. Tengo servidores Debian en ejecución que no han tenido un solo archivo de registro eliminado en años.

wolfgangsz
fuente
No me di cuenta de eso. bueno saber. +1 + cambió mi aceptación.
1
Acabo de hacer esto. ¡Deseo! Había leído esta respuesta antes
VarunAgw
Hay razones válidas para eliminar archivos de registro, en mi humilde opinión. Por ejemplo, está exportando una máquina virtual para que otros la utilicen, pero no desea que la imagen de la máquina virtual contenga detalles de todo lo que sucedió antes de exportar.
a3nm
15

Borrar todos los archivos:

find /var/log -type f -delete

Eliminar todos los archivos .gz y rotados

find /var/log -type f -regex ".*\.gz$"
find /var/log -type f -regex ".*\.[0-9]$"

Intente ejecutar el comando sin "-delete", para probarlo.

bindbn
fuente
Encontré esto útil para limpiar los archivos de registro de un cuadro Vagrant antes de empaquetar.
Rudolf Vavruch
10

Estoy clonando máquinas virtuales de un maestro. Tiene perfecto sentido borrar el registro en el maestro para que cuando arranque los clones no obtenga el registro del maestro. Lo hice en tcsh:

cd /var/log
foreach ii ( `find . -type f` )
foreach? cp /dev/null $ii
foreach? end

que borra los registros pero mantiene los archivos.

Dror
fuente
Esto debería restringirse a un caso de uso como el que usted describe.
Sven
44
En bash: find / var / log / -type f -exec cp / dev / null {} \;
gerard
7

Limpieza de todos los registros en un sistema Linux sin eliminar los archivos:

for CLEAN in $(find /var/log/ -type f)
do
    cp /dev/null  $CLEAN
done

Samba ( /var/www/samba) crea nombres de archivo de registro con direcciones IP, es posible que desee eliminarlos:

for CLEAN in $(find /var/log/samba -type f)
do
    rm -rf $CLEAN
done
Pedro Lobito
fuente
2
Guión útil
Anmol Singh Jaggi
Usted podría intercambiar cp /dev/null $CLEANpor > $CLEAN.
ThoriumBR
2

Puede usar la opción ctime para buscar archivos antiguos ... por ejemplo:

find -ctime +30

Como explica bindbn, primero intente encontrar los archivos de búsqueda y luego use la opción eliminar: D

Felipe Cardoso Martins
fuente
2

/var/loga menudo tiene permisos drwxrwxr-x, por lo que no se puede escribir a menos que el usuario sea root o pertenezca a un grupo privilegiado. Eso significa que los nuevos usuarios no pueden crear archivos de registro nuevos.

Las aplicaciones que esperan iniciar sesión en un punto interno /var/loga menudo tocarán un archivo en algún lugar de la /var/logjerarquía durante el tiempo de instalación (que a menudo ocurre con privilegios elevados), chmody posiblemente chownlo harán en ese momento a los permisos apropiados para los usuarios sin privilegios que serán utilizando la aplicación

Los registros de Apache, por ejemplo, generalmente son escritos por nobody, que es un usuario con la menor cantidad de privilegios posible para que Apache haga su trabajo sin poner el sistema en un riesgo excesivo. Pero incluso una aplicación más común suele esperar poder escribir en un archivo de registro /var/log.

Entonces, ¿qué sucede si el archivo de registro y la ruta al archivo de registro no existen? Eso depende totalmente de la aplicación. Algunas aplicaciones omitirán silenciosamente el registro. Otros crearán muchas advertencias. Y otros simplemente rescatarán. No hay una regla rígida; depende de la vigilancia del desarrollador de la aplicación, así como de lo crítico que el desarrollador considere su capacidad para iniciar sesión. En el mejor de los casos, la aplicación intentará escribir en, o posiblemente crear y luego escribir en un archivo de registro en un destino dentro /var/log, y se encontrará incapaz de hacerlo porque lo está ejecutando un usuario que no tiene privilegios para escribir esa parte del sistema de archivos.

Por lo tanto, la respuesta corta es no, no elimine todo /var/log: rompe los usuarios del contrato con los privilegios suficientes para hacer esas cosas con las aplicaciones que se ejecutan en su sistema, y ​​causará algo de ruido, alguna falla silenciosa para iniciar sesión y alguna rotura total.

La acción adecuada a tomar es configurar logrotatecon los archivos de configuración apropiados. Por lo general, la rotación se asociará con un trabajo cron. La rotación puede basarse en intervalos, o en tamaño, o en ambos. Incluso es posible configurar reglas que eviten la rotación basada en intervalos si el archivo de registro todavía está vacío cuando expira el intervalo. La rotación puede incluir el envío de archivos de registro, compresión, eliminación, trituración, etc.

El usuario promedio no necesitaría preocuparse demasiado por la rotación de registros. Los desarrolladores probablemente desearían asegurarse de que los registros que utilizan tengan reglas de rotación establecidas. De hecho, es probable que los desarrolladores tengan buenos modales para configurar la rotación de registros en el momento de la instalación de cualquier registro específico de software que el software creará y escribirá.

DavidO
fuente
1

He implementado un limpiador simple aquí:

https://github.com/Lin-Buo-Ren/Coward-Unix-Log-Cleaner

Simplemente:

  • Elimina nombres de archivos con los siguientes patrones de nombre de archivo rotados en /var/log
    • ^.*/.+\.[[:digit:]]+(\.[[:alpha:]]+)?$
    • ^.*/.+\.old$ (sin distinción entre mayúsculas y minúsculas)
  • Truncar / Vaciar archivos con nombres de archivo con los siguientes patrones de nombre de archivo de registro en /var/log
    • ^.*/.+\.log$ (sin distinción entre mayúsculas y minúsculas)
Buo-Ren Lin
fuente
-2
function goodbyelogs {
find /var/log -type f
}

for i in return $(goodbyelogs);
do sudo cat /dev/null > $i;
echo "Log $i has been cleared";
done

cree un script ejecutable e intente ejecutar como root si sudo no funciona para usted

Ab edmo ri
fuente