Query Linux man page para determinado flag

4

Muitas vezes, abro as páginas do manual de uma determinada ferramenta CLI apenas para verificar um determinado sinalizador, por ex. man iptables para verificar o -t flag.

Existe alguma ferramenta que simplifique isso? Eu poderia, é claro, escrever uma função simples no Bash usando o conteúdo de uma página man, mas estou procurando por algo que use a estrutura de páginas man para encontrar exatamente o que eu quero (ou seja, a descrição de uma determinada flag).

    
por syntagma 11.08.2016 / 11:50

3 respostas

0

Não encontrei uma API / mecanismo para consultar páginas de manual para um determinado sinalizador. No entanto, esta função simples parece fazer exatamente o que eu preciso:

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

Uso:

manswitch iptables -t
    
por 11.08.2016 / 16:14
1

Assumindo que seu pager man é less , você pode passar qualquer comando para less usando a variável de ambiente LESS .

Então, para pesquisar a opção -t de man iptables :

LESS='+/-t' man iptables

Isso tem o mesmo efeito de executar /-t em man ipatbles . Você pode alterar o padrão para um controle mais preciso.

Se você quiser, pode criar uma função para facilitar o acesso:

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

Agora fazendo:

search_man iptables '-t'              

terá o mesmo efeito.

EDITAR:

Se você quiser ir para a opção específica da página de manual em vez de pesquisar, poderá usar a correspondência de Regex com LESS :

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

leva você diretamente para a descrição da opção -t de man iptables . Você também pode definir uma função da mesma forma:

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

Existe uma coisa. Agora. Esta função:

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

Funciona assim:

$ 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
           This  is  the  default table (if no -t option is passed). It
        iptables -t nat -n -L

Bem, as duas últimas linhas foram destruídas.

De qualquer forma, você sabe como adicioná-lo ao seu .bashrc ? Ou você prefere isso como um script para o seu ~/bin ?

VERSÃO 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  and ip6tables are used to set up, maintain, and inspect the tables of IPv4 and IPv6 packet filter rules in the Linux kernel.  Several different tables may be defined.  Each table contains a
       number of built-in chains and may also contain user-defined chains.

--
       -t, --table table
              This option specifies the packet matching table which the command should operate on.  If the kernel is configured with automatic module loading, an attempt will be made to load the appropriate
              module for that table if it is not already there.

              The tables are as follows:

--
                  This is the default table (if no -t option is passed). It contains the built-in chains INPUT (for packets destined to local sockets), FORWARD (for packets being routed  through  the  box),
                  and OUTPUT (for locally-generated packets).

              nat:
                  This  table is consulted when a packet that creates a new connection is encountered.  It consists of three built-ins: PREROUTING (for altering packets as soon as they come in), OUTPUT (for
                  altering locally-generated packets before routing), and POSTROUTING (for altering packets as they are about to go out).  IPv6 NAT support is available since kernel 3.7.
--
               iptables -t nat -n -L
              Please note that it is often used with the -n option, in order to avoid long reverse DNS lookups.  It is legal to specify the -Z (zero) option as well, in which case the chain(s) will be atom‐
              ically listed and zeroed.  The exact output is affected by the other arguments given. The exact rules are suppressed until you use
               iptables -L -v

       -S, --list-rules [chain]
    
por 11.08.2016 / 12:13