Usunąć wszystkie z / var / log?

26

Czy mogę usunąć wszystko z /var/log? Czy powinienem tylko usuwać pliki (rekurencyjnie), /var/logale pozostawiać foldery?

Czy ktoś ma dobrą rmlinię poleceń? (Moje umiejętności administracyjne wprawiają mnie w zdenerwowanie.)

Uwaga: używam Debiana. Nie jestem pewien, która wersja.

Aaron Copley
źródło
3
Usuwanie plików dziennika jest złym pomysłem (musisz także znaleźć każdy uruchomiony proces, który ma własny plik dziennika i „zabić -HUP”, czyli miękki restart, który spowoduje, że program odtworzy wszystkie niezbędne pliki dziennika). Zdecydowanie odradzam usuwanie plików dziennika, polegaj na narzędziach takich jak logrotate, aby automatycznie zarządzać zawartością / var / log (robi takie rzeczy jak procesy HUP). Jeśli chciałbym poradzić sobie z tym z innej strony. Jaki problem próbujesz rozwiązać, co skłoniło Cię do rozważenia tego?
Twirrim

Odpowiedzi:

22

Zamiast usuwać pliki, należy je obrócić, np logrotate. Za pomocą .

Nigdy nie wiadomo, kiedy rzeczywiście będziesz potrzebować dzienników, więc lepiej je zarchiwizować (do rozsądnego wieku, np. 3 miesiące).

logrotate może kompresować stare pliki dziennika, aby nie zajmowały dużo miejsca na dysku.

joschi
źródło
3
logrotate może również usuwać najstarsze pliki.
Kevin M
8
Cóż, IMHO usunięcie wszystkich dzienników może w niektórych przypadkach mieć sens. Na przykład chcę zbudować obraz maszyny Virtial Machine, który będzie używany do nowych wdrożeń. Nie trzeba dodawać, że chciałbym, aby był to naprawdę czysty system bez zapisywania dzienników, historii, pamięci podręcznych itp.
Ivan
2
Niestety, ale przeglądanie plików dziennika z trzech miesięcy to archeologia. Jeśli zbierasz dzienniki w celu zidentyfikowania problemów, szybko je oceń.
kontr-
4
@countermode Nigdy nie masz nastroju do nostalgii? Jak patrząc na 3-miesięczne pliki dziennika, myśląc o dobrych, starych czasach?
Broco
OK, widzę polecenie. Jak tego użyć? man logrotate mówi, że używaj go w cronie. Przypuszczam, że z opcją -f?
SDsolar,
17

Jeśli usuniesz wszystko w / var / log, najprawdopodobniej skończysz z tonami komunikatów o błędach w bardzo krótkim czasie, ponieważ są tam foldery, które prawdopodobnie będą istnieć (np. Exim4, apache2, apt, cups, mysql, samba i więcej). Ponadto: istnieją usługi lub aplikacje, które nie utworzą swoich plików dziennika, jeśli nie istnieją. Oczekują, że obecny będzie co najmniej pusty plik. Tak więc bezpośrednia odpowiedź na twoje pytanie brzmi: „Nie rób tego !!!” .

Jak zauważył Joschi, nie ma powodu, aby to robić. Mam uruchomione serwery Debian, które nie usunęły ani jednego pliku dziennika od lat.

wolfgangsz
źródło
Nie zdawałem sobie z tego sprawy. dobrze wiedzieć. +1 + zmieniło moją akceptację.
1
Właśnie to zrobiłem. Życzenie! Przeczytałem tę odpowiedź wcześniej
VarunAgw
Istnieją ważne powody, aby usunąć pliki dziennika, IMHO. Na przykład eksportujesz maszynę wirtualną do użytku przez innych, ale nie chcesz, aby obraz maszyny wirtualnej zawierał szczegóły wszystkiego, co wydarzyło się przed eksportowaniem.
ann
15

Usuń wszystkie pliki:

find /var/log -type f -delete

Usuń cały plik .gz i obrócony

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

Spróbuj uruchomić polecenie bez „-delete”, aby go przetestować.

bindbn
źródło
Przydało mi się to do wyczyszczenia plików dziennika Vagrant box przed zapakowaniem.
Rudolf Vavruch
10

Klonuję maszyny wirtualne od mistrza. Rozsądne jest wyczyszczenie dziennika w systemie głównym, aby podczas uruchamiania klonów nie uzyskiwał dziennika programu master. Zrobiłem w tcsh:

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

który usuwa dzienniki, ale zachowuje pliki.

Dror
źródło
Powinno to być ograniczone do opisanego przypadku użycia.
Sven
4
W bash: find / var / log / -type f -exec cp / dev / null {} \;
gerard
7

