ifconfig,netstatは非推奨という記事が(2年以上前に!)書かれていました。慣れ親しんできたifconfig,netstatですが、もはや非推奨となれば代替コマンドの使い方を覚えるのもやぶさかではありません。
さて自分のPCに割り当てられているIPアドレスを見るための代替コマンドはip addr(ip aと省略可)でよいそうです。試してみましょう。
% ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu ***** qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu **** qdisc mq state UP qlen ****
link/ether 12:34:56:78:90:ab brd ff:ff:ff:ff:ff:ff
inet 192.168.1.2/24 brd 192.168.1.255 scope global eth0
inet6 1234:5678:90ab:cdef:1234:5678:90ab:cdef/64 scope global temporary dynamic
valid_lft *****sec preferred_lft *****sec
inet6 1234:5678:90ab:cdef:1234:5678:90ab:cdef/64 scope global dynamic
valid_lft *****sec preferred_lft *****sec
inet6 fedc:ba09:8765:4321:fedc:ba09:8765:4321/64 scope link
valid_lft forever preferred_lft forever
うっ見にくい。一瞬どこに目的のIPアドレスがあるか分かりませんでした。ifconfigでは割とすぐ見つかったのになぜ? 書式が異なるからか? それともうちの環境ではifconfigの出力が日本語化されるから? なぜ英語だと目grepの精度が落ちるのか? 英文に慣れるには一体どうしたら? ぶつぶつ……
話がそれました。要は重要な箇所を強調すればよいのです。出力の中のIPアドレスっぽいところを色つきで表示しましょう。
alias ipa="ip a | perl -pe 's/(\d+\.){3}\d+(\/\d+)?/\e[93m$&\e[m/g'"
シェルにipaと入力することでハイライトされた出力を得ることができます。
上では置換にperlを用いましたが、sedではエスケープシーケンスの処理がうまく行きませんでした。暇があればそこらへんをまた調べてみたいです。
もうちょっと手を加えて
- IPv4アドレスっぽいところを黄色表示(ただしブロードキャストアドレスの部分は無視)
- IPv6アドレスっぽいところを赤表示
- MACアドレスっぽいところを緑表示(ただし00:00:00:00:00:00とff:ff:ff:ff:ff:ffは雑に無視)
としてみたのが下のようになります。
COLORRED="\e[91m"
COLORGREEN="\e[92m"
COLORYELLOW="\e[93m"
COLOREND="\e[m"
alias ipa="ip a | perl -pe 's/(?<=inet )(\d+\.){3}\d+(\/\d+)?/${COLORYELLOW}$&${COLOREND}/g' | \
perl -pe 's/(?![0f:]{17})([\da-f]{2}:){5}[\da-f]+/${COLORGREEN}$&${COLOREND}/g' | \
perl -pe 's/(([\da-f]{4})?:){2,7}[\da-f]+(\/\d+)?/${COLORRED}$&${COLOREND}/g'"
zsh使いの人は.zshrc等に適当に挿入してください。多分bashでも動くと思います。他のシェルはよくわかりません。
今回はこれだけですが、他の(色付き出力非対応な)コマンドにも様々応用できるでしょう。