Как обрезать (пустые) файлы в Linux

В некоторых ситуациях вам может потребоваться обрезать (очистить) существующий файл до нулевой длины. Проще говоря, усечение файла означает удаление содержимого файла без удаления файла.

Усечение файла намного быстрее и проще, чем удаление файла , его воссоздание и установка правильных разрешений и прав собственности . Кроме того, если файл открывается каким-либо процессом, его удаление может вызвать сбой в работе программы, которая его использует.

В этом руководстве объясняется, как обрезать файлы до нулевого размера в системах 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, используйте оператор перенаправления > за которым следует имя файла.

Если у вас есть вопросы или замечания, пожалуйста, оставьте комментарий ниже.

Оставьте комментарий