Czyszczenie wszystkich dzienników w systemie Linux bez usuwania plików:

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

Samba ( /var/www/samba) tworzy nazwy plików dziennika z adresami IP, możesz je usunąć:

for CLEAN in $(find /var/log/samba -type f)
do
    rm -rf $CLEAN
done
Pedro Lobito
źródło
2
Przydatny skrypt.
Anmol Singh Jaggi
Można zamienić cp /dev/null $CLEANprzez > $CLEAN.
ThoriumBR
2

Możesz użyć opcji ctime, aby znaleźć stare pliki ... na przykład:

find -ctime +30

Jak wyjaśniają bindbn, najpierw spróbuj znaleźć pliki pobierania, a po użyciu opcji usuń: D

Felipe Cardoso Martins
źródło
2

/var/logczęsto ma uprawnienia drwxrwxr-x, więc użytkownik nie może zapisywać, chyba że użytkownik jest rootem lub należy do uprzywilejowanej grupy. Oznacza to, że nowe pliki dziennika nie mogą być tworzone przez nieuprzywilejowanych użytkowników.

Aplikacje, które oczekują zalogować się do określonego punktu /var/log, często dotykają pliku istniejącego gdzieś w /var/loghierarchii w czasie instalacji (co często ma miejsce z podwyższonymi uprawnieniami), chmodi prawdopodobnie chownw tym czasie do uprawnień odpowiednich dla nieuprzywilejowanych użytkowników, którzy będą za pomocą aplikacji.

Na przykład dzienniki Apache są zazwyczaj zapisywane przez użytkownika nobody, który jest jak najmniej uprawniony do tego, aby Apache mógł wykonywać swoje zadania bez nadmiernego ryzyka dla systemu. Ale nawet bardziej wszechstronna aplikacja często oczekuje, że będzie mogła zapisywać w pliku dziennika /var/log.

Co się stanie, jeśli plik dziennika i ścieżka do pliku dziennika nie istnieją? To zależy wyłącznie od aplikacji. Niektóre aplikacje po cichu pomijają rejestrowanie. Inni stworzą wiele ostrzeżeń. A inni po prostu wyskoczą. Nie ma twardej zasady; zależy to od czujności twórcy aplikacji, a także od tego, jak krytyczny jest jego zdolność do rejestrowania. W najlepszym wypadku aplikacja spróbuje albo zapisać, albo ewentualnie utworzyć, a następnie zapisać do pliku dziennika w miejscu docelowym w środku /var/logi nie będzie w stanie tego zrobić, ponieważ jest uruchamiany przez użytkownika, który nie ma uprawnień do zapisu w ta część systemu plików.

Krótka odpowiedź brzmi: nie, nie usuwaj wszystkiego /var/log- łamie to użytkowników kontraktu z wystarczającymi uprawnieniami do robienia takich rzeczy z aplikacjami, które działają w ich systemie i powoduje hałas, cichą awarię i trochę całkowitego zepsucia.

Właściwym działaniem, które należy podjąć, jest skonfigurowanie logrotateodpowiednich plików konfiguracyjnych. Zazwyczaj rotacja będzie powiązana z zadaniem cron. Obrót może być oparty na interwałach, rozmiarach lub obu. Możliwe jest nawet skonfigurowanie reguł, które unikają rotacji opartej na interwałach, jeśli plik dziennika jest nadal pusty po upływie interwału. Rotacja może obejmować wysyłanie plików dziennika, kompresję, usuwanie, niszczenie i tak dalej.

Przeciętny użytkownik nie musiałby zbytnio przejmować się rotacją logów. Deweloperzy prawdopodobnie chcieliby upewnić się, że używane dzienniki mają ustalone reguły rotacji. W rzeczywistości deweloperzy mogą konfigurować rotację dzienników w czasie instalacji dla dzienników specyficznych dla oprogramowania, które oprogramowanie będzie tworzyło i zapisywało.

DavidO
źródło
1

Zaimplementowałem tutaj prosty program czyszczący:

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

Po prostu:

  • Usuwa nazwy plików z następującymi logrotowanymi wzorami nazw plików w obszarze /var/log
    • ^.*/.+\.[[:digit:]]+(\.[[:alpha:]]+)?$
    • ^.*/.+\.old$ (bez rozróżniania wielkości liter)
  • Obetnij / opróżnij pliki o nazwach plików z następującymi wzorami nazw plików dziennika w obszarze /var/log
    • ^.*/.+\.log$ (bez rozróżniania wielkości liter)
Buo-Ren Lin
źródło
-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

stwórz skrypt wykonywalny i spróbuj uruchomić jako root, jeśli sudo nie działa dla ciebie

Ab edmo ri
źródło