Iproute
“ip route”的漂亮展示
我想使用更多的
iproute2
(ip
command) 實用程序而不是已棄用的net-tools
(ifconfig
,route
, …)。我繼續返回的主要原因是,與特別提供列標題的舊版本相比,我認為
net-tools
其輸出缺乏清晰度:ip route``route
- 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
- 路線:
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
問題:有沒有辦法使用
ip
命令清晰/漂亮地顯示路線?
這個 awk 腳本假設,可能是錯誤的,輸出值是成對的關鍵字 value,例如
scope link
,有一些例外,如第一列和linkdown
關鍵字。它累積列和數據並列印結果: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] } }'
結果超過 80 列:
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
該腳本使用關聯數組
hdr
來保存找到的關鍵字,二維col
數組由該關鍵字和行號索引以保存值。第一列使用發明的ip
關鍵字進行特殊處理,該關鍵字具有前導空格,以確保它被排序到第一列。該extra
數組記錄了linkdown
唯一的關鍵字。在數據的末尾,標題被排序到索引數組
x
中,我們遍歷所有值以找到最大列寬。然後列印列標題,然後列印保存的數據。