Alles aus / var / log löschen?

26

Kann ich alles in löschen /var/log? Oder soll ich nur Dateien (rekursiv) löschen, /var/logaber Ordner belassen?

Hat jemand eine gute rmKommandozeile? (Meine Admin-Fähigkeiten machen mich nervös.)

Hinweis: Ich benutze Debian. Ich bin nicht sicher, welche Version.

Aaron Copley
quelle
3
Das Löschen von Protokolldateien ist eine schlechte Idee (Sie müssen auch jeden laufenden Prozess mit einer eigenen Protokolldatei finden und "kill -HUP" ausführen, ein weicher Neustart, der dazu führt, dass das Programm alle erforderlichen Protokolldateien neu erstellt). Ich rate dringend davon ab, Protokolldateien zu löschen. Verlassen Sie sich auf Dienstprogramme wie logrotate, um den Inhalt von / var / log automatisch zu verwalten. Welches Problem versuchen Sie zu lösen, das Sie dazu veranlasst hat, dies zu berücksichtigen?
Twirrim

Antworten:

22

Anstatt die Dateien zu löschen, sollten Sie sie drehen, z logrotate. B. mit .

Sie wissen nie, wann Sie die Protokolle tatsächlich benötigen, daher ist es besser, sie zu archivieren (bis zu einem angemessenen Alter, z. B. 3 Monate).

logrotate können Ihre alten Protokolldateien komprimieren, sodass sie nicht viel Speicherplatz belegen.

joschi
quelle
3
logrotate kann auch die ältesten Dateien löschen.
Kevin M
8
Nun, in manchen Fällen kann es durchaus sinnvoll sein, alle Protokolle zu löschen. Zum Beispiel möchte ich ein Virtial Machine-Image erstellen, das für neue Bereitstellungen verwendet werden soll. Natürlich möchte ich, dass es ein wirklich sauberes System ist, ohne dass Protokolle, Historien, Caches usw. gespeichert werden.
Ivan
2
Tut mir leid, aber ein Blick auf drei Monate alte Protokolldateien ist Archäologie. Wenn Sie Protokolle sammeln, um Probleme zu identifizieren, können Sie diese schnell auswerten.
Gegenmodus
4
@countermode Du hast nie Lust auf Nostalgie? Sie möchten sich die 3 Monate alten Logdateien ansehen, die an gute alte Zeiten denken?
Broco
OK, ich sehe den Befehl. Wie benutzt man es? Mann logrotate sagt, verwenden Sie es in Cron. Ich nehme an, mit der Option -f?
SDsolar
17

Wenn Sie alles in / var / log löschen, werden Sie höchstwahrscheinlich in sehr kurzer Zeit unzählige Fehlermeldungen erhalten, da sich dort voraussichtlich Ordner befinden (z. B. exim4, apache2, apt, cups, mysql, samba) und mehr). Plus: Es gibt einige Dienste oder Anwendungen, die ihre Protokolldateien nicht erstellen, wenn sie nicht vorhanden sind. Sie erwarten, dass mindestens eine leere Datei vorhanden ist. Die direkte Antwort auf Ihre Frage lautet also "Tun Sie das nicht !!!" .

Wie joschi betont hat, gibt es dafür keinen grund. Ich habe Debian-Server, auf denen seit Jahren keine einzige Protokolldatei gelöscht wurde.

wolfgangsz
quelle
Das habe ich nicht gemerkt. gut zu wissen. +1 + hat mein Akzeptieren geändert.
1
Ich habe das gerade getan. Wunsch! Ich hatte diese Antwort zuvor gelesen
VarunAgw
Es gibt gültige Gründe, um Protokolldateien zu entfernen, IMHO. Sie exportieren beispielsweise eine virtuelle Maschine zur Verwendung durch andere, möchten jedoch nicht, dass das Image der virtuellen Maschine Details zu allem enthält, was vor dem Export geschehen ist.
a3nm
15

Löschen Sie alle Dateien:

find /var/log -type f -delete

Löschen Sie alle .gz und gedrehten Dateien

find /var/log -type f -regex ".*\.gz$"
find /var/log -type f -regex ".*\.[0-9]$"

Führen Sie den Befehl ohne "-delete" aus, um ihn zu testen.

bindbn
quelle
Ich fand dies nützlich, um die Protokolldateien einer Vagrant-Box vor dem Verpacken zu löschen.
Rudolf Vavruch
10

Ich klone virtuelle Maschinen von einem Master. Es ist absolut sinnvoll, das Protokoll auf dem Master zu löschen, damit Sie beim Booten der Klone nicht das Protokoll des Masters erhalten. Ich tat in tcsh:

cd /var/log
foreach ii ( `find . -type f` )
foreach? cp /dev/null $ii
foreach? end

Dadurch werden die Protokolle gelöscht, die Dateien jedoch beibehalten.

Dror
quelle
Dies sollte auf einen Anwendungsfall beschränkt sein, wie Sie ihn beschreiben.
Sven
4
In der Bash: find / var / log / -type f -exec cp / dev / null {} \;
Gerard
7

Alle Protokolle auf einem Linux-System bereinigen , ohne die Dateien zu löschen :

for CLEAN in $(find /var/log/ -type f)
do
    cp /dev/null  $CLEAN
