В некоторых ситуациях вам может потребоваться обрезать (очистить) существующий файл до нулевой длины. Проще говоря, усечение файла означает удаление содержимого файла без удаления файла.
Усечение файла намного быстрее и проще, чем удаление файла , его воссоздание и установка правильных разрешений и прав собственности . Кроме того, если файл открывается каким-либо процессом, его удаление может вызвать сбой в работе программы, которая его использует.
В этом руководстве объясняется, как обрезать файлы до нулевого размера в системах 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, используйте оператор перенаправления >
за которым следует имя файла.
Если у вас есть вопросы или замечания, пожалуйста, оставьте комментарий ниже.