Відповіді:
Ця команда буде друкувати файли з lsofпотрібного усікання.
(Він фактично не видаляє і не врізає жодні файли).
lsof поверне список відкритих файлів (дескрипторів файлів), які прокладені в awk, який обробляє його наступним чином.
gawk '$4~/txt/{next};/REG.*\(deleted\)$/{printf ">/proc/%s/fd/%d\n", $2,$4}'
Вищенаведений вираз містить два регулярні вирази, розділені крапкою з двокрапкою ;
давайте розглянемо першу частину gawk '$4~/txt/{next};
Тут, якщо 4-е поле містить, txtбуде прочитаний наступний рядок тексту, який сценарій почне обробляти з початку знову.
У nextзаяві сили AWK негайно припинити обробку поточного запису і перейти до наступного запису. Це означає, що подані правила не виконуються для поточного запису, а решта дій поточного правила не виконується.
Тепер розглянемо другу частину сценарію /REG.*\(deleted\)$/{printf ">/proc/%s/fd/%d\n", $2,$4}'
Тут, якщо рядок відповідає регулярному виразу /REG.*\(deleted\)$( $засоби, які (deleted)мають бути останнім словом у рядку), він просто надрукує >/proc/%s/fd/%d\n", $2,$4.
У команді lsof $4- це номер дескриптора файлу (наприклад 53w, wзасіб відкриття файлу для запису) або тип файлу, залежно від файлу. %dУ printfгарантує , що тільки номери будуть роздруковані, видалення будь-яких текстових символів (на кшталт w). $2друкує ідентифікатор процесу, який використовує файл, щоб він надрукував щось подібне >/proc/3989/fd/53і так далі він буде друкувати всі файли, які були видалені, але дескриптор файлу залишається відкритим, іншими словами, дескриптори файлів, які можна безпечно усікати.
Ця команда скоротить видалені файли з lsof.
Першим буде список відкритих файлівlsof
потім шукайте рядки рекурсивно один, а потім той, {next}який містить REG '$4~/txt/{next};/REG.*\(deleted\)$/як четвертий параметр, тоді цей процес відносно цього рядка буде видалений
а потім надрукувати всі результати без рядків, що містять REG і позначених як видалені.{printf ">/proc/%s/fd/%d\n", $2,$4}'
shдля фактичного усічення і Morever є два регулярні вирази не один , як у вашому поясненні