Tüm / var / log silinsin mi?


26

İçerideki her şeyi silebilir miyim /var/log? Yoksa sadece klasörlerdeki dosyaları (tekrarlamalı olarak) silmeli /var/logmi bırakmalı mıyım?

rmKomut satırı iyi olan var mı ? (Yönetici becerilerim beni endişelendiriyor.)

Not: Debian kullanıyorum. Hangi sürümden emin değilim.


3
Günlük dosyalarını silmek kötü bir fikirdir (ayrıca kendi günlük dosyası olan her çalışan işlemi bulmanız ve "kill -HUP" dosyası kullanmanız gerekir; programın gerekli günlük dosyalarını yeniden oluşturabilmesi için yumuşak bir yeniden başlatma gerekir). Günlük dosyalarını silmemeyi şiddetle tavsiye ederim, sizin için otomatik olarak / var / log içeriğini yönetmek için logrotate gibi yardımcı programlara güvenirim (işlemleri HUP gibi şeyler yapar) Eğer farklı bir açıdan ele almak istersem. Bunu düşünmeye iten, hangi sorunu çözmeye çalışıyorsunuz?
Twirrim

Yanıtlar:


22

Dosyaları silmek yerine, örneğin bunları kullanarak döndürmelisiniz logrotate.

Bir süre önce kütüklere ne zaman ihtiyaç duyacağınızı asla bilemezsiniz, bu nedenle arşivlemek daha iyidir (makul bir yaşa kadar, örneğin 3 ay).

logrotate Eski günlük dosyalarınızı sıkıştırabilir, böylece çok fazla disk alanı kapatamazlar.


3
logrotate ayrıca en eski dosyaları silebilir.
Kevin M,

8
IMHO tüm günlükleri silmek bazı durumlarda mükemmel anlam ifade edebilir. Örneğin, yeni dağıtımlar için kullanılacak bir Virtial Machine görüntüsü oluşturmak istiyorum. Söylemeye gerek yok, kaydedilmemiş herhangi bir kayıt, geçmiş, önbellek vb. Olmadan gerçekten temiz bir sistem olmasını istiyorum.
Ivan

2
Üzgünüz, ama üç aylık günlük dosyalarına bakmak arkeolojidir. Sorunları belirlemek için günlükleri toplarsanız, bunları hızla değerlendirin.
countermode

4
@countermode Hiçbir zaman nostalji havasında olamazsınız? 3 aylık günlük dosyalarına bakmak, güzel günler hakkında düşünmek gibi mi?
Broco

Tamam, komutu görüyorum. Bu nasıl kullanılır? adam logrotate cron içinde kullan diyor. Sanırım -f seçeneği ile?
SDsolar

17

/ Var / log içindeki her şeyi silerseniz, muhtemelen orada olması beklenen klasörler olduğundan çok az zamanda tonlarca hata mesajı alırsınız (örn. Exim4, apache2, apt, cups, mysql, samba). ve dahası). Artı: Varsa, günlük dosyalarını oluşturmayacak bazı servisler veya uygulamalar var. En azından boş bir dosyanın olmasını bekliyorlar. Yani sorunuza doğrudan cevap aslında "Bunu yapma !!!" .

Joschi'nin işaret ettiği gibi, bunu yapmak için hiçbir sebep yoktur. Yıllar içinde silinmiş tek bir günlük dosyası olmayan debian sunucularım var.


Bunu anlamadım. bilmek güzel. +1 + kabul etmemi değiştirdi.

1
Bunu daha yeni yaptım. İstek! Bu cevabı daha önce okudum
VarunAgw

Günlük dosyalarını kaldırmak için geçerli nedenler var, IMHO. Örneğin, başkaları tarafından kullanılmak üzere sanal bir makineyi dışa aktarıyorsunuz, ancak sanal makine görüntüsünün dışa aktarmadan önce olan her şeyin ayrıntılarını içermesini istemiyorsunuz.
a3nm

15

Tüm dosyaları sil:

find /var/log -type f -delete

Tüm .gz ve döndürülmüş dosyaları sil

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

Test etmek için "-delete" olmadan çalıştır komutunu deneyin.


Bunu bir Vagrant kutusunun günlük dosyalarını paketlemeden önce temizlemek için faydalı buldum.
Rudolf Vavruch

10

Sanal makineleri bir ustadan klonladım. Master üzerindeki günlüğü silmek mükemmeldir, böylece klonları açtığınızda master günlüğünü alamazsınız. Tcsh yaptım:

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

Bu günlükleri temizler ancak dosyaları tutar.


Bu, tarif ettiğiniz gibi bir kullanım durumuyla sınırlı olmalıdır.
Sven

4
Bash'da: / var / log / -tipi f -exec cp / dev / null {} \;
gerard

7

Bir Linux sistemindeki tüm günlükleri dosyaları silmeden temizleme :

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

