лучшие команды добавления фильтра через параметры командной строки

#linux #bash #filter

#linux #bash #Фильтр

Вопрос:

Я пытаюсь добавить команды фильтра в top для неинтерактивного использования. При использовании top можно задавать фильтры в интерактивном режиме, например

 $ top
Type: o
Enter: COMMAND=MyProcess
  

будут показаны только те процессы, в команде которых есть «MyProcss».

Кроме того, настройки отображения top можно сохранить в файл с помощью «W» из командной строки в $HOME /.toprc. Затем, когда top запустится снова, он будет использовать эти настройки отображения вместо настроек по умолчанию.

Но, похоже, что фильтры, которые добавляются через «COMMAND = …», не сохраняются в файле .toprc. Итак, возможно ли добавить эти фильтры через командную строку, чтобы top мог выводить данные неинтерактивно? Я не могу использовать опцию top «-p» для отображения данных из определенных PID, поскольку у меня есть более 20 PID, которые необходимо отслеживать, и они могут быть добавлены после вызова top. Кроме того, я не хочу выводить данные для всех 900 процессов, запущенных на моем компьютере.

Наконец, я действительно не хочу просто grep имена процессов, так как я хочу заголовок top, а также.

В идеале псевдокоманда должна быть такой, но это не работает:

 top -b -o 'COMMAND=MyProcess' -o '!COMMAND=NotThisProcess'
  

Ответ №1:

Согласно моей top справочной странице, -o это только для порядка сортировки. Я не вижу параметров командной строки для указания «другого» фильтра. И -b опция исключает чтение пользовательского ввода для ввода фильтра.

Предполагая, что ваш top похож на мой, есть 7 строк заголовков. Итак, если вы хотите видеть только процессы «myProcess», вы можете сделать это:

 top -b -n 1 | sed '8,$ {/MyProcess/! d}'
  

Это означает, что начиная со строк 8 и до конца, удалите любую строку, которая не содержит myProcess.

Комментарии:

1. OP ссылался на интерактивную команду «o», которая отличается от аргумента команды -o. Интерактивная команда «o» называется «Другой фильтр». Решение sed здесь также отсутствует, поскольку OP говорит, что им нужно «отслеживание» процессов, а не просто мгновенный снимок.

2. @KevinRak что касается проблемы с отслеживанием, есть возможность использовать watch для мониторинга

Ответ №2:

Какую лучшую версию вы используете ( top -v )? Это важно, поскольку в некоторых версиях указано, что «активные «другие фильтры»» сохраняются в файле ЛИЧНОЙ конфигурации, в то время как в других этого не делается. Например, сравните главную справочную страницу на man7.org против того, что на manpages.ubuntu.com

Для меня top -v возвращает procps-ng 3.3.12

Просматривая репозиторий procps-ng, я вижу, что была проблема с добавлением поддержки для этого. Эта проблема была решена, и была добавлена поддержка сохранения других фильтров в файл конфигурации, которая доступна в версии 3.16

Итак, для моей среды обновление top до 3.3.16 дало бы мне функцию конфигурации, которую вы ищете. Очевидно, что ваша среда может отличаться.

При этом я не нашел никакого способа передать это в качестве аргумента команды. Но с некоторыми сценариями оболочки и манипуляциями sed с файлом конфигурации это можно было бы обработать.

Ответ №3:

Я использую инструмент «ожидать» для запуска «top», ввода команд фильтрации, затем позволяю top продолжать работать в обычном режиме.

 #!/usr/bin/env expect
spawn top
expect "COMMAND"
send "O"
expect "add filter"
send "COMMAND=MyProcessn"
interact
  

При использовании expect вы обычно должны дождаться некоторого ожидаемого результата перед отправкой следующих нажатий клавиш. Я выбрал КОМАНДУ из заголовков top, чтобы дождаться запуска top, и «добавить фильтр» после отправки «O», чтобы убедиться, что top готов к строке фильтрации. Команда «interact» сообщает, что ожидайте продолжения выполнения команды и передачи всего ввода / вывода без изменений до завершения работы команды.

Expect — это интерпретатор tcl, поэтому вы могли бы добавить поддержку передачи аргументов командной строки в команду top при поиске дополнительных аргументов фильтрации и преобразовании их в последовательности ожидания / отправки. В моем варианте использования была фиксированная команда, и мне не нужны были дополнительные опции для top, поэтому мне был нужен жестко запрограммированный сценарий ожидания.