ルーティングテーブルをMarkdown形式で表示するスクリプトを作成

ipコマンドのrouteオプション表示されるルーティングテーブルをMarkdown形式で表示するスクリプトを作成したので、下記に記載する。

ファイル内容

シェルスクリプトとawkの2ファイルで構成される。

  • make_markdown_route.sh

#!/bin/bash
#
# ipコマンドで表示したルーティングテーブル情報をMarkdown形式に変換して表示するスクリプト
#---------------------------------------------------------------------------------------

current_directory_path="$( dirname "$(readlink -f $0)" )"
ip route show table all | awk -f "${current_directory_path}/make_markdown_route.awk"
  • make_markdown_route.awk

#!/usr/bin/awk
#
# ipコマンドで表示したルーティングテーブル情報をMarkdown形式に変換して表示するスクリプト
#
# Note:
#     * Destination : 宛先アドレス
#     * Scope : 送信先
#         - scope link: 直接unicast/broadcastにて通信する経路。自身が属するネットワーク等が該当。
#         - scope host: 自分自身への経路
#         - scope global: (他ネットワークへの)ゲートウェイを経由したunicast通信による経路。
#     * Protocol :
#          - proto kernel:カーネルが自動生成した経路。
#-----------------------------------------------------------------------

#-----------------------------------------------------------------------
# 事前処理
#-----------------------------------------------------------------------
BEGIN {

    # ヘッダー部分の出力
    printf("| %-17s | ", "Destination");
    printf("%-15s | ", "Gateway");
    printf("%-15s | ", "Source");
    printf("%-8s | ", "Protocol");
    printf("%-8s | ", "Scope");
    printf("%-6s | ", "Metric");
    printf("%-4s | ", "Dev");
    printf("%-9s | ", "Table");
    printf("\n");

    printf("| %-17s | ", "---");
    printf("%-15s | ", "---");
    printf("%-15s | ", "---");
    printf("%-8s | ", "---");
    printf("%-8s | ", "---");
    printf("%-6s | ", "---");
    printf("%-4s | ", "---");
    printf("%-9s | ", "---");
    printf("\n");

}

#-----------------------------------------------------------------------
# 配下を初期化する関数
#-----------------------------------------------------------------------
function initialize_array(array){

    array["route"] = "";
    array["dest"] = "";
    array["mask"] = "";
    array["via"] = "";
    array["dev"] = "";
    array["proto"] = "";
    array["scope"] = "";
    array["src"] = "";
    array["metric"] = "";

    return 0;

}

#-----------------------------------------------------------------------
# 配列の内容を出力
#-----------------------------------------------------------------------
function print_array(array){

    printf("| %-17s | ", array["dest"]);
    printf("%-15s | ", array["via"]);
    printf("%-15s | ", array["src"]);
    printf("%-8s | ", array["proto"]);
    printf("%-8s | ", array["scope"]);
    printf("%-6s | ", array["metric"]);
    printf("%-4s | ", array["dev"]);
    printf("%-9s | ", array["table"]);

    printf("\n");

    return 0;

}

#-----------------------------------------------------------------------
# メイン処理
#-----------------------------------------------------------------------
{
    initialize_array(array)
    begin_number=2

    # テーブル情報が含まれる場合 = 項目数が偶数の場合
    # Exsample:
    #     broadcast 127.0.0.0 dev lo table local proto kernel scope link src 127.0.0.1
    if( NF % 2 == 0 ) {
        array["table"] = $1;
        array["dest"] = $2;
        begin_number=3;
    }

    # テーブル情報が含まれない場合 = 項目数が奇数の場合
    # Exsample:
    #     default via 192.168.10.1 dev eth1
    #     10.10.10.0/24 via 192.168.10.1 dev eth1
    else {
        array["table"] = "";
        array["dest"] = $1;
        begin_number=2;
    }

    for(count = begin_number; count <= NF; count = count + 2){
        array[$count] = $(count + 1);
        #printf("%s:%s |", $count,array[$count])
    }
    print_array(array);
}

#-----------------------------------------------------------------------
# 事後処理
#-----------------------------------------------------------------------
END {
    print("");
}

実行結果

下記のようにMarkdown形式で、ルーティングテーブルが表示する


$ bash make_markdown_route.sh

| Destination       | Gateway         | Source          | Protocol | Scope    | Metric | Dev  | Table     |
| ---               | ---             | ---             | ---      | ---      | ---    | ---  | ---       |
| 169.254.0.0/16    |                 |                 |          | link     | 1003   | eth1 |           |
| default           | 192.168.0.1     |                 |          |          |        | eth0 |           |
| 127.255.255.255   |                 | 127.0.0.1       | kernel   | link     |        | lo   | local     |
| 127.0.0.0         |                 | 127.0.0.1       | kernel   | link     |        | lo   | local     |
| 127.0.0.1         |                 | 127.0.0.1       | kernel   | host     |        | lo   | local     |

導入方法

実行権の付与

上記の2ファイルを/usr/local/binなどの任意のディレクトリに配置して、実行権をつける。

chmod a+x /usr/local/bin/make_markdown_route.sh
chmod a+x /usr/local/bin/make_markdown_route.awk

エイリアスの設定

コマンド名の短縮化のため、mdrouteという名称で、エイリアスに登録する。


$ alias mdroute='/usr/local/bin/make_markdown_route.sh'

$ vim ~/.bashrc
  ※ 下記の8行目の設定を追記する
  1 # .bashrc
  2
  3 # User specific aliases and functions
  4
  5 alias rm='rm -i'
  6 alias cp='cp -i'
  7 alias mv='mv -i'
  8 alias mdroute='/usr/local/bin/make_markdown_route.sh'
  9
 10 # Source global definitions
 11 if [ -f /etc/bashrc ]; then
 12     . /etc/bashrc
 13 fi

$ mdroute

※ ルーティングテーブルが表示される

| Destination       | Gateway         | Source          | Protocol | Scope    | Metric | Dev  | Table     |
| ---               | ---             | ---             | ---      | ---      | ---    | ---  | ---       |
| 169.254.0.0/16    |                 |                 |          | link     | 1003   | eth1 |           |
| default           | 192.168.0.1     |                 |          |          |        | eth0 |           |
| 127.255.255.255   |                 | 127.0.0.1       | kernel   | link     |        | lo   | local     |
| 127.0.0.0         |                 | 127.0.0.1       | kernel   | link     |        | lo   | local     |
| 127.0.0.1         |                 | 127.0.0.1       | kernel   | host     |        | lo   | local     |

参考