Как очистить файл журнала? [Дубликат]

    

У этого вопроса уже есть ответ:

    

Есть ли лучший способ очистить файл журнала? Я обычно удаляю старый файл журнала и создаю новый файл журнала, и я ищу более короткую программу типа /bash /command. Как я могу использовать псевдоним?

150 голосов | спросил Bytemain 26 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 26 Sep 2013 00:14:17 +0400 2013, 00:14:17

1 ответ


309
> logfile

или

cat /dev/null > logfile

или

true | tee logfile

(не подлежит замене false) или любой другой команды, которая не производит вывод, например, : делает в bash), если вы хотите быть более красноречивым, будет пустым logfile (на самом деле они обрезают его до нулевого размера).

Если вы хотите знать, как долго он «берет», вы можете использовать

dd if=/dev/null of=logfile

(это то же самое, что и dd if=/dev/null > logfile)

Вы также можете использовать

truncate --size 0 logfile

(или truncate -s 0 logfile), чтобы быть совершенно явным или, если вы не хотите,

rm logfile

(в этом случае вы полагаетесь на общее поведение, которое приложения обычно восстанавливают в файле журнала, если он еще не существует).

Однако, поскольку файлы журналов обычно полезны, вы можете захотеть сжать и сохранить копию. Хотя вы можете сделать это со своим собственным скриптом, неплохо по крайней мере попытаться использовать существующее рабочее решение, в данном случае logrotate, которое может сделать именно это и разумно настраивается.

Если вам нужно сделать это для нескольких файлов, безопасный способ

truncate -s 0 file1 file2 ...

или

> file1 > file2 ...

Некоторые оболочки (zsh) также позволяют указать несколько целей перенаправления.

Это работает (по крайней мере, в bash), так как он создает все необходимые перенаправления, хотя только последний может поймать любой вход (или ни один в этом случае). Пример tee с несколькими файлами должен работать в любом случае (если ваш tee знает, как обрабатывать несколько выходных файлов)

Конечно, хороший старый цикл оболочки также будет работать:

 for f in file1 file2 ... ; do
    # pick your favourite emptying method
done

, хотя он будет намного медленнее из-за того, что команда запускается отдельно для каждого файла. Это может помочь с помощью find:

find <criteria matching required files> \
    -exec <command capable of zeroing several files> {} \+

или

find <criteria matching required files> -delete
ответил peterph 26 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 26 Sep 2013 00:26:42 +0400 2013, 00:26:42

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132