Introducción
En algunas situaciones, es posible que desee truncar (vaciar) un archivo de longitud cero existente. En términos simples, truncar un archivo significa eliminar el contenido del archivo sin eliminarlo.
Truncar un archivo es mucho más rápido y fácil que eliminarlo o volver a crearlo y configurar los permisos y propiedades correctos. Además, si el archivo se abre mediante un proceso, la eliminación del archivo puede hacer que el programa que lo utiliza no funcione correctamente.
Este tutorial explica cómo truncar archivos de tamaño cero en sistemas Linux mediante la redirección de shell y el comando truncate
Redirección de Shell
El método más simple y más comúnmente utilizado para truncar archivos es usar el >
El formato general para truncar archivos mediante la redirección es:
: > filename
Analicemos el comando:
- Los dos puntos
:
significatrue
y no produce salida. - El operador de redirección
>
redirige la salida del comando anterior al archivo especificado. filename
, el archivo que desea 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 produzca ningún resultado.
A continuación, se muestra un ejemplo del uso del cat
para generar el contenido del /dev/null
, que solo devuelve un carácter de fin de archivo:
cat /dev/null > filename
Otro comando que se puede utilizar es echo
. La -n
dice no agregar 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 usar:
> filename
Para poder truncar un archivo, debe tener permisos de escritura en el archivo. Por lo general, usaría el sudo
, pero los privilegios de root elevados no se aplican a la redirección. Aquí hay un ejemplo:
sudo: > /var/log/syslog
Debería recibir un mensaje de salida similar al siguiente:
bash: /var/log/syslog: Permission denied
Existen varias soluciones que permiten la redirección 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 reenviar la salida al tee
, elevar los privilegios de tee
sudo
y escribir la salida en blanco en un archivo determinado:
: | sudo tee filename
Comando truncar
truncate
es una utilidad de línea de comandos que le permite reducir o extender el tamaño de un archivo a un tamaño determinado.
La sintaxis general para truncar archivos de tamaño cero con el truncate
es la siguiente:
truncate -s 0 filename
La -s 0
establece el tamaño del archivo en cero.
Por ejemplo, para borrar el registro de acceso de Nginx (archivo de registro) debe usar:
sudo truncate -s 0 /var/log/nginx/access.log
Vaciar todos los archivos de registro (registro)
Con el tiempo, su unidad de disco puede saturarse con muchos archivos de registro grandes que ocupan grandes cantidades de espacio en disco.
El siguiente comando vacía los archivos que terminan con " .log " en el /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, use el operador de redireccionamiento >
seguido del nombre del archivo.