web-dev-qa-db-fra.com

Comment vider ("tronquer") un fichier sous Linux qui existe déjà et qui est protégé d'une certaine manière?

J'ai un fichier appelé error.log sur mon serveur que je dois souvent tronquer. J'ai des permissions pour le fichier. Ouvrir le fichier dans vi> supprimer tout le contenu> enregistrer des travaux (évidemment). Mais quand j'essaye le dessous 

cat /dev/null > error.log

Je reçois le message

File already exists.

De toute évidence, une certaine configuration est effectuée sur le serveur pour empêcher le remplacement accidentel de fichiers. Quelqu'un peut-il dire comment je "tronque" le fichier en une seule commande?

107
Sumeet Pareek

Vous avez l'option noclobber définie. L'erreur semble provenir de csh, vous feriez donc:

cat /dev/null >! file

Si je me trompe et que vous utilisez bash, vous devriez faire:

cat /dev/null >| file

en bash, vous pouvez aussi raccourcir cela pour:

>| file
154
R Samuel Klatchko

Vous pouvez également utiliser la fonction tronquer

$truncate -s0 yourfile

si la permission est refusée, utilisez Sudo

$Sudo truncate -s0 yourfile

Aide/Manuel: man tronqué

testé sur Ubuntu Linux

70
risnandar

Cela suffira pour définir la taille du fichier à 0:

> error.log
48
SIFE

le mérite revient à mon collègue principal pour ceci:

:> filename

Cela ne cassera pas les fichiers journaux, vous pourrez même l'utiliser sur syslog, par exemple.

7
petermolnar

false | tee fileToTruncate

peut fonctionner aussi bien

4
Dodger Web

Puisque Sudo ne fonctionnera pas avec la redirection >, j'aime bien la commande tee à cette fin. 

echo "" | Sudo tee fileName
2
sakhunzai

Tout le monde peut essayer cette commande pour tronquer n’importe quel fichier dans système linux

Cela fonctionnera sûrement dans n'importe quel format:

truncate -s 0 file.txt
0
user3301460