Hapus semua / var / log?


26

Bisakah saya menghapus semuanya /var/log? Atau haruskah saya hanya menghapus file (secara rekursif) /var/logtetapi meninggalkan folder?

Adakah yang memiliki rmbaris perintah yang baik ? (Keterampilan admin saya membuat saya gugup.)

Catatan: Saya menggunakan Debian. Saya tidak yakin versi apa.


3
Menghapus file log adalah ide yang buruk (Anda juga harus menemukan setiap proses yang berjalan yang memiliki file log sendiri dan "bunuh -HUP" itu, restart lembut yang akan menghasilkan program membuat kembali file log yang diperlukan). Saya akan sangat menyarankan untuk tidak menghapus file log, bergantung pada utilitas seperti logrotate untuk mengelola konten / var / log untuk Anda secara otomatis (itu seperti hal-hal seperti proses HUP) Jika saya mungkin saya ingin menangani ini dari sudut yang berbeda. Masalah apa yang Anda coba selesaikan yang membuat Anda mempertimbangkan hal ini?
Twirrim

Jawaban:


22

Alih-alih menghapus file, Anda harus memutarnya, misalnya menggunakan logrotate.

Anda tidak pernah tahu kapan Anda benar-benar membutuhkan log dari beberapa waktu lalu, jadi lebih baik untuk mengarsipkannya (hingga usia yang wajar, misalnya 3 bulan).

logrotate dapat memampatkan file log lama Anda sehingga tidak menempati banyak ruang disk.


3
logrotate juga dapat menghapus file tertua.
Kevin M

8
Nah, IMHO menghapus semua log bisa masuk akal dalam beberapa kasus. Sebagai contoh saya ingin membangun image Virtial Machine untuk digunakan untuk penyebaran baru. Tak perlu dikatakan saya ingin itu menjadi sistem yang benar-benar bersih tanpa log, histori, cache dll disimpan.
Ivan

2
Maaf, tetapi melihat file log yang berumur tiga bulan adalah arkeologi. Jika Anda mengumpulkan log untuk mengidentifikasi masalah, maka evaluasilah dengan cepat.
countermode

4
@countermode Anda tidak pernah ingin nostalgia? Seperti melihat file log yang berumur 3 bulan memikirkan masa-masa indah?
Broco

OK, saya melihat perintah. Bagaimana cara menggunakannya? man logrotate mengatakan menggunakannya di cron. Saya kira dengan opsi -f?
SDsolar

17

Jika Anda menghapus semua yang ada di / var / log, Anda kemungkinan besar akan berakhir dengan banyak pesan kesalahan dalam waktu yang sangat singkat, karena ada folder di sana yang diharapkan ada (misalnya exim4, apache2, apt, cups, mysql, samba dan lainnya). Plus: ada beberapa layanan atau aplikasi yang tidak akan membuat file log mereka, jika tidak ada. Mereka berharap setidaknya ada file kosong yang ada. Jadi jawaban langsung untuk pertanyaan Anda sebenarnya adalah "Jangan lakukan ini !!!" .

Seperti yang ditunjukkan oleh joschi, tidak ada alasan untuk melakukan ini. Saya memiliki server debian yang berjalan yang belum memiliki satu file log yang dihapus selama bertahun-tahun.


Saya tidak menyadarinya. senang mendengarnya. +1 + mengubah penerimaan saya.

1
Saya baru saja melakukan ini. Ingin! Saya telah membaca jawaban ini sebelumnya
VarunAgw

Ada alasan yang sah untuk menghapus file log, IMHO. Misalnya, Anda mengekspor mesin virtual untuk digunakan oleh orang lain, tetapi Anda tidak ingin gambar mesin virtual memuat detail semua yang telah terjadi sebelum mengekspor.
A3nm

15

Hapus semua file:

find /var/log -type f -delete

Hapus semua .gz dan file yang diputar

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

Coba jalankan perintah tanpa "-delete", untuk mengujinya.


Saya menemukan ini berguna untuk membersihkan file log kotak Vagrant sebelum pengemasan.
Rudolf Vavruch

10

Saya mengkloning mesin virtual dari master. Masuk akal untuk menghapus log pada master sehingga ketika Anda boot klon Anda tidak akan mendapatkan log master. Saya lakukan di tcsh:

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

yang membersihkan log tetapi menyimpan file.


Ini harus dibatasi untuk kasus penggunaan seperti yang Anda jelaskan.
Sven

4
Dalam bash: find / var / log / -type f -exec cp / dev / null {} \;
gerard

