Hay una herramienta creada para ese propósito:
truncate -s 0 filename
Esto borrará el contenido pero seguirá siendo el mismo archivo (el inodo permanece igual).
Esto es importante porque algunos programas tienen un identificador para el archivo "por inodo". Suponga que "vacía" un archivo utilizando el método ingenuo de eliminar y volver a crear el archivo. Algunos programas aún pueden mantener un control del archivo antiguo (con el contenido anterior) incluso si ya no es visible por los medios habituales como ls.
Algunos enlaces a más detalles al final de esta respuesta.
Otra forma, quizás más fácil de recordar:
echo -n > filename
Esto también mantiene el mismo inodo.
Tenga en cuenta que ambos truncatey echo -nno están definidos por POSIX .
Para uso de cumplimiento POSIX cat /dev/null:
cat /dev/null > filename
Otra forma, más oscura y probablemente no agnóstica de conchas:
> filename
Si el archivo para truncar necesita privilegios de root para escribir, las siguientes líneas no funcionarán como probablemente se esperaba:
sudo echo -n > filename
sudo cat /dev/null > filename
sudo > filename
Esto se debe a que el shell realiza la redirección incluso antes de que se ejecute sudo. Eso significa que el acceso de escritura al archivo se realiza utilizando los privilegios del usuario que ejecuta el shell, no los privilegios que sudo otorgará.
Una solución alternativa es diferir la redirección a un shell ejecutado usando privilegios de sudo como este:
sudo sh -c "echo -n > filename"
Usarlo truncateno necesita una solución alternativa porque el acceso de escritura no lo realiza el shell sino truncateque es ejecutado por sudo utilizando los privilegios de sudo.
sudo truncate -s 0 filename
Para obtener algunos detalles sangrientos sobre los programas que mantienen abierto el archivo, incluso si el archivo se ha eliminado, puede leer lo siguiente:
tail -n +1000 file.txt > file.txtdebería eliminar 1000 líneas y mantener las líneas más nuevas en el archivo (nunca se sabe cuándo podría necesitar parte del registro reciente para rastrear algo).