обрезать (очистить) файлы

Thank you for reading this post, don't forget to subscribe!

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

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

В этой ста­тье объ­яс­ня­ет­ся, как обре­зать фай­лы до нуле­во­го раз­ме­ра в систе­мах Linux с помо­щью пере­на­прав­ле­ния обо­лоч­ки и коман­ды truncate.

 

Самый про­стой и наи­бо­лее исполь­зу­е­мый метод для усе­че­ния фай­лов – это исполь­зо­ва­ние опе­ра­то­ра пере­на­прав­ле­ния  > оболочки.

Общий фор­мат для усе­че­ния фай­лов с исполь­зо­ва­ни­ем перенаправления:

 

Давай­те раз­бе­рем команду:

  • : озна­ча­ет true и не про­из­во­дит ника­ко­го вывода.
  • Опе­ра­тор пере­на­прав­ле­ния > пере­на­прав­ля­ет вывод преды­ду­щей коман­ды в ука­зан­ный файл.
  • filename, файл, кото­рый вы хоти­те усечь.

Если файл суще­ству­ет, он будет обре­зан до нуля. В про­тив­ном слу­чае файл будет создан.

Вме­сто :мож­но так­же исполь­зо­вать дру­гую коман­ду, кото­рая не выда­ет ника­ких результатов.

Вот при­мер исполь­зо­ва­ния catко­ман­ды для выво­да содер­жи­мо­го устрой­ства /dev/null, кото­рое воз­вра­ща­ет толь­ко сим­вол кон­ца файла:

 

Еще одна коман­да, кото­рая может быть исполь­зо­ва­на echo. Опция -n гово­рит echo не для добав­ле­ния новой строки:

 

В боль­шин­стве совре­мен­ных обо­ло­чек, таких как Bash или Zsh, вы може­те опу­стить коман­ду перед сим­во­лом пере­на­прав­ле­ния и использовать:

 

Что­бы иметь воз­мож­ность усе­кать файл, вам необ­хо­ди­мо иметь пра­ва на запись в файл. Обыч­но вы бы исполь­зо­ва­ли sudoд­ля это­го, но при­ви­ле­гии супер­поль­зо­ва­те­ля не при­ме­ня­ют­ся к пере­на­прав­ле­нию. Вот пример:

 

 

Есть несколь­ко реше­ний, кото­рые поз­во­ля­ют пере­на­прав­лять с sudo. Пер­вый вари­ант может запу­стить новую обо­лоч­ку с помо­щью sudo и выпол­нить коман­ду внут­ри этой обо­лоч­ки, исполь­зуя флаг -c:

 

Дру­гой вари­ант – напра­вить вывод в teeко­ман­ду, повы­сить tee­при­ви­ле­гии sudoи запи­сать пустой вывод в задан­ный файл:

Коман­да truncate

truncate это ути­ли­та команд­ной стро­ки, кото­рая поз­во­ля­ет умень­шить или рас­ши­рить раз­мер фай­ла до задан­но­го размера.

Общий син­так­сис для усе­че­ния фай­лов до нуле­во­го раз­ме­ра с помо­щью truncateко­ман­ды, выгля­дит сле­ду­ю­щим образом:

 

Пара­метр -s 0 зада­ет раз­мер фай­ла до нуля.

Напри­мер, что­бы очи­стить жур­нал досту­па Nginx, вы долж­ны использовать:

 

Со вре­ме­нем ваш диск может загро­мож­дать­ся боль­шим коли­че­ством боль­ших фай­лов жур­на­ла, зани­ма­ю­щих мно­го места на диске.

Сле­ду­ю­щая коман­да очи­стит фай­лы, закан­чи­ва­ю­щи­е­ся на «.log» в ката­ло­ге /var/log:

 

Луч­шим вари­ан­том будет вра­ще­ние, сжа­тие и уда­ле­ние фай­лов жур­на­лов с помо­щью инстру­мен­та logrotate.

 

Что­бы обре­зать файл в Linux, исполь­зуй­те опе­ра­тор пере­на­прав­ле­ния >, за кото­рым сле­ду­ет имя файла.