cat / dev / null vació mi file de logging pero el tamaño no cambió

Soy bastante nuevo en Unix. Al usar Solaris 10 me enfrenté al siguiente problema.

Hay un file de logging grande con tamaño 9.5G. Traté de vaciar el file usando el siguiente command.

# cat /dev/null file_log.txt 

Al hacer esto, recuperé espacio en el sistema de files, pero el tamaño del file aún muestra lo mismo y está aumentando. Me imaginé que un process todavía se está ejecutando en el file de logging.

¿Hay alguna forma de corregir el tamaño del file? ¿Esto va a afectar mi sistema de files?

Suponiendo que quisieras decir

 cat /dev/null > file_log.txt 

la respuesta es que el process que tiene el file abierto para escritura lo hizo sin O_APPEND , o establece el desplazamiento en el file arbitrariamente, en cuyo caso se crea un file disperso . Este es un file que contiene "agujeros", es decir, el sistema "sabe" que hay regiones grandes con ceros, que en realidad no están escritos en el disco. Esta es la razón por la que du y ls están en desacuerdo: du mira el uso real del disco, mientras que ls usa simplemente stat() para extraer el atributo de tamaño de file.

Remedio: reinicie el process. Si es posible, reescriba la parte donde se abre el file para usar O_APPEND (o mode a cuando usa fopen() )

cat /dev/null es un op ya que no produce exactamente nada. cp /dev/null file es igualmente inútil.

Una forma más sencilla de borrar el contenido de un file es networkingirigir el command nulo hacia él de esa manera:

 : > file 

o incluso, con la mayoría de las shells, solo usa una networkingirección sin especificar ningún command:

 > file 

El hecho de que el tamaño reportado por ls sigue siendo alto se debe simplemente al process de escritura que busca su idea esperada de cuál debe ser el final del file antes de escribir. Debido a que no hay "nada" antes del punto de búsqueda, esto no debería doler. El único riesgo sería que desee hacer copys de security o copys del file afectado con una herramienta no dispersa que tenga en count los files.

Tenga en count que reiniciar el process de escritura no "recuperará" el espacio, ya que el file permanecerá "holey".

Si realmente desea que el tamaño de file informado sea cero, debe detener (matar) el process de escritura antes de borrar el file.

cat / dev / null file_log.txt

Esto solo hizo que cat lea /dev/null e inmediatamente lea file_log.txt y file_log.txt el resultado a stdout , su pantalla. Esto no eliminará nada, en absoluto.

Si desea realizar una testing, use cat /dev/null non_existent_file y verá que se cat /dev/null non_existent_file un error.

La forma correcta de truncar un file es usar redirects de shell o cualquier tipo de editor para eliminar las líneas. Lo que pretendías hacer era:

 cat /dev/null > file_log.txt 

cuál count para el primer método.