Cómo truncar (vaciar) archivos en Linux
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
:
significantrue
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.