Samba ( /var/www/samba), ip adresleriyle log dosya isimleri oluşturur, bunları silmek isteyebilirsiniz:

for CLEAN in $(find /var/log/samba -type f)
do
    rm -rf $CLEAN
done

2
Faydalı senaryo.
Anmol Singh Jaggi

cp /dev/null $CLEANTarafından değiştirilebilir > $CLEAN.
ThoriumBR

2

Eski dosyaları bulmak için ctime seçeneğini kullanabilirsiniz ... örneğin:

find -ctime +30

Bindbn 'in açıkladığı gibi, önce getirme dosyalarını bulmayı deneyin ve sonra silme seçeneğini kullanın: D


2

/var/loggenellikle izinleri vardır drwxrwxr-x, bu nedenle, kullanıcı root olmadığında veya ayrıcalıklı bir gruba ait olmadıkça, kullanıcının yazamaz. Bu, yeni günlük dosyalarının ayrıcalıklı olmayan kullanıcılar tarafından oluşturulamayacağı anlamına gelir.

İçinde bir noktaya giriş yapmayı bekleyen uygulamalar, /var/loggenellikle /var/logyükleme süresi boyunca (genellikle yüksek ayrıcalıklarla gerçekleşir) kurulum sırasında hiyerarşinin herhangi bir yerinde var olan bir dosyaya dokunur chmodve muhtemelen chowno zaman ayrıcalıklı kullanıcılara uygun izinlere Uygulamayı kullanarak

Örneğin, Apache günlükleri genellikle nobody, Apache'nin sistemi gereğinden fazla risk altına sokmadan işini yapması için mümkün olan en az ayrıcalıklara sahip olan bir kullanıcı tarafından yazılır . Ancak, daha çok sayıda öğütülmüş bir uygulama bile çoğu zaman bir günlük dosyasına yazmayı beklemektedir /var/log.

Peki, günlük dosyası ve günlük dosyasının yolu yoksa ne olur? Bu tamamen uygulamaya bağlı. Bazı uygulamalar sessizce günlüğe kaydetmeyi atlar. Diğerleri birçok uyarı yaratacaktır. Ve diğerleri basitçe kurtulacak. Çok hızlı bir kural yok; Uygulama geliştiricisinin dikkatinin yanı sıra geliştiricinin günlüğe kaydetme yeteneğini ne kadar kritik olarak değerlendirdiğine bağlı. En iyi ihtimalle uygulama, bir hedefe bir günlük dosyasına ya yazmaya ya da yaratmaya ve muhtemelen yazmaya ve sonra yazmaya /var/logçalışacak ve bunu yazma yetkisine sahip olmayan bir kullanıcı tarafından çalıştırıldığı için bunu yapamayacağını görecektir. dosya sisteminin bu kısmı.

Bu yüzden kısa cevap hayır, içindeki her şeyi silmeyin /var/log- sözleşmeli kullanıcıları sistemlerinde çalışan uygulamalarla bu tür şeyleri yapmak için yeterli ayrıcalıklarla parçalara ayırır ve bazı sese, bazılarının sessiz kalmamasına ve bazı all-out kırılması.

Yapılması gereken eylem logrotate, uygun yapılandırma dosyalarıyla ayarlamaktır . Tipik olarak rotasyon bir cron işi ile ilişkilendirilecektir. Dönme, aralık tabanlı veya boyut esaslı veya her ikisi olabilir. Aralık sona erdiğinde günlük dosyası hala boşsa, zamana dayalı dönmeyi engelleyen kuralları ayarlamak bile mümkündür. Döndürme, günlük dosyalarının postalanması, sıkıştırma, silme, parçalama vb. İçerebilir.

Ortalama bir kullanıcının günlük rotasyonu hakkında fazla endişelenmesi gerekmez. Geliştiriciler muhtemelen kullandıkları günlüklerin rotasyon kurallarının belirlenmesini sağlamak isterler. Aslında, geliştiricilerin, yazılımın oluşturup yazacağı herhangi bir yazılıma özel günlükler için yükleme sırasında günlük döndürme ayarlaması yapması iyi bir olasılık olabilir.


1

Burada basit bir temizleyici kullandım:

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

Bu sadece:

  • Dosya adlarını, aşağıdaki logrotated dosya adı düzenleriyle siler /var/log
    • ^.*/.+\.[[:digit:]]+(\.[[:alpha:]]+)?$
    • ^.*/.+\.old$ (Harf duyarlı)
  • Aşağıdaki günlük dosya adı desenleriyle dosya adlarına sahip dosyaları kısaltın / boşaltın /var/log
    • ^.*/.+\.log$ (Harf duyarlı)

-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

yürütülebilir bir komut dosyası oluşturun ve sudo sizin için çalışmıyorsa, root olarak çalıştırmayı deneyin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.