Pipeline | trong Cisco CLI – Lọc Output Để Troubleshooting Nhanh Hơn
Khi troubleshooting trên router/switch Cisco, vấn đề đôi khi không phải là thiếu thông tin, mà là có quá nhiều thông tin. Một lệnh show running-config có thể trả về hàng nghìn dòng. Thay vì kéo màn hình và tìm bằng mắt, kỹ sư có thể sử dụng pipeline | để lọc ngay output cần quan tâm.
Cú pháp tổng quát:
show <command> | <filter> <pattern>
Trong đó | có thể hiểu là: "Lấy kết quả của lệnh bên trái rồi xử lý/lọc theo điều kiện bên phải." 1. | include – Chỉ lấy những dòng cần tìm
Ví dụ muốn tìm tất cả cấu hình có chữ route:
show running-config | include route
Trong hình, router trả về:
default-router 192.168.10.1
default-router 192.168.20.1
router ospf 1
ip route 0.0.0.0 0.0.0.0 209.165.200.2
ip route 209.165.201.0 255.255.255.0 172.16.100.2
ipv6 route ::/0 2001:DB8:D1:A5:C8::2
ipv6 router rip RIPNG
Thay vì đọc toàn bộ running-config, chỉ một lệnh đã giúp chúng ta nhanh chóng phát hiện static route đáng nghi:
ip route 209.165.201.0 255.255.255.0 172.16.100.2
Đây là cách rất hiệu quả khi nghi ngờ routing loop, static route sai hoặc cấu hình routing không đúng.
Một ví dụ khác:
show ip route | include 10.10.10.0
Dùng để nhanh chóng tìm route đến mạng 10.10.10.0.
2. | exclude – Loại bỏ những dòng không cần thiết
Trong hình có lệnh:
show ip interface brief | exclude unass
Mục tiêu là loại bỏ các interface có IP Address là:
unassigned
Nhờ vậy, output chỉ tập trung vào những interface đã được gán địa chỉ IP.
Có thể viết đầy đủ hơn:
show ip interface brief | exclude unassigned
Đây là một mẹo rất hữu ích trên những switch có 48 hoặc hàng trăm interface nhưng chỉ một số interface Layer 3 đang thực sự được sử dụng.
3. | begin – Hiển thị từ vị trí cần tìm trở xuống
Giả sử running-config rất dài nhưng bạn chỉ muốn xem từ phần OSPF:
show running-config | begin router ospf
Router sẽ bỏ qua toàn bộ phần cấu hình phía trên và bắt đầu hiển thị từ:
router ospf 1
trở xuống.
Tương tự, muốn xem cấu hình bắt đầu từ một interface:
show running-config | begin interface GigabitEthernet0/1
begin đặc biệt hữu ích khi bạn biết phần cần tìm nằm ở đâu nhưng vẫn muốn xem những dòng cấu hình phía sau nó.
4. | section – Lấy nguyên một khối cấu hình
Đây là một trong những filter hữu ích nhất khi troubleshooting.
Ví dụ:
show running-config | section router ospf
Bạn có thể nhận được:
router ospf 1
router-id 1.1.1.1
network 10.1.12.0 0.0.0.255 area 0
network 10.1.23.0 0.0.0.255 area 0
passive-interface GigabitEthernet0/0
Khác với include, section giúp lấy cả block cấu hình liên quan.
Ví dụ kiểm tra BGP:
show running-config | section router bgp
Hoặc kiểm tra một interface:
show running-config | section interface GigabitEthernet0/1
Đây thường là lựa chọn tốt hơn include khi troubleshooting OSPF, BGP, interface, ACL và nhiều cấu hình có cấu trúc theo section.
5. Kết hợp với Regular Expression
Pipeline còn mạnh hơn khi kết hợp với Regular Expression (Regex).
Ví dụ chỉ tìm OSPF hoặc BGP:
show running-config | include ospf|bgp
Hoặc khi kiểm tra interface:
show ip interface brief | include up|down
Trong thực tế, khả năng regex và cú pháp filter cụ thể có thể khác nhau tùy IOS/IOS XE/NX-OS và phiên bản phần mềm, vì vậy cần kiểm tra cú pháp bằng ? trên thiết bị đang sử dụng.
Một tình huống troubleshooting thực tế
Giả sử traceroute cho thấy:
Hop 1 → DSW1
Hop 2 → R1
Hop 3 → DSW1
Hop 4 → R1
...
Đây là dấu hiệu rất mạnh của Routing Loop.
Bạn đăng nhập R1 và kiểm tra:
show running-config | include route
Sau đó phát hiện:
ip route 209.165.201.0 255.255.255.0 172.16.100.2
Tiếp tục kiểm tra địa chỉ interface:
show ip interface brief | exclude unassigned
và xác định:
R1 172.16.100.1
DSW1 172.16.100.2
Như vậy R1 đang gửi traffic đến DSW1. Nếu DSW1 lại có route gửi traffic trở về R1, hai thiết bị sẽ tạo thành:
packet
↓
R1 ───────────→ DSW1
↑ │
└────────────────┘
Routing Loop
Pipeline không trực tiếp "sửa" routing loop, nhưng nó giúp kỹ sư lọc hàng nghìn dòng output xuống còn vài dòng quan trọng để kiểm chứng hypothesis rất nhanh. 4 pipeline nên thuộc lòng
show ... | include <pattern>
show ... | exclude <pattern>
show ... | begin <pattern>
show ... | section <pattern>
Có thể nhớ đơn giản: include = lấy dòng cần tìm, exclude = bỏ dòng không cần, begin = bắt đầu từ đây, section = lấy cả khối cấu hình.
Đối với CCNP/CCIE, biết nhiều lệnh show là cần thiết; nhưng biết cách dùng pipeline để biến output lớn thành đúng vài dòng mình cần mới là kỹ năng giúp troubleshooting nhanh trong môi trường thực tế.
Khi troubleshooting trên router/switch Cisco, vấn đề đôi khi không phải là thiếu thông tin, mà là có quá nhiều thông tin. Một lệnh show running-config có thể trả về hàng nghìn dòng. Thay vì kéo màn hình và tìm bằng mắt, kỹ sư có thể sử dụng pipeline | để lọc ngay output cần quan tâm.
Cú pháp tổng quát:
show <command> | <filter> <pattern>
Trong đó | có thể hiểu là: "Lấy kết quả của lệnh bên trái rồi xử lý/lọc theo điều kiện bên phải." 1. | include – Chỉ lấy những dòng cần tìm
Ví dụ muốn tìm tất cả cấu hình có chữ route:
show running-config | include route
Trong hình, router trả về:
default-router 192.168.10.1
default-router 192.168.20.1
router ospf 1
ip route 0.0.0.0 0.0.0.0 209.165.200.2
ip route 209.165.201.0 255.255.255.0 172.16.100.2
ipv6 route ::/0 2001:DB8:D1:A5:C8::2
ipv6 router rip RIPNG
Thay vì đọc toàn bộ running-config, chỉ một lệnh đã giúp chúng ta nhanh chóng phát hiện static route đáng nghi:
ip route 209.165.201.0 255.255.255.0 172.16.100.2
Đây là cách rất hiệu quả khi nghi ngờ routing loop, static route sai hoặc cấu hình routing không đúng.
Một ví dụ khác:
show ip route | include 10.10.10.0
Dùng để nhanh chóng tìm route đến mạng 10.10.10.0.
2. | exclude – Loại bỏ những dòng không cần thiết
Trong hình có lệnh:
show ip interface brief | exclude unass
Mục tiêu là loại bỏ các interface có IP Address là:
unassigned
Nhờ vậy, output chỉ tập trung vào những interface đã được gán địa chỉ IP.
Có thể viết đầy đủ hơn:
show ip interface brief | exclude unassigned
Đây là một mẹo rất hữu ích trên những switch có 48 hoặc hàng trăm interface nhưng chỉ một số interface Layer 3 đang thực sự được sử dụng.
3. | begin – Hiển thị từ vị trí cần tìm trở xuống
Giả sử running-config rất dài nhưng bạn chỉ muốn xem từ phần OSPF:
show running-config | begin router ospf
Router sẽ bỏ qua toàn bộ phần cấu hình phía trên và bắt đầu hiển thị từ:
router ospf 1
trở xuống.
Tương tự, muốn xem cấu hình bắt đầu từ một interface:
show running-config | begin interface GigabitEthernet0/1
begin đặc biệt hữu ích khi bạn biết phần cần tìm nằm ở đâu nhưng vẫn muốn xem những dòng cấu hình phía sau nó.
4. | section – Lấy nguyên một khối cấu hình
Đây là một trong những filter hữu ích nhất khi troubleshooting.
Ví dụ:
show running-config | section router ospf
Bạn có thể nhận được:
router ospf 1
router-id 1.1.1.1
network 10.1.12.0 0.0.0.255 area 0
network 10.1.23.0 0.0.0.255 area 0
passive-interface GigabitEthernet0/0
Khác với include, section giúp lấy cả block cấu hình liên quan.
Ví dụ kiểm tra BGP:
show running-config | section router bgp
Hoặc kiểm tra một interface:
show running-config | section interface GigabitEthernet0/1
Đây thường là lựa chọn tốt hơn include khi troubleshooting OSPF, BGP, interface, ACL và nhiều cấu hình có cấu trúc theo section.
5. Kết hợp với Regular Expression
Pipeline còn mạnh hơn khi kết hợp với Regular Expression (Regex).
Ví dụ chỉ tìm OSPF hoặc BGP:
show running-config | include ospf|bgp
Hoặc khi kiểm tra interface:
show ip interface brief | include up|down
Trong thực tế, khả năng regex và cú pháp filter cụ thể có thể khác nhau tùy IOS/IOS XE/NX-OS và phiên bản phần mềm, vì vậy cần kiểm tra cú pháp bằng ? trên thiết bị đang sử dụng.
Một tình huống troubleshooting thực tế
Giả sử traceroute cho thấy:
Hop 1 → DSW1
Hop 2 → R1
Hop 3 → DSW1
Hop 4 → R1
...
Đây là dấu hiệu rất mạnh của Routing Loop.
Bạn đăng nhập R1 và kiểm tra:
show running-config | include route
Sau đó phát hiện:
ip route 209.165.201.0 255.255.255.0 172.16.100.2
Tiếp tục kiểm tra địa chỉ interface:
show ip interface brief | exclude unassigned
và xác định:
R1 172.16.100.1
DSW1 172.16.100.2
Như vậy R1 đang gửi traffic đến DSW1. Nếu DSW1 lại có route gửi traffic trở về R1, hai thiết bị sẽ tạo thành:
packet
↓
R1 ───────────→ DSW1
↑ │
└────────────────┘
Routing Loop
Pipeline không trực tiếp "sửa" routing loop, nhưng nó giúp kỹ sư lọc hàng nghìn dòng output xuống còn vài dòng quan trọng để kiểm chứng hypothesis rất nhanh. 4 pipeline nên thuộc lòng
show ... | include <pattern>
show ... | exclude <pattern>
show ... | begin <pattern>
show ... | section <pattern>
Có thể nhớ đơn giản: include = lấy dòng cần tìm, exclude = bỏ dòng không cần, begin = bắt đầu từ đây, section = lấy cả khối cấu hình.
Đối với CCNP/CCIE, biết nhiều lệnh show là cần thiết; nhưng biết cách dùng pipeline để biến output lớn thành đúng vài dòng mình cần mới là kỹ năng giúp troubleshooting nhanh trong môi trường thực tế.