Exibição bonita de “ip route”

0

Eu gostaria de usar mais do iproute2 (% comandoip) utilidade em vez do obsoleto net-tools ( ifconfig , route , ...).

A principal razão eu continuo indo de volta para net-tools é a saída do ip route , o que na minha humilde opinião é falta de clareza em relação ao antigo route que notadamente oferece títulos coluna :

  • rota ip:

    default via 192.168.134.254 dev enp1s0  proto static  metric 100 
    10.42.0.0/24 dev wlp2s0  proto kernel  scope link  src 10.42.0.1  metric 600 
    10.56.30.0/24 dev enx00133b0402c2  proto kernel  scope link  src 10.56.30.143 
    169.254.0.0/16 dev wlp2s0  scope link  metric 1000 
    192.168.57.0/24 dev vboxnet1  proto kernel  scope link  src 192.168.57.1 linkdown 
    192.168.134.0/24 dev enp1s0  proto kernel  scope link  src 192.168.134.142  metric 100 
    
  • route:

    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    default         192.168.134.254 0.0.0.0         UG    100    0        0 enp1s0
    10.42.0.0       *               255.255.255.0   U     600    0        0 wlp2s0
    10.56.30.0      *               255.255.255.0   U     0      0        0 enx00133b0402c2
    link-local      *               255.255.0.0     U     1000   0        0 wlp2s0
    192.168.57.0    *               255.255.255.0   U     0      0        0 vboxnet1
    192.168.134.0   *               255.255.255.0   U     100    0        0 enp1s0
    

Pergunta: Existe uma maneira de ter uma exibição clara / bonita das rotas usando o comando ip ?

    
por Gohu 11.09.2017 / 15:16

1 resposta

4

Este script awk assume, talvez erroneamente, que os valores de saída estão em pares de valor de palavra-chave , por exemplo scope link , com algumas exceções, como a primeira coluna, e a palavra-chave linkdown . Acumula as colunas e dados e imprime o resultado:

awk '
{   i = 1; h = " ip"
    hdr[h] = 1
    col[h,NR] = $i
    for(i=2;i<=NF;){
        if($i=="linkdown"){extra[NR] = $i; i++; continue}
        hdr[$i] = 1
        col[$i,NR] = $(i+1)
        i += 2
    }
}
END{     #PROCINFO[sorted_in] = "@ind_str_asc"
    n = asorti(hdr,x)
    for(i=1;i<=n;i++){ h = x[i]; max[h] = length(h) }
    for(j = 1;j<=NR;j++){
        for(i=1;i<=n;i++){
            h = x[i]
            l = length(col[h,j])
            if(l>max[h])max[h] = l
        }
    }
    for(i=1;i<=n;i++){ h = x[i]; printf "%-*s ",max[h],h }
    printf "\n"
    for(j = 1;j<=NR;j++){
        for(i=1;i<=n;i++){ h = x[i]; printf "%-*s ",max[h],col[h,j] }
        printf "%s\n",extra[j]
    }
}'

O resultado é maior que 80 colunas:

 ip              dev             metric proto  scope src             via             
default          enp1s0          100    static                       192.168.134.254 
10.42.0.0/24     wlp2s0          600    kernel link  10.42.0.1                       
10.56.30.0/24    enx00133b0402c2        kernel link  10.56.30.143                    
169.254.0.0/16   wlp2s0          1000          link                                  
192.168.57.0/24  vboxnet1               kernel link  192.168.57.1                    linkdown
192.168.134.0/24 enp1s0          100    kernel link  192.168.134.142                 

O script usa a matriz associativa hdr para manter as palavras-chave como elas são encontradas e a matriz bidimensional col é indexada por essa palavra-chave e o número da linha para conter o valor. A primeira coluna é tratada especialmente com uma palavra-chave ip inventada que possui um espaço inicial para garantir que ela seja classificada na primeira coluna. A matriz extra observa a palavra-chave linkdown lone.

No final dos dados, os cabeçalhos são classificados em uma matriz de indexação x e percorremos todos os valores que encontram a largura máxima da coluna. Os cabeçalhos das colunas são então impressos e, em seguida, os dados salvos.

    
por 11.09.2017 / 16:42

Tags