ルーティングテーブルを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 |