Il existe un outil créé à cet effet:
truncate -s 0 filename
Cela effacera le contenu mais ce sera toujours le même fichier (l' inode reste le même).
Ceci est important car certains programmes contiennent un descripteur du fichier "par inode". Supposons que vous «videz» un fichier en utilisant la méthode naïve de suppression et de recréation du fichier. Certains programmes peuvent toujours contenir une poignée sur l'ancien fichier (avec l'ancien contenu) même s'il n'est plus visible par des moyens habituels comme ls.
Quelques liens vers plus de détails à la fin de cette réponse.
Une autre façon, peut-être plus facile à retenir:
echo -n > filename
Cela conserve également le même inode.
Notez que les deux truncateet echo -nne sont pas définis par POSIX .
Pour la conformité POSIX, utilisez cat /dev/null:
cat /dev/null > filename
Encore une autre façon, plus obscure et probablement pas agnostique au shell:
> filename
Si le fichier à tronquer a besoin des privilèges root pour être écrit, les lignes suivantes ne fonctionneront pas comme prévu:
sudo echo -n > filename
sudo cat /dev/null > filename
sudo > filename
En effet, la redirection est effectuée par le shell avant même l'exécution de sudo. Cela signifie que l'accès en écriture au fichier se fait en utilisant les privilèges de l'utilisateur qui exécute le shell, pas les privilèges qui seront accordés par sudo.
Une solution de contournement consiste à reporter la redirection vers un shell exécuté à l'aide de privilèges sudo comme celui-ci:
sudo sh -c "echo -n > filename"
L' utilisation que truncatevous n'avez pas besoin d' une telle solution de contournement , car l'accès en écriture ne se fait pas par la coque mais truncatequi est exécuté par l' aide des privilèges sudo sudo.
sudo truncate -s 0 filename
Pour quelques détails sanglants sur les programmes qui maintiennent le fichier ouvert même si le fichier a été supprimé, vous pouvez lire ce qui suit:
tail -n +1000 file.txt > file.txtdevrait supprimer 1000 lignes et conserver les lignes les plus récentes dans le fichier (vous ne savez jamais quand vous pourriez avoir besoin d'une partie de l'enregistrement récent pour suivre quelque chose).