Xóa tất cả / var / log?


26

Tôi có thể xóa mọi thứ trong /var/logkhông? Hoặc tôi chỉ nên xóa các tệp (đệ quy) trong /var/lognhưng để lại các thư mục?

Có ai có một rmdòng lệnh tốt ? (Kỹ năng quản trị của tôi khiến tôi lo lắng.)

Lưu ý: Tôi đang sử dụng Debian. Tôi không chắc chắn phiên bản nào.


3
Xóa các tệp nhật ký là một ý tưởng tồi (bạn cũng sẽ cần tìm mọi quy trình đang chạy có tệp nhật ký riêng và "giết -HUP", khởi động lại mềm sẽ dẫn đến chương trình tạo lại bất kỳ tệp nhật ký cần thiết nào). Tôi đặc biệt khuyên bạn không nên xóa các tệp nhật ký, dựa vào các tiện ích như logrotate để tự động quản lý nội dung của / var / log (nó thực hiện như HUP các quy trình) Nếu tôi muốn giải quyết vấn đề này từ một góc độ khác. Vấn đề gì bạn đang cố gắng giải quyết khiến bạn phải cân nhắc vấn đề này?
Twirrim

Câu trả lời:


22

Thay vì xóa các tập tin, bạn nên xoay chúng, ví dụ như sử dụng logrotate.

Bạn không bao giờ biết khi nào bạn thực sự cần nhật ký từ một thời gian trước, vì vậy tốt hơn là lưu trữ chúng (đến một độ tuổi hợp lý, ví dụ 3 tháng).

logrotate có thể nén các tệp nhật ký cũ của bạn để chúng không chiếm nhiều dung lượng đĩa.


3
logrotate cũng có thể xóa các tập tin cũ nhất.
Kevin M

8
Vâng, IMHO xóa tất cả các bản ghi có thể có ý nghĩa hoàn hảo trong một số trường hợp. Ví dụ, tôi muốn xây dựng một hình ảnh Virtial Machine sẽ được sử dụng cho các triển khai mới. Không cần phải nói tôi muốn nó là một hệ thống thực sự sạch mà không có bất kỳ nhật ký, lịch sử, bộ nhớ cache, vv được lưu.
Ivan

2
Xin lỗi, nhưng nhìn vào tệp nhật ký ba tháng tuổi là khảo cổ học. Nếu bạn thu thập nhật ký để xác định vấn đề, sau đó đánh giá chúng nhanh chóng.
phản ứng

4
@countmode Bạn không bao giờ có tâm trạng cho nỗi nhớ? Giống như nhìn vào các tệp nhật ký 3 tháng tuổi nghĩ về thời gian tốt?
Broco

OK, tôi thấy lệnh. Làm thế nào để sử dụng nó? người đàn ông logrotate nói sử dụng nó trong cron. Tôi cho rằng với tùy chọn -f?
SDsolar

17

Nếu bạn xóa mọi thứ trong / var / log, rất có thể bạn sẽ kết thúc với hàng tấn thông báo lỗi trong một thời gian rất ngắn, vì có những thư mục trong đó dự kiến ​​sẽ tồn tại (ví dụ exim4, apache2, apt, cup, mysql, samba và hơn thế nữa). Ngoài ra, có một số dịch vụ hoặc ứng dụng sẽ không tạo tệp nhật ký của chúng, nếu chúng không tồn tại. Họ mong đợi ít nhất một tập tin trống sẽ có mặt. Vì vậy, câu trả lời trực tiếp cho câu hỏi của bạn thực sự là "Đừng làm điều này !!!" .

Như joschi đã chỉ ra, không có lý do để làm điều này. Tôi có các máy chủ debian đang chạy mà không có một tệp nhật ký nào bị xóa trong nhiều năm.


Tôi đã không nhận ra điều đó. tốt để biết +1 + đã thay đổi chấp nhận của tôi.

1
Tôi vừa mới làm điều này. Muốn! Tôi đã đọc câu trả lời này trước đó
VarunAgw 30/05/2015

Có những lý do hợp lệ để xóa các tệp nhật ký, IMHO. Chẳng hạn, bạn đang xuất một máy ảo để người khác sử dụng, nhưng bạn không muốn hình ảnh máy ảo chứa thông tin chi tiết về mọi thứ đã xảy ra trước khi xuất.
a3nm

15

Xóa tất cả các tệp tin:

find /var/log -type f -delete

Xóa tất cả .gz và tập tin xoay

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

Hãy thử chạy lệnh mà không "-delete", để kiểm tra nó.


Tôi thấy điều này hữu ích để xóa các tệp nhật ký của hộp Vagrant trước khi đóng gói.
Rudolf Vavruch

10

Tôi đang nhân bản máy ảo từ một bậc thầy. Sẽ rất hợp lý khi xóa nhật ký trên bản gốc để khi bạn khởi động bản sao, bạn sẽ không nhận được bản ghi của chủ. Tôi đã làm trong tcsh:

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

