Видалити всі / var / log?


26

Чи можна видалити все в /var/log? Або я повинен видаляти лише файли (рекурсивно), /var/logале залишати папки?

Хтось має хороший rmкомандний рядок? (Мої навички адміністратора залишають мене нервувати.)

Примітка: я використовую Debian. Я не впевнений, яка версія.


3
Видалення файлів журналів - це погана ідея (вам також потрібно буде знайти кожен запущений процес, у якого є власний файл журналу, і "вбити -HUP" його, м'який перезапуск, який призведе до того, що програма відтворить усі необхідні файли журналу). Я б настійно не радив видаляти файли журналів, покладаюся на такі утиліти, як logrotate, щоб керувати вмістом / var / log для вас автоматично (це робить такі речі, як HUP-процеси) Якщо я, можливо, хотів би вирішити це з іншого кута. Яку проблему ви намагаєтеся вирішити, що спонукало вас до цього?
Twirrim

Відповіді:


22

Замість видалення файлів слід обертати їх, наприклад, використовувати logrotate.

Ви ніколи не знаєте, коли вам справді потрібні будуть журнали з деякого часу тому, тому краще їх архівувати (до розумного віку, наприклад, 3 місяці).

logrotate може стискати ваші старі файли журналів, щоб вони не займали багато місця на диску.


3
logrotate також може видалити найстаріші файли.
Кевін М

8
Отже, видалення всіх журналів IMHO може мати ідеальний сенс у деяких випадках. Наприклад, я хочу створити образ Virtial Machine, який буде використовуватися для нових розгортань. Потрібно сказати, що я хотів би, щоб це була дійсно чиста система без збережених журналів, історій, кеш-програм тощо.
Іван

2
Вибачте, але перегляд файлів журналів три місяці - це археологія. Якщо ви збираєте журнали для виявлення проблем, то швидко їх оцінюйте.
контрмоде

4
@countermode Ви ніколи не налаштовані на ностальгію? Як дивитись на 3-місячні файли журналів, думаючи про добрі часи?
Броко

Гаразд, я бачу команду. Як ним користуватися? людина logrotate каже використовувати його в cron. Я думаю, що з -f варіант?
SDsolar

17

Якщо ви видалите все в / var / log, швидше за все, ви отримаєте багато повідомлень про помилки за дуже мало часу, оскільки там є папки, які, як очікується, існуватимуть (наприклад, exim4, apache2, apt, чашки, mysql, samba і більше). Плюс: є деякі сервіси чи програми, які не створюватимуть свої файли журналів, якщо вони не існують. Вони очікують, що принаймні порожній файл буде присутній. Тож пряма відповідь на ваше запитання насправді - "Не робіть цього !!!" .

Як вказував Джоші, немає ніяких причин для цього. У мене працюють сервери debian, які не видаляли жодного файлу журналу протягом багатьох років.


Я цього не усвідомлював. добре знати. +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 перед упаковкою.
Рудольф Вавруч

10

Я клоную віртуальні машини від майстра. Має досконалий сенс очистити журнал майстра, щоб при завантаженні клонів ви не отримали журнал господаря. Я робив у tcsh:

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

який очищає журнали, але зберігає файли.


Це має бути обмежено випадком використання, як ви описуєте.
Свен

4
In 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
Корисний сценарій.
Анмоль Сінгх Джаггі

Ви можете поміняти cp /dev/null $CLEANна > $CLEAN.
ThoriumBR

2

Ви можете використовувати опцію ctime для пошуку старих файлів ... наприклад:

find -ctime +30

Як пояснюють bindbn, спершу спробуйте знайти файли пошуку і після використання опції 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. Обертання може бути інтервальним, або розміром, або обом. Можна навіть встановити правила, що уникають обертання на основі інтервалу, якщо файл журналу все ще порожній, коли інтервал закінчується. Обертання може включати розсилку журналів, стиснення, видалення, подрібнення тощо.

Пересічному користувачеві не потрібно буде надто турбуватися про обертання журналу. Розробники, ймовірно, хочуть переконатися, що для журналів, які вони використовують, встановлені правила повороту. Насправді, ймовірно, що розробники налаштовують обертання журналу під час встановлення для будь-яких журналів, специфічних для програмного забезпечення, які програмне забезпечення створюватиме та записувати.


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

зробіть виконуваний сценарій і спробуйте запустити як root, якщо sudo не працює для вас

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.