ลบ / var / log ทั้งหมดหรือไม่


26

ฉันสามารถลบทุกอย่างในได้/var/logหรือไม่ หรือฉันควรลบเฉพาะไฟล์ (เรียกซ้ำ) /var/logแต่ทิ้งโฟลเดอร์ไว้?

ไม่มีใครมีrmบรรทัดคำสั่งที่ดี? (ทักษะการดูแลระบบของฉันทำให้ฉันประหม่า)

หมายเหตุ:ฉันใช้ Debian ฉันไม่แน่ใจว่ารุ่นใด


3
การลบไฟล์บันทึกเป็นความคิดที่ไม่ดี (คุณจะต้องค้นหาทุกกระบวนการทำงานที่มีไฟล์บันทึกของตัวเองและ "kill -HUP" ซึ่งเป็นการรีสตาร์ทแบบนุ่มนวลซึ่งจะส่งผลให้โปรแกรมสร้างไฟล์บันทึกที่จำเป็นขึ้นใหม่) ฉันขอแนะนำอย่างยิ่งให้ไม่ลบไฟล์บันทึกใช้ยูทิลิตี้อย่างเช่น logrotate เพื่อจัดการเนื้อหาของ / var / log ให้คุณโดยอัตโนมัติ (มันเหมือนกับกระบวนการ HUP) ถ้าฉันอยากจะจัดการมันจากมุมที่แตกต่างกัน คุณกำลังพยายามแก้ไขปัญหาอะไรที่ทำให้คุณต้องพิจารณาสิ่งนี้
Twirrim

คำตอบ:


22

logrotateแทนการลบไฟล์ที่คุณควรหมุนพวกเขาเช่นใช้

คุณไม่มีทางรู้ว่าคุณจะต้องใช้บันทึกเมื่อเวลาผ่านไปจริง ๆ ดังนั้นจึงเป็นการดีกว่าที่จะเก็บบันทึกไว้ (อายุที่เหมาะสมเช่น 3 เดือน)

logrotate สามารถบีบอัดไฟล์บันทึกเก่าของคุณเพื่อให้พวกเขาไม่ได้ใช้พื้นที่ดิสก์จำนวนมาก


3
logrotate ยังสามารถลบไฟล์ที่เก่าที่สุด
Kevin M

8
IMHO การลบบันทึกทั้งหมดสามารถใช้งานได้อย่างสมบูรณ์ในบางกรณี ตัวอย่างเช่นฉันต้องการสร้างอิมเมจ Virtial Machine เพื่อใช้สำหรับการปรับใช้ใหม่ ไม่จำเป็นต้องบอกว่าฉันต้องการให้มันเป็นระบบที่สะอาดมาก ๆ โดยไม่มีบันทึกประวัติแคช ฯลฯ
อีวาน

2
ขออภัย แต่การดูไฟล์บันทึกอายุสามเดือนเป็นโบราณคดี หากคุณรวบรวมบันทึกเพื่อระบุปัญหาให้ประเมินผลอย่างรวดเร็ว
ตอบโต้

4
@countermode คุณไม่เคยคิดถึงความคิดถึงบ้างไหม? ชอบดูไฟล์บันทึกอายุ 3 เดือนที่คิดเกี่ยวกับเวลาที่ดีหรือไม่?
Broco

ตกลงฉันเห็นคำสั่ง วิธีใช้งาน คน logrotate บอกว่าใช้ใน cron ฉันคิดว่ามีตัวเลือก -f?
SDsolar

17

หากคุณลบทุกอย่างใน / var / log คุณจะพบข้อความแสดงข้อผิดพลาดจำนวนมากในเวลาน้อยมากเนื่องจากมีโฟลเดอร์ที่คาดว่าจะมีอยู่ (เช่น exim4, apache2, apt, cups, mysql, samba และอื่น ๆ). บวก: มีบริการหรือแอพพลิเคชั่นบางตัวที่จะไม่สร้างไฟล์บันทึกหากไม่มีอยู่ พวกเขาคาดว่าจะมีไฟล์ว่างอยู่อย่างน้อย ดังนั้นคำตอบโดยตรงสำหรับคำถามของคุณคือ"อย่าทำอย่างนี้ !!!" .

