Удалить все из / var / log?

26

Могу ли я удалить все в /var/log? Или я должен только удалить файлы (рекурсивно), /var/logно оставить папки?

У кого-нибудь есть хорошая rmкомандная строка? (Мои навыки администратора заставляют меня нервничать.)

Примечание: я использую Debian. Я не уверен, какая версия.

Аарон Копли
источник
3
Удаление файлов журналов - плохая идея (вам также нужно найти каждый запущенный процесс, у которого есть собственный файл журнала, и «kill -HUP» - мягкий перезапуск, который приведет к тому, что программа заново создаст все необходимые файлы журналов). Я настоятельно рекомендую не удалять файлы журналов, полагаться на утилиты, такие как logrotate, для автоматического управления содержимым / var / log для вас (он выполняет такие вещи, как HUP процессы). Если бы я хотел решить эту проблему под другим углом. Какую проблему вы пытаетесь решить, и это заставило вас задуматься об этом?
Twirrim

Ответы:

22

Вместо удаления файлов вы должны повернуть их, например, используя logrotate.

Вы никогда не знаете, когда вам действительно понадобятся журналы, поэтому лучше их заархивировать (до разумного возраста, например, до 3 месяцев).

logrotate может сжать ваши старые файлы журнала, чтобы они не занимали много места на диске.

Joschi
источник
3
logrotate также может удалять самые старые файлы.
Кевин М
8
Ну, ИМХО удаление всех логов может иметь смысл в некоторых случаях. Например, я хочу создать образ Virtial Machine, который будет использоваться для новых развертываний. Само собой разумеется, я хотел бы, чтобы это была действительно чистая система без каких-либо сохраненных журналов, историй, кэшей и т. Д.
Иван
2
Извините, но просмотр файлов журнала за три месяца - это археология. Если вы собираете журналы для выявления проблем, оцените их быстро.
контррежим
4
@countermode Вы никогда не в настроении для ностальгии? Как смотреть на 3-месячные файлы журнала, думая о хороших старых временах?
Broco
Хорошо, я вижу команду. Как это использовать? man logrotate говорит, что используйте его в cron. Я полагаю, с опцией -f?
SDsolar
17

Если вы удалите все в / var / log, вы, скорее всего, получите очень много сообщений об ошибках за очень короткое время, так как там есть папки, которые, как ожидается, будут существовать (например, exim4, apache2, apt, cups, mysql, samba и больше). Плюс: есть некоторые службы или приложения, которые не будут создавать свои файлы журналов, если они не существуют. Они ожидают, что будет хотя бы пустой файл. Таким образом, прямой ответ на ваш вопрос на самом деле "Не делай этого !!!" ,

Как указал Йоски, нет никаких оснований для этого. У меня запущены серверы Debian, в которых не было удалено ни одного файла журнала за последние годы.

wolfgangsz
источник
Я не осознавал этого. хорошо знать. +1 + изменил мое согласие.
1
Я только что сделал это. Желания! Я читал этот ответ ранее
VarunAgw
Есть веские причины для удаления лог файлов, ИМХО. Например, вы экспортируете виртуальную машину для использования другими, но вы не хотите, чтобы образ виртуальной машины содержал сведения обо всем, что произошло до экспорта.
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", чтобы проверить это.

bindbn
источник
Я нашел это полезным, чтобы очистить файлы журнала Vagrant box перед упаковкой.
Рудольф Вавруч
10

Я клонирую виртуальные машины от мастера. Имеет смысл очистить журнал мастера, чтобы при загрузке клонов вы не получили журнал мастера. Я сделал в tcsh:

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

который очищает журналы, но сохраняет файлы.

Дрор
источник
Это должно быть ограничено вариантом использования, подобным описанному вами.
Свен
4
В bash: найдите / 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 не работает для вас

Ab edmo ri
источник