더 이상 사용되지 않는 유틸리티 ( , , ...) 대신 더 많은 iproute2
( 명령) 유틸리티를 사용하고 싶습니다 .ip
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
?
답변1
패키지 iproute2
(Debian, Ubuntu)와 iproute
패키지(CentOS, RedHat) 모두 이를 위해 특별히 설계된 유틸리티를 포함합니다.routel
,예쁜 출력 형식으로 경로 나열.
출력 예:
[2022-02-12 04:21:05]» routel
target gateway source proto scope dev tbl
default 192.168.1.1 ob-top
10.171.32.0/ 24 10.171.32.1 kernel link lxdbr0
169.254.0.0/ 16 link ob-top
172.17.0.0/ 16 172.17.0.1 kernel linkdocker0
192.168.1.0/ 24 192.168.1.101 kernel link ob-top
192.168.122.0/ 24 192.168.122.1 kernel link virbr0
10.171.32.0 broadcast 10.171.32.1 kernel link lxdbr0 local
10.171.32.1 local 10.171.32.1 kernel host lxdbr0 local
10.171.32.255 broadcast 10.171.32.1 kernel link lxdbr0 local
127.0.0.0 broadcast 127.0.0.1 kernel link lo local
127.0.0.0/ 8 local 127.0.0.1 kernel host lo local
127.0.0.1 local 127.0.0.1 kernel host lo local
127.255.255.255 broadcast 127.0.0.1 kernel link lo local
172.17.0.0 broadcast 172.17.0.1 kernel linkdocker0 local
172.17.0.1 local 172.17.0.1 kernel hostdocker0 local
172.17.255.255 broadcast 172.17.0.1 kernel linkdocker0 local
192.168.1.0 broadcast 192.168.1.101 kernel link ob-top local
192.168.1.101 local 192.168.1.101 kernel host ob-top local
192.168.1.255 broadcast 192.168.1.101 kernel link ob-top local
192.168.122.0 broadcast 192.168.122.1 kernel link virbr0 local
192.168.122.1 local 192.168.122.1 kernel host virbr0 local
192.168.122.255 broadcast 192.168.122.1 kernel link virbr0 local
답변2
몇 년 후 내 질문에 대답하려면 ...
2018년 2월에 멋진 컬러 디스플레이가 추가되었다는 소식을 방금 알게 되었습니다. 이렇게 하면 출력을 더 쉽게 읽을 수 있습니다.
~에서사람의 IP 주소:
-c[color][={always|auto|never} Configure color output. If parameter is omitted or always, color output is enabled regardless of stdout state. If parameter is auto, stdout is checked to be a terminal before enabling color output. If parameter is never, color output is disabled. If specified multiple times, the last one takes precedence. This flag is ignored if -json is also given.
답변3
이 awk 스크립트는 출력 값이 쌍으로 되어 있다고 가정합니다(아마도 부정확할 수 있음).키워드 값, 예를 들어 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
값을 보관하기 위해 키와 행 번호로 인덱싱된 2D 배열을 사용합니다. 첫 번째 열은 첫 번째 열로 정렬되도록 선행 공백이 있는 고안된 키워드로 ip
특별히 처리됩니다 . 이 extra
배열은 linkdown
lone 키워드를 기록합니다.
데이터가 끝나면 헤더가 인덱스 배열로 정렬 x
되고 모든 값을 반복하여 최대 열 너비를 찾습니다. 그런 다음 열 헤더를 인쇄한 다음 저장된 데이터를 인쇄합니다.
답변4
이건 적응이야@therealak12의 답변.
flags
먼저 모든 JSON 값을 문자열로 변환하여 배열을 포함합니다.jq 'map( with_entries( .value |= tostring ) ) | ...'
- 더 많은 열 추가(
ip -d ...
) - 라우팅 테이블(
ip route show table all
) 에 모든 데이터를 추가합니다. column -ts $'\t'
유일한 열 구분 기호로 탭 문자를 나타내는 데 사용됩니다.
ip -d -j route show table all | jq -r 'map( with_entries( .value |= tostring ) ) | ["target(dst)", "via(gateway)", "source(prefsrc/src)", "dev", "protocol(proto)", "scope", "type", "metric", "table", "pref", "flags"], (.[] | [.dst // "-", .gateway // "-", .prefsrc // "-", .dev // "-", .protocol // "-", .scope // "-", .type // "-", .metric // "-", .table // "-", .pref // "-", .flags // "-"]) | @tsv' | column -ts $'\t'