Я читаю некоторые статьи, и я видел эту команду:
lsof|gawk '$4~/txt/{next};/REG.*\(deleted\)$/{printf ">/proc/%s/fd/%d\n", $2,$4}'
Мог некоторое тело помогать мне понять это
Эта команда распечатает файлы от 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}'