web-dev-qa-db-fra.com

Comment nettoyer le fichier journal?

Existe-t-il un meilleur moyen de nettoyer le fichier journal? Je supprime généralement l'ancien fichier journal et crée un nouveau fichier journal et je recherche un programme de type/bash/command plus court. Comment utiliser un alias?

173
Gigamegs
> logfile

ou

cat /dev/null > logfile

ou

true | tee logfile

(n'hésitez pas à remplacer false ou toute autre commande qui ne produit aucune sortie, comme par exemple : fait dans bash) si vous voulez être plus éloquent, tout sera vide logfile (en fait ils le tronqueront à zéro).

Si vous voulez savoir combien de temps cela "prend", vous pouvez utiliser

dd if=/dev/null of=logfile

(qui est identique à dd if=/dev/null > logfile, au fait)

Vous pouvez aussi utiliser

truncate --size 0 logfile

(ou truncate -s 0 logfile) pour être parfaitement explicite ou, si vous ne le souhaitez pas,

rm logfile

(auquel cas vous vous fiez au comportement courant selon lequel les applications recréent généralement un fichier journal s'il n'existe pas déjà).

Cependant, étant donné que les fichiers journaux sont généralement utiles, vous souhaiterez peut-être compresser et enregistrer une copie. Bien que vous puissiez le faire avec votre propre script, c'est une bonne idée d'essayer au moins d'utiliser une solution de travail existante, dans ce cas logrotate, qui peut faire exactement cela et qui est raisonnablement configurable.

Si vous devez le faire pour plusieurs fichiers, le moyen sûr est

truncate -s 0 file1 file2 ...

ou

> file1 > file2 ...

Certains shells (zsh) permettent également de spécifier plusieurs cibles de redirection.

Cela fonctionne (au moins dans bash) car il crée toutes les redirections requises bien que seule la dernière interceptera n'importe quelle entrée (ou aucune dans ce cas). L'exemple tee avec plusieurs fichiers devrait fonctionner dans tous les cas (étant donné que votre tee sait comment gérer plusieurs fichiers de sortie)

Bien sûr, la bonne vieille boucle Shell fonctionnerait également:

for f in file1 file2 ... ; do
    # pick your favourite emptying method
done

bien qu'il soit beaucoup plus lent car la commande est exécutée séparément pour chaque fichier. Cela peut être aidé en utilisant find:

find <criteria matching required files> \
    -exec <command capable of zeroing several files> {} \+

ou

find <criteria matching required files> -delete
341
peterph