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