Cómo truncar (vaciar) archivos en Linux

Jun 15, 2021
admin

En algunas situaciones, es posible que desee truncar (vaciar) un archivo existente a una longitud cero. En palabras simples, truncar un archivo significa eliminar el contenido del archivo sin borrarlo.

Truncar un archivo es mucho más rápido y fácil que borrar el archivo, recrearlo y establecer los permisos y la propiedad correctos. Además, si el archivo es abierto por un proceso, la eliminación del archivo puede causar el mal funcionamiento del programa que lo utiliza.

Este tutorial explica cómo truncar archivos a tamaño cero en los sistemas Linux utilizando la redirección del shell y el comando truncate.

Redirección del shell #

El método más fácil y más utilizado para truncar archivos es utilizar el operador de redirección del shell >.

El formato general para truncar archivos utilizando la redirección es:

: > filename

Desglosemos el comando:

  • Los dos puntos : significan true y no producen ninguna salida.
  • El operador de redirección >redirige la salida del comando anterior al archivo dado.
  • filename, el archivo que se quiere truncar.

Si el archivo existe, se truncará a cero. De lo contrario, se creará el archivo.

En lugar de : también puede utilizar otro comando que no produce ninguna salida.

Aquí hay un ejemplo de uso del comando cat para dar salida al contenido del dispositivo /dev/null, que devuelve sólo un carácter de fin de archivo:

cat /dev/null > filename

Otro comando que se puede utilizar es echo. La opción -n le dice a echo que no añada una nueva línea:

echo -n > filename

En la mayoría de los shells modernos, como Bash o Zsh, puede omitir el comando antes del símbolo de redirección y utilizar:

> filename

Para poder truncar un archivo, necesita tener permisos de escritura en el archivo. Normalmente, se usaría sudo para esto, pero los privilegios elevados de root no se aplican a la redirección. Aquí hay un ejemplo:

sudo : > /var/log/syslog
bash: /var/log/syslog: Permission denied

Hay varias soluciones que permiten redireccionar con sudo. La primera opción puede ejecutar un nuevo shell con sudo y ejecutar un comando dentro de ese shell usando la bandera -c:

sudo sh -c '> filename'

Otra opción es canalizar la salida al comando tee, elevar los privilegios de tee con sudo, y escribir la salida vacía en un archivo determinado:

: | sudo tee filename

truncar Comando #

truncate es una utilidad de línea de comandos que le permite reducir o ampliar el tamaño de un archivo a un tamaño determinado.

La sintaxis general para truncar archivos a tamaño cero con el comando truncate, es la siguiente:

truncate -s 0 filename

La opción -s 0 establece el tamaño del archivo a cero.

Por ejemplo, para vaciar el registro de acceso de Nginx se utilizaría:

sudo truncate -s 0 /var/log/nginx/access.log

Vaciar todos los archivos de registro #

Con el tiempo, su unidad de disco puede llenarse de muchos archivos de registro grandes que ocupan grandes cantidades de espacio en disco.

El siguiente comando vaciará los archivos que terminan con «.log» bajo el directorio /var/log:

sudo truncate -s 0 /var/log/**/*.log 

Una mejor opción sería rotar, comprimir y eliminar los archivos de registro con la herramienta logrotate.

Conclusión #

Para truncar un archivo en Linux utilice el operador de redirección > seguido del nombre del archivo.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.