Запросить страницу man Linux для определенного флага

Вопрос или проблема

Я часто открываю страницы man определенного инструмента командной строки только для того, чтобы проверить определенный флаг, например, man iptables, чтобы проверить флаг -t.

Существует ли какой-либо инструмент, который упрощает это? Я мог бы, конечно, написать простую функцию на Bash, которая будет искать содержимое man страниц, но я ищу что-то, что использует структуру man страниц, чтобы находить именно то, что мне нужно (то есть описание определенного флага).

Предполагая, что ваш man pager — less, вы можете передать любую команду в less заранее, используя переменную окружения LESS.

Поэтому для поиска опции -t команды man iptables:

LESS='+/-t' man iptables

Это имеет тот же эффект, что и запуск /-t внутри man iptables. Вы можете изменить шаблон для более точного управления.

Если хотите, вы можете сделать функцию для более удобного доступа:

search_man () { LESS=+/"$2" man "$1" ;}

Теперь запустив:

search_man iptables '-t'              

это даст тот же эффект.


ПРАВКА:

Если вы хотите перейти к конкретной опции man страницы, а не искать, вы можете использовать регулярные выражения с LESS:

LESS='+/^[[:blank:]]+-t' man iptables

это приведет вас прямо к описанию опции -t в man iptables. Вы также можете определить функцию аналогично:

search_man () { LESS=+/^[[:blank:]]+"$2" man "$1" ;}

Я не нашел API/механизм для запроса man страниц по определенному флагу. Однако эта простая функция похоже делает то, что мне нужно:

function manswitch () { man $1 | less -p "^ +$2" }

Использование:

manswitch iptables -t

Есть одно дело. Сейчас. Эта функция:

flag() {
    man "$1" | grep -- "$2";
}

Она работает так:

$ flag iptables -t
iptables [-t table] {-A|-C|-D} chain rule-specification
ip6tables [-t table] {-A|-C|-D} chain rule-specification
iptables [-t table] -I chain [rulenum] rule-specification
iptables [-t table] -R chain rulenum rule-specification
iptables [-t table] -D chain rulenum
iptables [-t table] -S [chain [rulenum]]
iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...]
iptables [-t table] -N chain
iptables [-t table] -X [chain]
iptables [-t table] -P chain target
iptables [-t table] -E old-chain-name new-chain-name
target = -j targetname [per-target-options]
-t, --table table
           Это  стандартная таблица (если не передан флаг -t). Это
        iptables -t nat -n -L

Ну что ж, последние две строки порушены.

В любом случае, вы знаете, как добавить это в ваш .bashrc? Или вы предпочитаете это как скрипт в вашем ~/bin?

VERSION 1.1

flag() {
    man "$1" | grep -A5 -- "$2";
}

$ flag iptables -t
       iptables [-t table] {-A|-C|-D} chain rule-specification

       ip6tables [-t table] {-A|-C|-D} chain rule-specification

       iptables [-t table] -I chain [rulenum] rule-specification

       iptables [-t table] -R chain rulenum rule-specification

       iptables [-t table] -D chain rulenum

       iptables [-t table] -S [chain [rulenum]]

       iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...]

       iptables [-t table] -N chain

       iptables [-t table] -X [chain]

       iptables [-t table] -P chain target

       iptables [-t table] -E old-chain-name new-chain-name

       rule-specification = [matches...] [target]

       match = -m matchname [per-match-options]

       target = -j targetname [per-target-options]

DESCRIPTION
       Iptables  и ip6tables используются для настройки, поддержания и проверки таблиц правил фильтрации пакетов IPv4 и IPv6 в ядре Linux.  Может быть определено несколько различных таблиц. Каждая таблица содержит 
       несколько встроенных цепочек и может также содержать пользовательские цепочки.

--
       -t, --table table
              Эта опция указывает таблицу сопоставления пакетов, с которой должна работать команда. Если ядро сконфигурировано с автоматической загрузкой модулей, будет сделана попытка загрузить соответствующий
              модуль для этой таблицы, если он еще не загружен.

              Таблицы следующие:

