それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

ip コマンドは -o オプションを使うと便利すぎてやばい

ip コマンド は -o オプションをつけるとメッチャ見やすい

ip コマンドの ip a の結果はごちゃって見辛くないですか?私は非常に辛い。 とくにIPv6 が混じってきて、1つのインターフェースに複数のIPが入ってくると辛い

シェルスクリプトで、grep してるけど、めっちゃめんどくさい。

オプション -o をつけると便利

1行に付き1つのIPアドレスが表示されるのでわかりやすい思う。

takuya@:~$ ip -o  a
1: lo    inet 127.0.0.1/8 scope host lo\       valid_lft forever preferred_lft forever
1: lo    inet6 ::1/128 scope host \       valid_lft forever preferred_lft forever
2: enp3s0    inet 192.168.11.103/24 brd 192.168.11.255 scope global dynamic noprefixroute enp3s0\       valid_lft 39969sec preferred_lft 39969sec
2: enp3s0    inet6 fe80::6ae7:5e96:e212:xxxx/64 scope link noprefixroute \       valid_lft forever preferred_lft forever
3: vlan2    inet 192.168.2.102/24 brd 192.168.2.255 scope global dynamic noprefixroute vlan2\       valid_lft 18372sec preferred_lft 18372sec
3: vlan2    inet6 2001:xxxx:8383:a300:b1a2:9557:xxxx:adxxxxa4/64 scope global temporary dynamic \       valid_lft 13828sec preferred_lft 12028sec
3: vlan2    inet6 2001:xxxx:8383:a300:8012:e7db:xxxx:xxxx/64 scope global dynamic mngtmpaddr noprefixroute \       valid_lft 13828sec preferred_lft 12028sec
3: vlan2    inet6 fe80::91e1:2583:xxxx:edaf/64 scope link noprefixroute \       valid_lft forever preferred_lft forever

ip a の場合

一般的に使われる ip a の場合、次のように、インデントを使って表示される

  • インターフェース1
  • インターフェース2

オプションをつける

今回紹介した ip -o a の場合、次のように1行1レコードになる

  • インターフェース1 IPv4 アドレス
  • インターフェース1 IPv4 アドレス
  • インターフェース2 IPv4 アドレス
  • インターフェース2 IPv6 アドレス
  • インターフェース2 IPv6 アドレス

コマンドで処理をしたり、grep したり sed したりIP取得したりするときに、1行ごとの表示のほうが見やすくないですか?私は見やすいです

wc でIPの数を数えたり、grep で目的のIPレンジを探したり。インターフェースが増えてくるとこのほうが使いやすかった。

オプションについて

-o オプションは、LF(改行)を '\' バックスラッシュに置換してプリントしてくれるものです。もとに戻すなら置換をすればいいとわかります。

-o, -oneline output each record on a single line, replacing line feeds with the '\' character. This is convenient when you want to count records with wc(1) or to grep(1) the output.

参考資料

man ip