ตามที่โจชิได้ชี้ให้เห็นไม่มีเหตุผลที่จะทำเช่นนี้ ฉันมีเซิร์ฟเวอร์เดเบียนทำงานที่ไม่ได้ลบไฟล์บันทึกเดียวในปีที่ผ่านมา


ฉันไม่ได้ตระหนักถึงสิ่งนั้น ดีแล้วที่รู้. +1 เปลี่ยนการยอมรับของฉัน

1
ฉันเพิ่งทำสิ่งนี้ ประสงค์! ฉันได้อ่านคำตอบนี้ก่อนหน้านี้
VarunAgw

มีเหตุผลที่ถูกต้องในการลบไฟล์บันทึก IMHO ตัวอย่างเช่นคุณกำลังส่งออกเครื่องเสมือนสำหรับใช้งานโดยผู้อื่น แต่คุณไม่ต้องการให้อิมเมจเครื่องเสมือนมีรายละเอียดของทุกสิ่งที่เกิดขึ้นก่อนส่งออก
a3nm

15

ลบไฟล์ทั้งหมด:

find /var/log -type f -delete

ลบ. gz ทั้งหมดและไฟล์ที่หมุนแล้ว

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

ลองเรียกใช้คำสั่งโดยไม่มี "-delete" เพื่อทดสอบ


ฉันพบว่ามีประโยชน์ในการล้างไฟล์บันทึกของ Vagrant ก่อนทำการบรรจุ
Rudolf Vavruch

10

ฉันกำลังโคลนเครื่องเสมือนจากผู้เชี่ยวชาญ มันเป็นความรู้สึกที่สมบูรณ์แบบในการล้างบันทึกในต้นแบบเพื่อที่ว่าเมื่อคุณบูตโคลนคุณจะไม่ได้รับบันทึกของต้นแบบ ฉันทำใน tcsh:

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

ซึ่งจะล้างบันทึก แต่เก็บไฟล์ไว้


สิ่งนี้ควรถูก จำกัด เฉพาะกรณีการใช้งานเช่นเดียวกับที่คุณอธิบาย
สเวน

4
ใน bash: find / var / log / -type f -exec cp / dev / null {} \;
เจอราร์ด

7

การล้างบันทึกทั้งหมดบนระบบ Linux โดยไม่ลบไฟล์:

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

Samba ( /var/www/samba) สร้างชื่อไฟล์บันทึกด้วยที่อยู่ IP คุณอาจต้องการลบ:

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

2
สคริปต์ที่มีประโยชน์
Anmol Singh Jaggi

คุณสามารถสลับจากcp /dev/null $CLEAN > $CLEAN
ThoriumBR

2

คุณสามารถใช้ตัวเลือก ctime เพื่อค้นหาไฟล์เก่า ... ตัวอย่างเช่น:

find -ctime +30

ตามที่อธิบายโดย bindbn ให้ลองค้นหาไฟล์ fetch ก่อนและหลังจากใช้ตัวเลือก delete: D


2

/var/logมักจะมีสิทธิ์drwxrwxr-xดังนั้นจึงไม่สามารถเขียนได้โดยผู้ใช้เว้นแต่ผู้ใช้จะเป็น root หรืออยู่ในกลุ่มที่มีสิทธิ์ นั่นหมายความว่าไม่สามารถสร้างไฟล์บันทึกใหม่โดยผู้ใช้ที่ไม่มีสิทธิพิเศษ

แอปพลิเคชันที่คาดว่าจะเข้าสู่จุดภายใน/var/logมักจะสัมผัสไฟล์ที่มีอยู่ใน/var/logลำดับชั้นในช่วงเวลาการติดตั้ง (ซึ่งมักเกิดขึ้นกับสิทธิ์ที่ยกระดับ) และจะchmodและอาจเป็นไปchownได้ในเวลานั้นเพื่อสิทธิ์ที่เหมาะสมสำหรับผู้ใช้ที่ด้อยโอกาส ใช้แอปพลิเคชัน

