quelqu'un peut-il me donner une solution pour tronquer tous les fichiers journaux dans le /var/log/
répertoire?
et une question juste pour la connaissance, est-ce une bonne idée ou non?
#!/bin/bash
LOGDIR="/var/log"
for logfile in $(ls $LOGDIR/*log)
do
truncate -s 0 $logfile
done
command-line
scripts
files
log
pylover
la source
la source
/var/log
c'est là que le système place les messages dont vous pourriez avoir besoin plus tard. Ubuntu a déjà rencontré le problème. Lisezman 8 logrotate;man logrotate.conf
.Réponses:
essaye ça:
truncate -s 0 /var/log/*log
ÉDITER:
si vous souhaitez effectuer cette opération plusieurs fois, vous devez utiliser
logrotate
pour gérer vos journaux. Habituellement, il est installé dans ubuntu. Jetez un œil àman logrotate
(ou si vous ne l'avez pas installé, regardez la page de manuel en ligne ou installez-la avecsudo apt-get install logrotate
)à partir de la page de manuel:
la source
Si vous souhaitez effacer tous vos fichiers journaux, pas seulement ceux du dossier journal de premier niveau, vous pouvez utiliser:
Notant que si vous avez déjà
logrotate
exécuté, vous devrez également effacer les.gz
journaux tournés :Une utilisation valide pour cela pourrait être la construction d'un conteneur d'appliance VM pour la distribution, par exemple.
Vous ne devriez pas avoir besoin de le faire dans le cadre de la maintenance de routine: comme DEM l'a suggéré correctement, utilisez
logrotate
-le.la source
Comme suite à la réponse @DEN
Cela trouvera tous les fichiers journaux
/var/log
et les tronquera à 0 octet.la source
*.log*
place mais je ne sais pas si c'est 100% sûr, donc je ne l'ai pas inclus dans la réponse. Parce qu'il y a des fichiers commedovecot.log-20180930
etdovecot.log-20180923.gz
.Il existe deux méthodes pour tronquer complètement un fichier, généralement applicables à la plupart des systèmes d'exploitation compatibles POSIX. Le plus courant que vous verrez avec les scripts shell est quelque chose comme
true > file.txt
ou: > file.txt
(et dans le cas dubash
shell, la>
redirection seule est suffisante). Cela est dû à la façon dont les>
fichiers sont ouverts viaopen()
ouopenat()
syscall avec desO_WRONLY|O_CREAT|O_TRUNC
indicateurs - qui lit en écriture seule OU crée si le nom de fichier n'existe pas, OU tronque le nom de fichier existant.Dans cet esprit, nous pouvons implémenter quelque chose comme ça en C nous-mêmes:
Nommez le fichier qui stocke ce code
trunc.c
et compilez-le avecgcc trunc.c -o trunc
, et vous avez vous-même un petit utilitaire qui tronquera un argument de nom de fichier tel qu'il est fournitrunc ./foobar.txt
. Bien sûr, ce code ne fait pas d'autres vérifications, il tronque uniquement le premier paramètre positionnel. Je laisse aux lecteurs le soin de comprendre comment gérer plus d'un paramètre positionnel. En parallèle, il existe untruncate()
appel système que nous pourrions également utiliser et tronquer un fichier à une longueur variable.Maintenant, si vous n'êtes pas fan de C, Python pourrait être plus facile pour vous.
open()
La commande fonctionne sur le même principe en Python - ouvrir un fichier pour écrire et tronquer si un nom de fichier existe. Ainsi nous pouvons faireQuant à trouver tous les
.log
fichiers, cela a déjà été couvert dans d'autres réponses - utilisez*
glob ou glob étendubash
. Il y a aussifind -type f -name "*.log"
, qui a-exec
drapeau pour les commandes en cours d' exécution (dans ce cas particuliersh -c ''
pour tirer parti de>
cause>
est un opérateur shell et non un exécutable externe). Ainsi vous pouvez faireIl est également intéressant de noter que les fichiers journaux dans le répertoire tels que
/var/log
souvent sont mis en rotation par le service logrotate, donc il y aura des noms de fichiers tels que/var/log/service.log
,/var/log/service.log.1
, etc., de sorte que vous pouvez utiliser*.log.[1-9]
modèle à la placeEntre autres choses, nous pouvons copier
/dev/null
dans le fichier souhaité. Curieusement, même s'il/dev/null
s'agit d'un type de fichier de périphérique à caractère spécial, lorsque vous copiez cela ailleurs, le résultat est un fichier normal vide, au moins avec GNUcp
. Ainsi nous pouvons faireou
Autre lecture suggérée:
la source
Il est recommandé de faire pivoter les journaux dans / var / logs pour effectuer une rotation avec la fonctionnalité logrotate, mais pas chaque fois que nous le souhaitons. Les journaux système lui seront imprimés et ils seront pratiques pour déboguer les éventuels échecs.
S'il est nécessaire de ne pas utiliser logrotate, des options peuvent être explorées. Bien que tronquer soit une option facile dans quelques versions du système Unix, cette commande n'est pas disponible facilement, doit être installée.Si elle n'est pas autorisée à installer la nouvelle commande, la boucle ci-dessous peut être utilisée.
la source
for logfile in /path/*.log
plutôt.