
В некоторых ситуациях может потребоваться обрезать (очистить) существующий файл до нулевой длины. Проще говоря, обрезание файла означает удаление его содержимого без удаления самого файла.
Усечение файла гораздо быстрее и проще, чем его удаление , повторное создание и настройка правильных прав доступа и владельца . Кроме того, если файл открыт каким-либо процессом, его удаление может привести к сбоям в работе программы, использующей его.
В этом руководстве объясняется, как обрезать файлы до нулевого размера в системах Linux с помощью перенаправления оболочки и команды truncate .
перенаправления оболочки
Самый простой и наиболее используемый метод усечения файлов — использование оператора перенаправления оболочки > .
Общий формат усечения файлов с использованием перенаправления:
: > filename
Давайте разберем команду:
- Двоеточие
:означаетtrueи не создает никаких выходных данных. - Оператор перенаправления
>перенаправляет вывод предыдущей команды в указанный файл. -
filename— файл, который вы хотите обрезать.
Если файл существует , он будет обрезан до нуля. В противном случае файл будет создан.
Вместо : можно также использовать другую команду, которая не выводит никаких данных.
Вот пример использования команды cat для вывода содержимого устройства /dev/null , которая возвращает только символ конца файла:
cat /dev/null > filename
Другая команда, которую можно использовать, — это echo . Опция -n указывает echo не добавлять новую строку:
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 выглядит следующим образом:
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, используйте оператор перенаправления > , за которым следует имя файла.
Если у вас есть вопросы или замечания, пожалуйста, оставьте комментарий ниже.
Связанные руководства