Cómo vaciar correctamente un archivo

Cómo vaciar correctamente un archivo

Ok, entonces estoy intentando vaciar un archivo. Es un archivo de registro de texto, que se escribe continuamente. Mi ls -lh dice que son 3GB

Corro

 > file.log

Mi ls -lh dice que todavía son 3GB

Sin embargo, el tamaño de la carpeta que contiene este archivo es 3 GB menor. Por extraño que parezca, contar las líneas dice que no está vacío y no puedo abrirlo con vim (demasiado grande).

No tengo acceso de administrador, pero soy el propietario del archivo.

Intenté crear un archivo nuevo con solo la primera línea para ver qué está pasando.

head -1 file.log > first_line.txt

Y el first_line.txt es de 3 GB. De hecho, este es un comportamiento extraño.

Pregunta 1: ¿Por qué mi primer comando no vacía el archivo?

Pregunta 2: ¿Cómo puedo vaciar el archivo sin eliminarlo?

Gracias,

EDITAR después de los comentarios: el archivo está siendo abierto y escrito por otros procesos, continuamente.

Lamentablemente no puedo interferir con esos procesos, por lo que no puedo cerrarlos ni reiniciarlos temporalmente.

Respuesta1

su archivo está retenido por un proceso, no puede eliminarlo.

utilizar lsof file.logpara saber qué proceso le está escribiendo.

entonces

mv file.log old.file.log

reiniciar el proceso. (Esto depende del proceso).

A continuación, podrás eliminar old.file.log.

Si su identificación de archivo aparece en, /etc/logrotate.d/*puede emitir un comando logrotate.

Respuesta2

Para (casi) vaciar el archivo, use el comando

echo "" > file.log

O, si su sistema operativo lo tiene,

truncate file.log --size 0

Lo truncará a 0 bytes.

Si el archivo no tiene cambios de línea, es posible que el archivo completo tenga 1 línea, lo que explica un archivo de 3 gigas.

Puede tomar una muestra del archivo usando el comando como

dd if=file.log of=firstpart.txt count=1 bs=200

Que ocupará los primeros 200 bytes del archivo. (Si necesita más, aumente el parámetro "bs" hasta 4096, si necesita más, use el parámetro de conteo, es decir, para obtener 8192 bloques, conteo=2 bs=4096)

El consejo de @Archemar es bueno, pero no estoy seguro de que responda a tus preguntas.

información relacionada