ฉันสามารถลบทุกอย่างในได้/var/log
หรือไม่ หรือฉันควรลบเฉพาะไฟล์ (เรียกซ้ำ) /var/log
แต่ทิ้งโฟลเดอร์ไว้?
ไม่มีใครมีrm
บรรทัดคำสั่งที่ดี? (ทักษะการดูแลระบบของฉันทำให้ฉันประหม่า)
หมายเหตุ:ฉันใช้ Debian ฉันไม่แน่ใจว่ารุ่นใด
ฉันสามารถลบทุกอย่างในได้/var/log
หรือไม่ หรือฉันควรลบเฉพาะไฟล์ (เรียกซ้ำ) /var/log
แต่ทิ้งโฟลเดอร์ไว้?
ไม่มีใครมีrm
บรรทัดคำสั่งที่ดี? (ทักษะการดูแลระบบของฉันทำให้ฉันประหม่า)
หมายเหตุ:ฉันใช้ Debian ฉันไม่แน่ใจว่ารุ่นใด
คำตอบ:
logrotate
แทนการลบไฟล์ที่คุณควรหมุนพวกเขาเช่นใช้
คุณไม่มีทางรู้ว่าคุณจะต้องใช้บันทึกเมื่อเวลาผ่านไปจริง ๆ ดังนั้นจึงเป็นการดีกว่าที่จะเก็บบันทึกไว้ (อายุที่เหมาะสมเช่น 3 เดือน)
logrotate
สามารถบีบอัดไฟล์บันทึกเก่าของคุณเพื่อให้พวกเขาไม่ได้ใช้พื้นที่ดิสก์จำนวนมาก
หากคุณลบทุกอย่างใน / var / log คุณจะพบข้อความแสดงข้อผิดพลาดจำนวนมากในเวลาน้อยมากเนื่องจากมีโฟลเดอร์ที่คาดว่าจะมีอยู่ (เช่น exim4, apache2, apt, cups, mysql, samba และอื่น ๆ). บวก: มีบริการหรือแอพพลิเคชั่นบางตัวที่จะไม่สร้างไฟล์บันทึกหากไม่มีอยู่ พวกเขาคาดว่าจะมีไฟล์ว่างอยู่อย่างน้อย ดังนั้นคำตอบโดยตรงสำหรับคำถามของคุณคือ"อย่าทำอย่างนี้ !!!" .
ตามที่โจชิได้ชี้ให้เห็นไม่มีเหตุผลที่จะทำเช่นนี้ ฉันมีเซิร์ฟเวอร์เดเบียนทำงานที่ไม่ได้ลบไฟล์บันทึกเดียวในปีที่ผ่านมา
ลบไฟล์ทั้งหมด:
find /var/log -type f -delete
ลบ. gz ทั้งหมดและไฟล์ที่หมุนแล้ว
find /var/log -type f -regex ".*\.gz$"
find /var/log -type f -regex ".*\.[0-9]$"
ลองเรียกใช้คำสั่งโดยไม่มี "-delete" เพื่อทดสอบ
ฉันกำลังโคลนเครื่องเสมือนจากผู้เชี่ยวชาญ มันเป็นความรู้สึกที่สมบูรณ์แบบในการล้างบันทึกในต้นแบบเพื่อที่ว่าเมื่อคุณบูตโคลนคุณจะไม่ได้รับบันทึกของต้นแบบ ฉันทำใน tcsh:
cd /var/log
foreach ii ( `find . -type f` )
foreach? cp /dev/null $ii
foreach? end
ซึ่งจะล้างบันทึก แต่เก็บไฟล์ไว้
การล้างบันทึกทั้งหมดบนระบบ 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
cp /dev/null $CLEAN
> $CLEAN
คุณสามารถใช้ตัวเลือก ctime เพื่อค้นหาไฟล์เก่า ... ตัวอย่างเช่น:
find -ctime +30
ตามที่อธิบายโดย bindbn ให้ลองค้นหาไฟล์ fetch ก่อนและหลังจากใช้ตัวเลือก delete: D
/var/log
มักจะมีสิทธิ์drwxrwxr-x
ดังนั้นจึงไม่สามารถเขียนได้โดยผู้ใช้เว้นแต่ผู้ใช้จะเป็น root หรืออยู่ในกลุ่มที่มีสิทธิ์ นั่นหมายความว่าไม่สามารถสร้างไฟล์บันทึกใหม่โดยผู้ใช้ที่ไม่มีสิทธิพิเศษ
แอปพลิเคชันที่คาดว่าจะเข้าสู่จุดภายใน/var/log
มักจะสัมผัสไฟล์ที่มีอยู่ใน/var/log
ลำดับชั้นในช่วงเวลาการติดตั้ง (ซึ่งมักเกิดขึ้นกับสิทธิ์ที่ยกระดับ) และจะchmod
และอาจเป็นไปchown
ได้ในเวลานั้นเพื่อสิทธิ์ที่เหมาะสมสำหรับผู้ใช้ที่ด้อยโอกาส ใช้แอปพลิเคชัน
ตัวอย่างเช่นบันทึกของ Apache จะถูกเขียนโดยnobody
ผู้ที่เป็นผู้ใช้ที่มีสิทธิ์น้อยที่สุดสำหรับ Apache ในการทำงานให้เสร็จโดยไม่ทำให้ระบบมีความเสี่ยงเกินควร แต่บ่อยครั้งที่แอปพลิเคชั่นที่ทำงานได้นานขึ้นคาดว่าจะสามารถเขียนไปยังล็อกไฟล์/var/log
ได้
ดังนั้นจะเกิดอะไรขึ้นหากไฟล์บันทึกการทำงานและพา ธ ไปยังไฟล์บันทึกข้อมูลไม่มีอยู่? ทั้งหมดนี้ขึ้นอยู่กับแอปพลิเคชัน บางแอปพลิเคชันจะข้ามการบันทึกอย่างเงียบ ๆ คนอื่นจะสร้างคำเตือนมากมาย และคนอื่น ๆ ก็จะประกันตัวออกไป ไม่มีกฎที่รวดเร็ว มันขึ้นอยู่กับความระมัดระวังของนักพัฒนาแอปพลิเคชันรวมถึงความสำคัญของนักพัฒนาที่จะพิจารณาความสามารถในการบันทึก ที่ดีที่สุดแอปพลิเคชันจะพยายามเขียนหรือสร้างและเขียนไปยังไฟล์บันทึกที่ปลายทางภายใน/var/log
และจะพบว่าตัวเองไม่สามารถทำได้เนื่องจากผู้ใช้ที่ไม่มีสิทธิ์ในการเขียน ส่วนหนึ่งของระบบไฟล์นั้น
ดังนั้นคำตอบสั้น ๆ คือไม่อย่าลบทุกอย่างใน/var/log
- มันจะแบ่งผู้ใช้ตามสัญญาที่มีสิทธิ์เพียงพอที่จะทำสิ่งต่าง ๆ กับแอพพลิเคชั่นที่ทำงานบนระบบของพวกเขาและจะทำให้เกิดเสียงรบกวน มีการแตกออกทั้งหมด
การดำเนินการที่เหมาะสมที่จะทำคือการตั้งค่าlogrotate
ด้วยไฟล์ปรับแต่งที่เหมาะสม โดยทั่วไปการหมุนจะเชื่อมโยงกับงาน cron การหมุนสามารถเป็นไปตามช่วงเวลาหรือตามขนาดหรือทั้งสองอย่าง นอกจากนี้ยังเป็นไปได้ที่จะตั้งค่ากฎที่หลีกเลี่ยงการหมุนตามช่วงเวลาหาก logfile ยังคงว่างเปล่าเมื่อช่วงเวลาหมดอายุ การหมุนสามารถรวมถึงการส่งเมลของ logfiles การบีบอัดการลบการทำลายและอื่น ๆ
ผู้ใช้งานเฉลี่ยไม่จำเป็นต้องกังวลเกี่ยวกับการหมุนเวียนบันทึกมากเกินไป นักพัฒนาอาจต้องการตรวจสอบให้แน่ใจว่าบันทึกที่ใช้มีการสร้างกฎการหมุนเวียน ในความเป็นจริงมันเป็นมารยาทที่ดีในส่วนของนักพัฒนาในการตั้งค่าการหมุนเวียนบันทึก ณ เวลาติดตั้งสำหรับบันทึกเฉพาะซอฟต์แวร์ที่ซอฟต์แวร์จะสร้างและเขียน
ฉันใช้งานตัวล้างแบบง่าย ๆ ที่นี่:
https://github.com/Lin-Buo-Ren/Coward-Unix-Log-Cleaner
มันง่าย ๆ :
/var/log
^.*/.+\.[[:digit:]]+(\.[[:alpha:]]+)?$
^.*/.+\.old$
(กรณีตาย)/var/log
^.*/.+\.log$
(กรณีตาย)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 ไม่ทำงานสำหรับคุณ