Введение
В некоторых ситуациях может потребоваться обрезать (очистить) существующий файл нулевой длины. Проще говоря, усечение файла означает удаление содержимого файла без удаления самого файла.
Усечение файла намного быстрее и проще, чем его удаление или повторное создание с установкой правильных разрешений и свойств. Кроме того, если файл открыт процессом, удаление файла может привести к сбою в работе программы, которая его использует.
В этом руководстве объясняется, как обрезать файлы нулевого размера в системах Linux с помощью перенаправления оболочки и команды truncate
.
Перенаправление оболочки
Самый простой и наиболее часто используемый метод усечения файлов — использовать оператор перенаправления оболочки >
.
Общий формат для усечения файлов с использованием перенаправления:
: > filename
Разберем команду:
- Двоеточие
:
означает «true
и не производит никакого вывода. - Оператор перенаправления
>
перенаправляет вывод предыдущей команды в указанный файл. filename
, файл, который вы хотите обрезать.
Если файл существует, он будет обрезан до нуля. В противном случае файл будет создан.
Вместо :
вы также можете использовать другую команду, которая не выводит ничего.
Вот пример использования команды cat
для генерации содержимого устройства /dev/null
, которое возвращает только символ конца файла:
cat /dev/null > filename
Другая команда, которую можно использовать, — это echo
. Параметр -n
указывает не добавлять новую строку:
echo -n > filename
В большинстве современных оболочек, таких как Bash или Zsh, вы можете опустить команду перед символом перенаправления и использовать:
> filename
Чтобы иметь возможность обрезать файл, у вас должны быть права на запись в файл. Обычно вы должны использовать команду sudo
, но повышенные привилегии root не применяются к перенаправлению. Вот пример:
sudo: > /var/log/syslog
Вы должны получить выходное сообщение, подобное следующему:
bash: /var/log/syslog: Permission denied
Есть несколько решений, позволяющих выполнять перенаправление с помощью sudo
. Первый вариант может запустить новую оболочку с помощью sudo и выполнить команду в этой оболочке с использованием флага -c
:
sudo sh -c '> filename'
Другой вариант — перенаправить вывод команде tee
, повысить привилегии tee
с помощью sudo
и записать пустой вывод в определенный файл:
: | sudo tee filename
Команда усечения
truncate
— это утилита командной строки, которая позволяет уменьшить или увеличить размер файла до определенного размера.
Общий синтаксис для усечения файлов нулевого размера с помощью команды truncate
следующий:
truncate -s 0 filename
Параметр -s 0
устанавливает размер файла равным нулю.
Например, чтобы очистить журнал доступа Nginx (файл журнала), вы должны использовать:
sudo truncate -s 0 /var/log/nginx/access.log
Очистить все файлы журнала (журнал)
Со временем ваш диск может быть загроможден множеством больших файлов журналов, которые занимают много места на диске.
Следующая команда сбрасывает файлы, оканчивающиеся на « .log », в каталог /var/log
:
sudo truncate -s 0 /var/log/**/*.log
Лучшим вариантом будет поворот, сжатие и удаление файлов журнала с помощью инструмента logrotate
.
Вывод
Чтобы обрезать файл в Linux, используйте оператор перенаправления >
, за которым следует имя файла.