Odpowiedzi:
To polecenie wydrukuje pliki, lsofktóre wymagają obcięcia.
(W rzeczywistości nie usuwa ani nie obcina żadnych plików).
lsof zwróci listę otwartych plików (deskryptorów plików), które są przesyłane do awk, który przetwarza je w następujący sposób.
gawk '$4~/txt/{next};/REG.*\(deleted\)$/{printf ">/proc/%s/fd/%d\n", $2,$4}'
Powyższe wyrażenie zawiera dwa wyrażenia regularne oddzielone średnikiem ;
rozważmy pierwszą część gawk '$4~/txt/{next};
Tutaj, jeśli czwarte pole zawiera, txtzostanie odczytany następny wiersz tekstu, który skrypt zacznie ponownie przetwarzać od początku.
Te nextsiły rachunku awk natychmiastowe przerwanie przetwarzania bieżącego rekordu i przejść do następnego rekordu. Oznacza to, że dla bieżącego rekordu nie są wykonywane żadne dalsze reguły, a reszta działania bieżącej reguły nie jest wykonywana.
Teraz rozważmy drugą część skryptu /REG.*\(deleted\)$/{printf ">/proc/%s/fd/%d\n", $2,$4}'
Tutaj, jeśli wiersz pasuje do wyrażenia regularnego /REG.*\(deleted\)$( $oznacza, że (deleted)powinno to być ostatnie słowo w wierszu), po prostu drukuje >/proc/%s/fd/%d\n", $2,$4.
W poleceniu lsof $4jest numer deskryptor pliku (na przykład 53w, gdy wśrodki filer został otwarty na piśmie) lub filetype, w zależności od pliku. Znak %dw printfzapewnia, że zostaną wydrukowane tylko liczby, usuwając wszelkie znaki tekstowe (takie jak w). $2wypisuje identyfikator procesu, który korzysta z pliku, więc wydrukuje coś podobnego >/proc/3989/fd/53i tak dalej wydrukuje wszystkie pliki, które zostały usunięte, ale których deskryptor pozostaje otwarty, innymi słowy, deskryptory plików, które można bezpiecznie obciąć.
To polecenie obetnie usunięte pliki z lsof.
Ten pierwszy wyświetli listę otwartych plikówlsof
następnie poszukaj rekurencyjnie linii, która następnie {next}zawiera REG '$4~/txt/{next};/REG.*\(deleted\)$/jako czwarty parametr, a następnie ten proces względem tej linii zostanie usunięty
a następnie wydrukuj wszystkie wyniki bez linii zawierających REG i oznaczone jako usunięte.{printf ">/proc/%s/fd/%d\n", $2,$4}'
shrzeczywistego obcięcia, a ponadto istnieją dwa wyrażenia regularne, nie jedno jak w twoim objaśnieniu