--
                  Это стандартная таблица (если не передан флаг -t). Она содержит встроенные цепочки INPUT (для пакетов, направленных на локальные сокеты), FORWARD (для пакетов, проходящих через 
                  систему) и OUTPUT (для пакетов, сгенерированных локально).

              nat:
                  Эта  таблица используется, когда встречается пакет, который создает новое соединение. Она состоит из трех встроенных: PREROUTING (для изменения пакетов, как только они поступают), OUTPUT (для
                  изменения пакетов, сгенерированных локально, перед маршрутизацией) и POSTROUTING (для изменения пакетов, когда они собираются выйти). Поддержка NAT для IPv6 доступна с ядра 3.7.
--
               iptables -t nat -n -L
              Обратите внимание, что часто используется с опцией -n, чтобы избежать долгих обратных DNS-запросов. Также законно указать опцию -Z (ноль), в этом случае цепочка(и) будут 
              перечислены и обнулены атомарно. Точный вывод зависит от других указанных аргументов. Точные правила подавляются, пока вы не используете
               iptables -L -v

       -S, --list-rules [chain]

Я пока не могу комментировать, но вот более гибкий вариант хорошей функции manswitch из принятого ответа, которая также находит опции, такие как длинные опции, которые перечислены после других опций:

function manswitch () { man "$1" | less -p "^ +(-.*, )?$2" }

Например, manswitch ls -r и manswitch ls --reverse оба будут работать. С оригинальным manswitch работает только первый вариант, так как соответствующая строка в man странице -r, --reverse.

Ответ или решение

Запрос страницы man в Linux для определенного флага

Вызов страниц man для проверки определенных флагов команд является распространенной задачей для системных администраторов и разработчиков, работающих на платформе Linux. Для упрощения этого процесса можно использовать несколько удобных подходов, учитывающих структуру страниц man.

Основной способ: использование переменной окружения LESS

Если предполагается, что ваш просмотрщик man – это less, можно заранее указать команду для less через переменную окружения LESS. Это позволяет автоматически перейти к нужной части man-страницы.

Например, для проверки флага -t для iptables можно использовать следующую команду:

LESS='+/-t' man iptables

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

Упрощение процесса с помощью функции Bash

Чтобы сделать доступ к этому процессу более удобным, можно создать функцию в файле .bashrc:

search_man () { LESS=+"$2" man "$1"; }

После добавления этой функции в .bashrc, можно выполнять команды следующим образом:

search_man iptables '-t'

Это приведет вас к описанию флага -t в man-странице iptables.

Поиск с помощью регулярных выражений

Если вы хотите не только найти, но и перейти непосредственно к описанию нужного флага, можно использовать регулярные выражения для более точного совпадения:

LESS='+/^[[:blank:]]+-t' man iptables

Эта команда позволит вам перейти прямо к описанию флага -t, избегая лишних прокруток.

Можно добавить аналогичную функцию в .bashrc:

search_man () { LESS="+/^[[:blank:]]+$2" man "$1"; }

Альтернативные функции

Некоторые пользователи также находят полезными такие функции, как manswitch, позволяющие находить описания опций более элегантным способом:

function manswitch () { man "$1" | less -p "^ +$2"; }

Вы можете вызывать эту функцию следующим образом:

manswitch iptables -t

Также есть возможность улучшить эту функцию для работы с длинными флагами:

function manswitch () { man "$1" | less -p "^ +(-.*, )?$2"; }

Теперь можно будет находить как краткие (-r), так и длинные (--reverse) флаги.

Заключение

С помощью этих приемов вы сможете эффективно искать и просматривать конкретные флаги в man-страницах команд Linux. Все предложенные функции помогают сэкономить время и облегчают процесс поиска информации, улучшая вашу работу в командной строке. Не забудьте добавить функции в ваш .bashrc или использовать их в своем собственном скрипте в каталоге ~/bin для удобства.

SEO-оптимизация

Если вы хотите оптимизировать вашу страницу или статью, связав ее с этой темой, подумайте о добавлении ключевых слов, таких как "Linux", "man pages", "CLI tools", "Bash function", и "системные администраторы". Это поможет улучшить видимость вашего контента в поисковых системах.

Оцените материал
Добавить комментарий

Капча загружается...