trong đó xóa các bản ghi nhưng giữ các tập tin.


Điều này nên được giới hạn trong trường hợp sử dụng như bạn mô tả.
Sven

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

7

Làm sạch tất cả các bản ghi trên hệ thống Linux mà không xóa các tệp:

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

Samba ( /var/www/samba) tạo tên tệp nhật ký với địa chỉ IP, bạn có thể muốn xóa chúng:

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

2
Kịch bản hữu ích.
Anmol Singh Jaggi

Bạn có thể trao đổi cp /dev/null $CLEANbằng cách > $CLEAN.
ThoriumBR

2

Bạn có thể sử dụng tùy chọn ctime để tìm các tệp cũ ... ví dụ:

find -ctime +30

Như bindbn giải thích, trước tiên hãy thử tìm tệp tìm nạp và sau khi sử dụng tùy chọn xóa: D


2

/var/logthường có quyền của drwxrwxr-x, vì vậy người dùng không thể ghi được trừ khi người dùng đã root hoặc thuộc nhóm đặc quyền. Điều đó có nghĩa là các tệp nhật ký mới không thể được tạo bởi người dùng không có đặc quyền.

Các ứng dụng dự kiến ​​đăng nhập vào một điểm bên trong /var/logthường sẽ chạm vào một tệp tồn tại ở đâu đó trong /var/loghệ thống phân cấp trong thời gian cài đặt (thường xảy ra với các đặc quyền nâng cao) chmodvà có thể chownvào thời điểm đó để cấp quyền phù hợp cho người dùng không có quyền sử dụng ứng dụng.

Ví dụ, nhật ký Apache thường được viết bởi nobody, một người dùng có càng ít đặc quyền càng tốt để Apache hoàn thành công việc của mình mà không khiến hệ thống gặp rủi ro không đáng có. Nhưng ngay cả một ứng dụng chạy nhanh hơn thường mong đợi có thể ghi vào logfile /var/log.

Vậy chuyện gì xảy ra nếu logfile và đường dẫn đến logfile không tồn tại? Điều đó hoàn toàn phụ thuộc vào ứng dụng. Một số ứng dụng sẽ lặng lẽ bỏ qua đăng nhập. Những người khác sẽ tạo ra rất nhiều cảnh báo. Và những người khác sẽ đơn giản bảo lãnh. Không có quy tắc khó nhanh; tùy thuộc vào sự cảnh giác của nhà phát triển ứng dụng, cũng như mức độ quan trọng của nhà phát triển xem xét khả năng đăng nhập của nó. Tốt nhất là ứng dụng sẽ cố gắng ghi vào hoặc có thể tạo và sau đó ghi vào tệp nhật ký tại một điểm đến bên trong /var/logvà sẽ không thể làm như vậy bởi vì nó được điều hành bởi người dùng không có đặc quyền ghi vào đó là một phần của hệ thống tập tin.

Vì vậy, câu trả lời ngắn gọn là không, đừng xóa mọi thứ trong /var/logđó - nó phá vỡ những người dùng hợp đồng có đủ đặc quyền để làm những việc như vậy với các ứng dụng chạy trên hệ thống của họ và sẽ gây ra một số tiếng ồn, một số lỗi im lặng để đăng nhập và một số phá vỡ tất cả.

Hành động thích hợp cần thực hiện là thiết lập logrotatevới các tệp cấu hình phù hợp. Thông thường luân chuyển sẽ được liên kết với một công việc cron. Xoay có thể là dựa trên khoảng, hoặc dựa trên kích thước, hoặc cả hai. Thậm chí có thể thiết lập các quy tắc tránh xoay vòng dựa trên khoảng thời gian nếu logfile vẫn trống khi hết khoảng thời gian. Xoay có thể bao gồm gửi thư của logfiles, nén, xóa, băm nhỏ, v.v.

Người dùng trung bình sẽ không cần quá quan tâm đến việc xoay vòng nhật ký. Các nhà phát triển có thể muốn đảm bảo rằng các bản ghi họ sử dụng có các quy tắc xoay được thiết lập. Trên thực tế, có khả năng cách cư xử tốt của các nhà phát triển là thiết lập xoay vòng nhật ký khi cài đặt cho bất kỳ nhật ký cụ thể phần mềm nào mà phần mềm sẽ tạo và viết.


1

Tôi đã thực hiện một trình dọn dẹp đơn giản ở đây:

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

Nó đơn giản:

  • Xóa tên tệp với các mẫu tên tệp được bảo vệ sau /var/log
    • ^.*/.+\.[[:digit:]]+(\.[[:alpha:]]+)?$
    • ^.*/.+\.old$ (trường hợp không nhạy cảm)
  • Cắt bớt / Làm trống các tệp có tên tệp với các mẫu tên tệp nhật ký sau /var/log
    • ^.*/.+\.log$ (trường hợp không nhạy cảm)

-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

tạo một tập lệnh thực thi và thử chạy với quyền root nếu sudo không hoạt động cho bạn

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.