done

Samba ( /var/www/samba) erstellt Protokolldateinamen mit IP-Adressen. Vielleicht möchten Sie diese löschen:

for CLEAN in $(find /var/log/samba -type f)
do
    rm -rf $CLEAN
done
Pedro Lobito
quelle
2
Nützliches Skript.
Anmol Singh Jaggi
Sie könnten tauschen cp /dev/null $CLEANdurch > $CLEAN.
ThoriumBR
2

Sie können die Option ctime verwenden, um alte Dateien zu finden ... zum Beispiel:

find -ctime +30

Versuchen Sie, wie bindbn erklärt, zuerst, Dateien zu finden und anschließend die Option delete: D

Felipe Cardoso Martins
quelle
2

/var/logHat oft Berechtigungen von drwxrwxr-x, ist also nur beschreibbar, wenn der Benutzer root ist oder einer privilegierten Gruppe angehört. Das bedeutet, dass keine neuen Protokolldateien von nicht privilegierten Benutzern erstellt werden können.

Anwendungen, die erwarten, sich an einem Punkt innerhalb von anzumelden, /var/logberühren häufig eine Datei irgendwo in der /var/logHierarchie während der Installationszeit (die häufig mit erhöhten Rechten auftritt) und werden chmodund möglicherweise chownzu diesem Zeitpunkt Berechtigungen erhalten, die für die nichtprivilegierten Benutzer geeignet sind mit der Anwendung.

Beispielsweise werden Apache-Protokolle in der Regel von nobodyeinem Benutzer geschrieben , der über möglichst wenige Berechtigungen verfügt, damit Apache seine Arbeit erledigen kann, ohne das System einem übermäßigen Risiko auszusetzen. Aber selbst eine gewöhnliche Anwendung erwartet oft, dass sie in eine Protokolldatei schreiben kann /var/log.

Was passiert also, wenn die Protokolldatei und der Pfad zur Protokolldatei nicht vorhanden sind? Das liegt ganz bei der Anwendung. Einige Anwendungen überspringen stillschweigend die Protokollierung. Andere werden viele Warnungen auslösen. Und andere werden einfach aussteigen. Es gibt keine feste Regel; Es hängt von der Wachsamkeit des Anwendungsentwicklers ab, wie kritisch der Entwickler seine Fähigkeit zur Protokollierung einschätzt. Bestenfalls versucht die Anwendung, an einem Ziel in eine Protokolldatei zu schreiben oder möglicherweise eine Protokolldatei zu erstellen und diese dann zu schreiben. Dies ist jedoch /var/lognicht möglich, da sie von einem Benutzer ausgeführt wird, der keine Schreibrechte hat dieser Teil des Dateisystems.

Die kurze Antwort lautet also nein, nicht alles in löschen /var/log- es bricht die Vertragsbenutzer mit ausreichenden Rechten, um solche Dinge mit den Anwendungen zu tun, die auf ihrem System ausgeführt werden, und verursacht einige Geräusche, einige stille Fehler bei der Protokollierung und einige durch und durch brechen.

Die geeignete Maßnahme besteht darin, die logrotateentsprechenden Konfigurationsdateien einzurichten . In der Regel wird die Drehung mit einem Cron-Job verknüpft. Die Drehung kann intervallbasiert, größenbasiert oder beides sein. Es ist sogar möglich, Regeln einzurichten, die eine intervallbasierte Rotation vermeiden, wenn die Protokolldatei nach Ablauf des Intervalls noch leer ist. Die Rotation kann das Versenden von Protokolldateien, das Komprimieren, Löschen, Vernichten usw. umfassen.

Der durchschnittliche Benutzer muss sich nicht zu viele Gedanken über die Protokollrotation machen. Entwickler möchten wahrscheinlich sicherstellen, dass für die von ihnen verwendeten Protokolle Rotationsregeln festgelegt wurden. Tatsächlich ist es für Entwickler wahrscheinlich eine gute Methode, die Protokollrotation zur Installationszeit für alle softwarespezifischen Protokolle einzurichten, die von der Software erstellt und geschrieben werden.

DavidO
quelle
1

Ich habe hier einen einfachen Cleaner implementiert:

https://github.com/Lin-Buo-Ren/Coward-Unix-Log-Cleaner

Es ist einfach:

  • Löscht Dateinamen mit den folgenden logrotierten Dateinamenmustern unter /var/log
    • ^.*/.+\.[[:digit:]]+(\.[[:alpha:]]+)?$
    • ^.*/.+\.old$ (Groß- / Kleinschreibung wird nicht berücksichtigt)
  • Kürzen / Leeren Sie Dateien mit Dateinamen mit den folgenden Protokolldateinamenmustern /var/log
    • ^.*/.+\.log$ (Groß- / Kleinschreibung wird nicht berücksichtigt)
Buo-Ren Lin
quelle
-2
function goodbyelogs {
find /var/log -type f
}

for i in return $(goodbyelogs);
do sudo cat /dev/null > $i;
echo "Log $i has been cleared";
done

Erstellen Sie ein ausführbares Skript und versuchen Sie, es als root auszuführen, wenn sudo nicht für Sie funktioniert

Ab edmo ri
quelle