APIを利用したネットワーク機器の設定変更が流行っているとはいえ、 まだまだCLIは現役なので、効率的に操作できるようになっておきたいものです。
問題
例えば下記のような設定がされた機器で、
「channel-group」の行だけ削除したい場合にどうしますか?
interface Ethernet1/1 description HOST1 no lldp transmit no lldp receive switchport mode trunk switchport trunk allowed vlan 100,200 spanning-tree port type edge trunk channel-group 1 mode active interface Ethernet1/2 description HOST2 no lldp transmit no lldp receive switchport mode trunk switchport trunk allowed vlan 100,200 spanning-tree port type edge trunk channel-group 2 mode active interface Ethernet1/3 description HOST3 no lldp transmit no lldp receive switchport mode trunk switchport trunk allowed vlan 300-500 spanning-tree port type edge trunk channel-group 3
既存のConfig内容を出力させて、テキストエディタで「no channel-group ~」として投入すれば良いのですが、 関係のない行を手動で削除するのは手間ですし、 「show run | include channel-group」とすると、以下のようになってしまいます。 どのインタフェースなのかわからないので、親階層も一緒に表示してほしいですよね。 この例なら手動でも良いのですが、数十個かつ複数台だったりすると負担が大きいですね。
Switch# show run | include channel-group channel-group 1 mode active channel-group 2 mode active channel-group 3
こんなとき、includeコマンドは正規表現が使えることを思い出してください。 下記のように投入すれば良い感じに出力されます。 厳密には親階層を判定しているわけではなく、「interface」または「channel-group」を含む行を表示しています。
Switch# show run | include interface|channel-group interface Ethernet1/1 channel-group 1 mode active interface Ethernet1/2 channel-group 2 mode active interface Ethernet1/3 channel-group 3
後はテキストエディタに貼り付けて、 「channel-group」を「no channel-group」に置換すれば投入Configの完成です!
おまけ
記事のタイトルからは脱線しますが、便利なフィルタ方法を3点紹介します。
section
特定のワードを含む行と、その配下の内容を表示します。 「begin」でフィルタするよりもスマートかと思います。 Nexus(NX-OS)は、スペースが入る場合にダブルクォーテーションが必要なので注意してください。 CatalystやASAでは使用ことができません。
Switch# show run | section "router bgp" router bgp 65501 router-id 192.0.2.1 timers bgp 10 30 log-neighbor-changes neighbor 192.0.2.2 remote-as 65502 update-source loopback0 address-family ipv4 unicast address-family l2vpn evpn send-community send-community extended
show run <階層名>
show run の後に、表示したい内容(階層)を入力すると 対応する項目が出力されます。
Nexus / ASA / IOS-XRで使用できることは確認しました。 IOSやIOS-XEでは使用できません。
RP/0/RSP0/CPU0:Router#show run router bgp router bgp 65501 nsr bgp router-id 1.1.1.1 default-information originate address-family ipv4 unicast !
show run vrf <VRF名>
指定したVRFに関連する箇所を表示させることができます。
Router#show run vrf VRF001 Building configuration... Current configuration : 687 bytes ip vrf VRF001 ! ! interface GigabitEthernet0/0 description HOST1 no ip address duplex auto speed auto no cdp enable ! interface GigabitEthernet0/0.999 encapsulation dot1Q 999 ip vrf forwarding VRF001 ip address 2.2.2.2 255.255.255.0 ip nat inside ip virtual-reassembly in ! interface GigabitEthernet0/1 description HOST2 no ip address duplex auto speed auto ! interface GigabitEthernet0/1.888 encapsulation dot1Q 888 ip vrf forwarding VRF001 ip address 10.0.0.1 255.255.255.0 ip nat outside ip virtual-reassembly in ! ip route vrf VRF001 0.0.0.0 0.0.0.0 10.0.0.254 end
まとめ
設定変更時だけでなく、マクロ等で自動で情報収集する場合にも、不要な情報を省くことで容量の節約になったり、 必要な情報を見つけやすくなったりします。 色々と試行錯誤して、効率的にCLIを操作できるようになりましょう!