Что делает lsof|gawk '4$ ~/txt/{затем};/REG.* \(удалил \) $ / {printf “>/proc / % s/fd / % d\n”, 2$, 4$}' управляют средний

Я читаю некоторые статьи, и я видел эту команду:

lsof|gawk '$4~/txt/{next};/REG.*\(deleted\)$/{printf ">/proc/%s/fd/%d\n", $2,$4}'

Мог некоторое тело помогать мне понять это

9
задан 12 March 2014 в 03:06

2 ответа

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

7
ответ дан 16 November 2019 в 16:21

Эта команда усечет удаленные файлы от lsof.

Это сначала перечислит открытые файлы lsof

тогда поиск строк рекурсивно один тогда одна {next}, которые содержат REG '$4~/txt/{next};/REG.*\(deleted\)$/ как четвертый параметр тогда, этот процесс относительно этой строки будет удален

и затем распечатает все результаты без строк, содержащих REG и отмеченный, как удалено. {printf ">/proc/%s/fd/%d\n", $2,$4}'

2
ответ дан 16 November 2019 в 16:21

Другие вопросы по тегам:

Похожие вопросы: