Кто-нибудь может дать мне решение обрезать все файлы журнала в /var/log/
каталоге?
и вопрос только для знания, это хорошая идея или нет?
#!/bin/bash
LOGDIR="/var/log"
for logfile in $(ls $LOGDIR/*log)
do
truncate -s 0 $logfile
done
command-line
scripts
files
log
pylover
источник
источник
/var/log
это то, где система помещает сообщения, которые вам могут понадобиться позже. Ubuntu сталкивался с проблемой раньше. Читатьman 8 logrotate;man logrotate.conf
.Ответы:
попробуй это:
truncate -s 0 /var/log/*log
РЕДАКТИРОВАТЬ:
если вы хотите сделать это более одного раза, вы должны использовать
logrotate
для обработки ваших журналов. Обычно он устанавливается в Ubuntu. Посмотритеman logrotate
(или, если у вас не установлено приложение, посмотрите онлайн-страницу руководства или установите его с помощьюsudo apt-get install logrotate
)с man-страницы:
источник
Если вы хотите очистить все файлы журналов, а не только те, которые находятся в папке журналов первого уровня, вы можете использовать:
Обратите внимание, что если у вас уже есть
logrotate
запущенный, вам также необходимо очистить повернутые.gz
логи:Допустимое использование для этого может быть, например, создание контейнера устройства VM для распространения.
Вам не нужно делать это как часть обычного обслуживания: как правильно предположил DEM, используйте
logrotate
для этого.источник
Как следить за ответом @DEN
Это позволит найти все файлы журнала
/var/log
и обрезать их до 0 байтов.источник
*.log*
вместо этого, но я не уверен, что это на 100% безопасно, поэтому я не включил его в ответ. Потому что есть файлы, какdovecot.log-20180930
иdovecot.log-20180923.gz
.Существует несколько методов полного усечения файла, обычно применимых к большинству POSIX-совместимых ОС. Чаще всего вы видите сценарии оболочки - это что-то вроде
true > file.txt
или: > file.txt
(и в случаеbash
оболочки>
достаточно только перенаправления). Это связано с тем, как>
файлы открываются с помощьюopen()
илиopenat()
системным вызовом сO_WRONLY|O_CREAT|O_TRUNC
флагами - это чтение только для записи, ИЛИ создание, если имя файла не существует, ИЛИ обрезание существующего имени файла.Имея это в виду, мы можем реализовать что-то подобное в C:
Назовите файл, в котором хранится этот код,
trunc.c
и скомпилируйте егоgcc trunc.c -o trunc
, и у вас есть небольшая утилита, которая усекает аргумент имени файла, который он предоставляет, как вtrunc ./foobar.txt
. Конечно, этот код не выполняет другие проверки, он только усекает первый позиционный параметр. Я оставлю это на усмотрение читателей, чтобы выяснить, как обращаться с более чем одним позиционным параметром. Кроме того, естьtruncate()
системный вызов, который мы также можем использовать и обрезать файл до переменной длины.Теперь, если вы не фанат C, Python может быть проще для вас.
open()
Команда работает по тому же принципу в Python - открытие файла для записи и усечения, если имя файла существует. Таким образом, мы можем сделатьЧто касается поиска всех
.log
файлов, это уже было рассмотрено в других ответах - используйте*
glob или extended globbash
. Такжеfind -type f -name "*.log"
есть-exec
флаг , который запускает команды (в данном конкретном случаеsh -c ''
использовать это преимущество,>
потому что>
это оператор оболочки, а не внешний исполняемый файл). Таким образом, вы можете сделатьТакже стоит отметить, что файлы журнала в каталоге, такие как
/var/log
часто, вращаются сервисом logrotate, поэтому будут имена файлов, такие как/var/log/service.log
,/var/log/service.log.1
и т. Д., Так что вы можете использовать*.log.[1-9]
шаблон вместоСреди прочего мы можем скопировать
/dev/null
в нужный файл. Как ни странно, несмотря на то,/dev/null
что это файл с символьным типом устройства, когда вы копируете его в другое место, результатом будет пустой обычный файл, по крайней мере с GNUcp
. Таким образом, мы можем сделатьили
Другое предлагаемое чтение:
источник
Хорошей практикой является вращение журналов в / var / logs для вращения с функциональностью logrotate, но не всякий раз, когда мы этого хотим. Системные журналы будут распечатаны ей и они пригодятся для отладки любых сбоев.
Если требуется не использовать logrotate, то варианты можно изучить. Хотя усечение является простой опцией в некоторых разновидностях Unix-системы, эта команда недоступна, ее необходимо установить. Если не разрешено устанавливать новую команду, то можно использовать цикл ниже.
источник
for logfile in /path/*.log
вместо этого.