В какой-то момент у вас, как у системного инженера или администратора, может возникнуть необходимость очистить огромный файл журнала, чтобы сэкономить место на системном диске или по какой-либо другой причине. Существуют различные способы очистки файлов в системе Linux.
Очистить файл журнала с помощью команды truncate
Самый безопасный способ очистить лог-файл в Linux – это использовать команду truncate. Команда truncate используется для уменьшения или увеличения размера каждого ФАЙЛА до указанного размера.
truncate -s 0 logfile
Где -s
используется для установки или изменения размера файла на SIZE байт. Адрес file
может быть относительным к текущему каталогу или абсолютным путем к указанному файлу.
Для получения полной информации о параметрах команды truncate используйте опцию --help
$ truncate --help
Usage: truncate OPTION... FILE...
Shrink or extend the size of each FILE to the specified size
A FILE argument that does not exist is created.
If a FILE is larger than the specified size, the extra data is lost.
If a FILE is shorter, it is extended and the extended part (hole)
reads as zero bytes.
Mandatory arguments to long options are mandatory for short options too.
-c, --no-create do not create any files
-o, --io-blocks treat SIZE as number of IO blocks instead of bytes
-r, --reference=RFILE base size on RFILE
-s, --size=SIZE set or adjust the file size by SIZE bytes
--help display this help and exit
--version output version information and exit
The SIZE argument is an integer and optional unit (example: 10K is 10*1024).
Units are K,M,G,T,P,E,Z,Y (powers of 1024) or KB,MB,... (powers of 1000).
SIZE may also be prefixed by one of the following modifying characters:
'+' extend by, '-' reduce by, '<' at most, '>' at least,
'/' round down to multiple of, '%' round up to multiple of.
GNU coreutils online help: <https://www.gnu.org/software/coreutils/>
Full documentation at: <https://www.gnu.org/software/coreutils/truncate>
or available locally via: info '(coreutils) truncate invocation'
Для нескольких файлов можно использовать подстановочный знак, например:
truncate -s 0 /var/log/*log
Для вложенных папок:
truncate -s 0 /var/log/**/*.log
Или с помощью цикла for и усечения:
for logfile in $(ls /var/log/*.log)
do
truncate -s 0 $logfile
done
Пустой файл журнала с использованием :> или true >
Вы также можете использовать :>
для очистки содержимого файла. Синтаксис следующий
:> logfile
Это эквивалентно
true > logfile
См. пример ниже

Пустой файл журнала с помощью команды echo
Если ничего не передавать в файл, то он очистится от содержимого и станет пустым.
echo "" > logfile
Это то же самое, что
echo > testfile
Пустой файл журнала с помощью команды dd
Синтаксис для использования dd
следующий
dd if=/dev/null of=logfile
или
dd if=/dev/null > logfile
См. примеры ниже
$ ls -l testfile
-rw-r--r-- 1 jmutai jmutai 1338 Oct 2 23:07 testfile
$ [jmutai@arch tmp]$ ls -l testfile
-rw-r--r-- 1 jmutai jmutai 1338 Oct 2 23:07 testfile
[jmutai@arch tmp]$ dd if=/dev/null of=testfile
0+0 records in
0+0 records out
0 bytes copied, 0.000322652 s, 0.0 kB/s
[jmutai@arch tmp]$ ls -l testfile
-rw-r--r-- 1 jmutai jmutai 0 Oct 2 23:33 testfile
Для нескольких файлов достаточно простого цикла в bash.
for file in logfile1 logfile2 logfile2 ... ; do
truncate -s 0 $file
#or
dd if=/dev/null of=$file
#or
:>$file
done
Пустой файл журнала с помощью команды find и truncate
Вы также можете использовать команду find, чтобы найти все .log файлы в каталоге и усекаются.
find /var/log -type f -iname '*.log' -print0 | xargs -0 truncate -s0
Для любого файла с ключевым словом log:
find /var/log -type f -iname '*log' -print0 | xargs -0 truncate -s0
Используйте любой из этих методов для очистки больших файлов журнала.