ตัวอย่างเช่นบันทึกของ Apache จะถูกเขียนโดยnobodyผู้ที่เป็นผู้ใช้ที่มีสิทธิ์น้อยที่สุดสำหรับ Apache ในการทำงานให้เสร็จโดยไม่ทำให้ระบบมีความเสี่ยงเกินควร แต่บ่อยครั้งที่แอปพลิเคชั่นที่ทำงานได้นานขึ้นคาดว่าจะสามารถเขียนไปยังล็อกไฟล์/var/logได้

ดังนั้นจะเกิดอะไรขึ้นหากไฟล์บันทึกการทำงานและพา ธ ไปยังไฟล์บันทึกข้อมูลไม่มีอยู่? ทั้งหมดนี้ขึ้นอยู่กับแอปพลิเคชัน บางแอปพลิเคชันจะข้ามการบันทึกอย่างเงียบ ๆ คนอื่นจะสร้างคำเตือนมากมาย และคนอื่น ๆ ก็จะประกันตัวออกไป ไม่มีกฎที่รวดเร็ว มันขึ้นอยู่กับความระมัดระวังของนักพัฒนาแอปพลิเคชันรวมถึงความสำคัญของนักพัฒนาที่จะพิจารณาความสามารถในการบันทึก ที่ดีที่สุดแอปพลิเคชันจะพยายามเขียนหรือสร้างและเขียนไปยังไฟล์บันทึกที่ปลายทางภายใน/var/logและจะพบว่าตัวเองไม่สามารถทำได้เนื่องจากผู้ใช้ที่ไม่มีสิทธิ์ในการเขียน ส่วนหนึ่งของระบบไฟล์นั้น

ดังนั้นคำตอบสั้น ๆ คือไม่อย่าลบทุกอย่างใน/var/log- มันจะแบ่งผู้ใช้ตามสัญญาที่มีสิทธิ์เพียงพอที่จะทำสิ่งต่าง ๆ กับแอพพลิเคชั่นที่ทำงานบนระบบของพวกเขาและจะทำให้เกิดเสียงรบกวน มีการแตกออกทั้งหมด

การดำเนินการที่เหมาะสมที่จะทำคือการตั้งค่าlogrotateด้วยไฟล์ปรับแต่งที่เหมาะสม โดยทั่วไปการหมุนจะเชื่อมโยงกับงาน cron การหมุนสามารถเป็นไปตามช่วงเวลาหรือตามขนาดหรือทั้งสองอย่าง นอกจากนี้ยังเป็นไปได้ที่จะตั้งค่ากฎที่หลีกเลี่ยงการหมุนตามช่วงเวลาหาก logfile ยังคงว่างเปล่าเมื่อช่วงเวลาหมดอายุ การหมุนสามารถรวมถึงการส่งเมลของ logfiles การบีบอัดการลบการทำลายและอื่น ๆ

ผู้ใช้งานเฉลี่ยไม่จำเป็นต้องกังวลเกี่ยวกับการหมุนเวียนบันทึกมากเกินไป นักพัฒนาอาจต้องการตรวจสอบให้แน่ใจว่าบันทึกที่ใช้มีการสร้างกฎการหมุนเวียน ในความเป็นจริงมันเป็นมารยาทที่ดีในส่วนของนักพัฒนาในการตั้งค่าการหมุนเวียนบันทึก ณ เวลาติดตั้งสำหรับบันทึกเฉพาะซอฟต์แวร์ที่ซอฟต์แวร์จะสร้างและเขียน


1

ฉันใช้งานตัวล้างแบบง่าย ๆ ที่นี่:

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

มันง่าย ๆ :

  • ลบชื่อไฟล์ด้วยรูปแบบชื่อไฟล์บันทึกต่อไปนี้ภายใต้ /var/log
    • ^.*/.+\.[[:digit:]]+(\.[[:alpha:]]+)?$
    • ^.*/.+\.old$ (กรณีตาย)
  • ตัด / ล้างไฟล์ด้วยชื่อไฟล์ที่มีรูปแบบชื่อไฟล์บันทึกต่อไปนี้ใต้ /var/log
    • ^.*/.+\.log$ (กรณีตาย)

-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

สร้างสคริปต์ที่เรียกใช้งานได้และลองเรียกใช้เป็นรูทหาก sudo ไม่ทำงานสำหรับคุณ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.