Скрипт для очистки файлов журналов не удаляет их.

Может кто-нибудь объяснить мне, почему этот сценарий не удаляет файлы / var / logmessages и / var / log / wtmp? Я нашел его в туториале tldp.org

#!/bin/bash
LOG_DIR=/var/log
cd $LOG_DIR
cat /dev/null > messages
cat /dev/null > wtmp
echo "Logs cleaned up"
exit

. После его запуска я проверил каталог / var / log, и сообщения и wtmp все еще находятся там со "старыми" журналами.

Почему это происходит?

-2
14.04.2016, 11:28
1 ответ

Если вам абсолютно необходимо очистить файл журнала, вы должны сделать это как sudo / root и перезапустить демон syslog. Группа adm позволяет только читать, но не записывать (некоторые) файлы журнала.

Имейте в виду, что в системе Unix файл только освобождает используемое пространство / перестает существовать, когда он больше не используется, отсюда и необходимость перезапуска системного журнала, потому что если вы удаляете файл, используя весь раздел журнала вы не увидите освободившееся пространство , пока не перезапустите демон syslog. Точно так же системный журнал будет по-прежнему отправлять журналы в уже "удаленные" файлы, а не в новые, созданные с помощью перенаправления stdout (">"), пока вы не перезапустите его.

Что касается wtmp и сообщений, давайте посмотрим их разрешения по умолчанию:

$ls -la /var/log/messages /var/log/wtmp
-rw-r----- 1 root adm 818148 Apr 14 07:15 /var/log/messages
-rw-rw-r-- 1 root utmp 284928 Apr 14 07:37 wtmp

Итак, сценарий должен быть:

#!/bin/bash
LOG_DIR=/var/log
cd $LOG_DIR
sudo cat /dev/null > messages
sudo cat /dev/null > wtmp
sudo service rsyslogd restart
echo "Logs cleaned up"
exit 0

В конце дня демон syslog также (повторно) создает / var / log / messages с нужными разрешениями, поэтому на самом деле я бы предпочел сделать это следующим образом:

#!/bin/bash
LOG_DIR=/var/log
cd $LOG_DIR
sudo rm messages
sudo sh -c 'cat /dev/null > wtmp'
sudo service rsyslogd restart
echo "Logs cleaned up"
exit 0

Предупреждение: будьте осторожны со скриптами, которые вы запускаете. Вы не должны перезаписывать / var / log / wtmp в производственной системе. Вы хотите иметь историю пользователей, которые вошли в систему.

2
28.01.2020, 05:16

Теги

Похожие вопросы