Estoy ejecutando una aplicación que escribe en log.txt. La aplicación se actualizó a una nueva versión, lo que hace que los complementos compatibles ya no sean compatibles. Fuerza una enorme cantidad de errores en log.txt y no parece admitir la escritura en un archivo de registro diferente.
¿Cómo puedo escribirlos en un registro diferente?
He considerado reemplazar log.txt con un enlace duro (la aplicación no puede notar la diferencia, ¿verdad?) O un enlace duro que apunta a / dev / null. ¿Cuáles son mis opciones?
chmod -w log.txt
?Respuestas:
Esto copia su dispositivo nulo con los números de desarrollo mayores y menores correctos
log.txt
para que tenga otronull
.Los dispositivos no se conocen por su nombre en el núcleo, sino por sus números mayores y menores. Como no sé qué sistema operativo tiene, me pareció conveniente copiar los números desde donde ya sabemos que están. Si lo hace con los números mayores y menores incorrectos, lo más probable es que haya creado otro dispositivo, tal vez un disco u otra cosa en la que no desee escribir.
fuente
sudo
(o ejecutarse como usuario root). Explique (en su respuesta) lo que quiere decir con "los números de desarrollo mayores y menores correctos"./dev/null
, como se usa en su comando. Y, creo que ayudaría a los futuros lectores a notar en su respuesta quesudo
se requiere.cp -a /dev/null log.txt
mis comentarios?sudo
para llevar a cabo este comando, a menos que se esté ejecutando como usuarioroot
(que en general se desaconseja). Usarsudo
(o ejecutar comoroot
) para crear un enlace rígido (esta respuesta) o un enlace simbólico (@ Respuesta de V.Michel) puede ser la solución correcta después de todo, si el archivo debe colocarse en una ubicación en la que cualquier cuenta de usuario pueda escribir, pero el punto es: tenga en cuenta ese requisito explícitamente.mknod
. Tenga en cuenta que los comentarios generalmente reciben poca atención, por lo que alguien que solo lee la pregunta y luego su respuesta puede confundirse (como yo; también tenga en cuenta que la mayoría de las personas nunca están expuestas a conceptos tales como números de dispositivos mayores y menores).Puede hacer un enlace simbólico a / dev / null y no necesita ser root:
fuente
ls -l log.txt
demostraría que es un enlace simbólico a / dev / null, en lugar de depender de saber que, por ejemplo, "1, 3" es de alguna manera significativo.Las otras respuestas aquí probablemente funcionarán. En particular, la solución de enlace simbólico probablemente será la solución más fácil. Ofrezco esto principalmente para completar.
Las soluciones que involucran
mknod
(ocp -a
) se vuelven problemáticas si el sistema de archivos que contiene el archivo no admite dispositivos (por ejemplo, se montó con lanodev
opción, por ejemplo). Y, por supuesto, los enlaces duros a través de los sistemas de archivos simplemente no funcionarán.Una alternativa a los enlaces duros o la creación de nuevos nodos de dispositivos es utilizar montajes de enlace, que le permiten montar un archivo o directorio de una parte del árbol de su sistema de archivos en otra. Entonces, por ejemplo, puedes ejecutar:
Esto se parece mucho a un enlace duro, pero:
Para un ejemplo completo:
fuente
nodev
sistema de archivos.Depende críticamente de CÓMO la aplicación maneja log.txt.
Si la aplicación solo abre el archivo existente y escribe en él, como se describe en otras respuestas, puede vincularlo a / dev / null, vincularlo en otro lugar, vincularlo en otro lugar (aunque los enlaces rígidos no pueden ser un sistema de archivos cruzado, por lo que no existe t mucho punto en esto) crear una copia del nodo del dispositivo / dev / null allí, etc.
OTOH si la aplicación elimina y recrea log.txt, nada de eso funcionará. Podría vincular todo el directorio en otro lugar para redirigir las escrituras a un sistema de archivos diferente, pero eso es todo y tendría que ocuparse de otras cosas en el directorio.
Supongo que si realmente quisieras, podrías crear un sistema de archivos de superposición personalizado que pasara la mayoría de las operaciones mientras descartaba cualquier intento de crear un archivo llamado log.txt.
fuente
chattr +i log.txt
la primera vez y la aplicación ya no eliminará el archivo.Bueno, un método sin gracia con una tubería con nombre:
casi puede hacer cualquier cosa con el registro volcado, como filtrar o enviar a través de nc .
fuente
cat
proceso se cierra o falla, el programa de inicio de sesión se bloqueará cuando la tubería esté llena.Considere convertir el archivo en un dispositivo nulo real. Un archivo "log.txt" creado con mknod, con el tipo de archivo correcto y los mismos números menores y mayores, actuará como un dispositivo nulo porque lo es.
fuente