7

Membersihkan semua log pada sistem Linux tanpa menghapus file:

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

Samba ( /var/www/samba) membuat nama file log dengan alamat ip, Anda mungkin ingin menghapusnya:

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

2
Skrip yang berguna.
Anmol Singh Jaggi

Anda bisa bertukar cp /dev/null $CLEANdengan > $CLEAN.
ThoriumBR

2

Anda dapat menggunakan opsi waktu untuk menemukan file lama ... misalnya:

find -ctime +30

Seperti yang dijelaskan bindbn, pertama-tama coba temukan fetch file dan setelah menggunakan opsi hapus: D


2

/var/logsering memiliki izin drwxrwxr-x, jadi tidak dapat ditulisi pengguna kecuali jika pengguna root atau milik kelompok istimewa. Itu berarti file log baru tidak dapat dibuat oleh pengguna yang tidak memiliki hak istimewa.

Aplikasi yang berharap untuk masuk ke suatu titik di dalam /var/logakan sering menyentuh file menjadi ada di suatu tempat dalam /var/loghierarki selama waktu instalasi (yang sering terjadi dengan hak istimewa yang ditinggikan), dan akan chmoddan mungkin chownpada saat itu untuk izin yang sesuai untuk pengguna yang tidak terjangkau yang akan menjadi menggunakan aplikasi.

Log Apache, misalnya, biasanya ditulis oleh nobody, yang merupakan pengguna dengan privilege sesedikit mungkin bagi Apache untuk menyelesaikan tugasnya tanpa menempatkan sistem pada risiko yang tidak semestinya. Tetapi bahkan lebih banyak aplikasi run-of-the-mill sering berharap untuk dapat menulis ke logfile di /var/log.

Jadi apa yang terjadi jika file log, dan jalur ke file log tidak ada? Itu sepenuhnya tergantung pada aplikasi. Beberapa aplikasi diam-diam akan melewatkan logging. Orang lain akan membuat banyak peringatan. Dan yang lain hanya akan menyelamatkan. Tidak ada aturan yang sangat cepat; terserah kewaspadaan pengembang aplikasi, serta seberapa kritis pengembang mempertimbangkan kemampuannya untuk login. Paling-paling aplikasi akan mencoba untuk menulis, atau mungkin membuat dan kemudian menulis ke file log di tujuan di dalam /var/log, dan akan menemukan dirinya tidak dapat melakukannya karena dijalankan oleh pengguna yang tidak memiliki hak istimewa untuk menulis bagian dari sistem file.

Jadi jawaban singkatnya adalah tidak, jangan hapus semuanya /var/log- itu akan merusak kontrak pengguna dengan hak yang cukup untuk melakukan hal-hal seperti itu dengan aplikasi yang berjalan pada sistem mereka, dan akan menyebabkan beberapa kebisingan, beberapa kegagalan diam untuk login, dan beberapa kerusakan habis-habisan.

Tindakan yang tepat untuk dilakukan adalah mengatur logrotatedengan file konfigurasi yang sesuai. Biasanya rotasi akan dikaitkan dengan pekerjaan cron. Rotasi dapat berbasis interval, atau berdasarkan ukuran, atau keduanya. Bahkan dimungkinkan untuk membuat aturan yang menghindari rotasi berbasis interval jika file log masih kosong ketika interval berakhir. Rotasi dapat mencakup pengiriman file log, kompresi, penghapusan, penghancuran, dan sebagainya.

Pengguna biasa tidak perlu terlalu khawatir tentang rotasi log. Pengembang mungkin ingin memastikan bahwa log yang mereka gunakan memiliki aturan rotasi yang ditetapkan. Bahkan, ada kemungkinan perilaku yang baik dari pihak pengembang untuk mengatur rotasi log pada waktu pemasangan untuk setiap log khusus perangkat lunak yang akan dibuat dan ditulis oleh perangkat lunak.


1

Saya sudah menerapkan pembersih sederhana di sini:

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

Itu hanya:

  • Menghapus nama file dengan pola nama file logrotated berikut di bawah /var/log
    • ^.*/.+\.[[:digit:]]+(\.[[:alpha:]]+)?$
    • ^.*/.+\.old$ (case-insensitive)
  • Potong / Kosongkan file dengan nama file dengan pola nama file log berikut di bawah /var/log
    • ^.*/.+\.log$ (case-insensitive)

-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

buat skrip yang dapat dieksekusi dan coba jalankan sebagai root jika sudo tidak berfungsi untuk Anda

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.