Linux ip命令完全指南:网络管理的首选工具
-
- 1. ip命令概述
- 2. 基本语法结构
- 3. 网络接口管理(link对象)
-
- 3.1 查看接口状态
- 3.2 管理接口状态
- 3.3 获取所有网络接口
- 4. IP地址管理(address对象)
-
- 4.1 查看IP地址
- 4.2 配置IP地址
- 4.3 实用的地址管理脚本
- 5. 路由管理(route对象)
-
- 5.1 查看路由表
- 5.2 管理路由
- 5.3 多路由表管理
- 6. 邻居表管理(neigh对象)
-
- 6.1 查看ARP/NDP表
- 6.2 管理邻居表
- 7. 实战应用场景
-
- 7.1 网络故障排除脚本
- 7.2 多IP地址绑定
- 7.3 路由策略配置
- 8. 高级技巧
-
- 8.1 批量操作
- 8.2 JSON格式输出
- 8.3 网络命名空间
- 9. 常用命令速查表
|
🌺The Begin🌺点点关注,收藏不迷路🌺 |
在现代Linux系统中,ip命令已经取代了传统的ifconfig、route等命令,成为网络配置和故障排除的首选工具。本文将全面介绍ip命令的使用方法和实战技巧。
1. ip命令概述
ip命令是iproute2软件包的一部分,提供了统一的接口来管理Linux系统的网络功能。相比传统的网络工具,ip命令具有以下优势:
- 功能全面:整合了多个传统命令的功能
- 语法统一:采用一致的命令结构
- 信息丰富:提供更详细的网络状态信息
- 实时生效:配置更改立即生效
2. 基本语法结构
ip [选项] 对象 {命令|help}
常用选项:
- -s:显示详细信息(统计信息)
- -4/-6:指定IPv4或IPv6
- -r:使用DNS解析主机名
- -c:彩色输出
- -j:JSON格式输出
- -p:友好格式输出
主要对象:
- link:网络接口管理
- address:IP地址管理
- route:路由表管理
- neigh:ARP/NDP邻居表管理
- rule:策略路由规则
3. 网络接口管理(link对象)
3.1 查看接口状态
# 查看所有网络接口
ip link show
# 或者简写
ip link
# 查看指定接口
ip link show dev eth0
ip link show dev wlan0
# 显示详细信息(包含统计信息)
ip -s link show
ip -s link show dev eth0
# 彩色输出
ip -c link show
输出解读:
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether 00:16:3e:00:1e:51 brd ff:ff:ff:ff:ff:ff
- UP:接口已启用
- LOWER_UP:物理链路正常
- mtu 1500:最大传输单元
- state UP:接口状态
3.2 管理接口状态
# 启用接口
sudo ip link set eth0 up
sudo ip link set dev eth0 up
# 禁用接口
sudo ip link set eth0 down
sudo ip link set dev eth0 down
# 修改MTU(最大传输单元)
sudo ip link set dev eth0 mtu 9000
# 修改接口名称(需要先down)
sudo ip link set eth0 down
sudo ip link set dev eth0 name eth-new
sudo ip link set eth-new up
# 启用/禁用混杂模式
sudo ip link set dev eth0 promisc on
sudo ip link set dev eth0 promisc off
3.3 获取所有网络接口
# 方法1:使用ip命令
ip link | awk -F: '$0 !~ "lo|vir|docker|br-"{print $2}' | sed 's/ //g'
# 方法2:获取启用的接口
ip link show up | awk -F: '$0 !~ "lo|vir|docker|br-"{print $2}' | sed 's/ //g'
# 方法3:包含状态信息
for iface in $(ip link | awk -F: '$0 !~ "lo|vir|docker|br-"{print $2}' | sed 's/ //g'); do
state=$(ip link show dev $iface | grep -o "state [A-Z]*" | awk '{print $2}')
echo "$iface: $state"
done
4. IP地址管理(address对象)
4.1 查看IP地址
# 查看所有接口的IP地址
ip address show
# 简写形式
ip addr
ip a
# 查看指定接口的IP地址
ip addr show dev eth0
ip a show eth0
# 只显示IPv4地址
ip -4 addr
ip -4 addr show dev eth0
# 只显示IPv6地址
ip -6 addr
4.2 配置IP地址
# 添加IP地址
sudo ip addr add 192.168.1.100/24 dev eth0
sudo ip addr add 2001:db8::1/64 dev eth0
# 添加多个IP地址(辅助地址)
sudo ip addr add 192.168.1.101/24 dev eth0 label eth0:1
# 删除IP地址
sudo ip addr del 192.168.1.100/24 dev eth0
# 清空接口的所有IP地址
sudo ip addr flush dev eth0
# 刷新并重新配置(常用于脚本)
sudo ip addr flush dev eth0
sudo ip addr add 192.168.1.100/24 dev eth0
sudo ip addr add 192.168.1.101/24 dev eth0 label eth0:1
4.3 实用的地址管理脚本
#!/bin/bash
# 网络接口配置脚本
INTERFACE="eth0"
PRIMARY_IP="192.168.1.100/24"
SECONDARY_IP="192.168.1.101/24"
# 配置主IP
echo "配置主IP地址: $PRIMARY_IP"
sudo ip addr add $PRIMARY_IP dev $INTERFACE
# 配置辅助IP
echo "配置辅助IP地址: $SECONDARY_IP"
sudo ip addr add $SECONDARY_IP dev $INTERFACE label ${INTERFACE}:1
# 显示结果
echo "当前IP配置:"
ip -4 addr show dev $INTERFACE
5. 路由管理(route对象)
5.1 查看路由表
# 查看主路由表
ip route show
# 简写形式
ip route
ip r
# 查看指定网络的路由
ip route show 192.168.1.0/24
# 查看缓存路由
ip route show cache
# 查看指定接口的路由
ip route show dev eth0
# 显示路由表详细信息
ip -s route show
5.2 管理路由
# 添加静态路由
sudo ip route add 192.168.2.0/24 via 192.168.1.1
sudo ip route add 10.0.0.0/8 via 192.168.1.1 dev eth0
# 添加默认路由
sudo ip route add default via 192.168.1.1
sudo ip route add default via 192.168.1.1 dev eth0
# 删除路由
sudo ip route del 192.168.2.0/24
sudo ip route del default
# 修改路由
sudo ip route change 192.168.2.0/24 via 192.168.1.2
# 清空路由表
sudo ip route flush dev eth0
5.3 多路由表管理
# 查看所有路由表
ip route show table all
# 查看指定路由表
ip route show table 100
# 向指定路由表添加路由
sudo ip route add 192.168.3.0/24 via 192.168.1.1 table 100
# 添加路由规则
sudo ip rule add from 192.168.1.100 table 100
6. 邻居表管理(neigh对象)
6.1 查看ARP/NDP表
# 查看邻居表(ARP/NDP)
ip neighbor show
# 简写形式
ip neigh
ip n
# 查看指定接口的邻居
ip neigh show dev eth0
# 显示邻居表统计信息
ip -s neigh show
6.2 管理邻居表
# 添加静态ARP条目
sudo ip neigh add 192.168.1.50 lladdr 00:11:22:33:44:55 dev eth0 nud permanent
# 删除ARP条目
sudo ip neigh del 192.168.1.50 dev eth0
# 清空邻居表
sudo ip neigh flush dev eth0
# 刷新指定IP的ARP缓存
sudo ip neigh flush 192.168.1.50
7. 实战应用场景
7.1 网络故障排除脚本
#!/bin/bash
# 网络诊断脚本
echo "=== 网络接口状态 ==="
ip -c link show
echo -e "\\n=== IP地址配置 ==="
ip -c addr show
echo -e "\\n=== 路由表 ==="
ip -c route show
echo -e "\\n=== ARP表 ==="
ip -c neigh show
echo -e "\\n=== 网络统计 ==="
ip -s link show
7.2 多IP地址绑定
#!/bin/bash
# 为Web服务器绑定多个IP
INTERFACE="eth0"
BASE_IP="192.168.1"
NETMASK="/24"
# 绑定10个IP地址
for i in {100..110}; do
sudo ip addr add ${BASE_IP}.${i}${NETMASK} dev $INTERFACE label ${INTERFACE}:${i}
echo "已添加IP: ${BASE_IP}.${i}"
done
echo "当前IP配置:"
ip addr show dev $INTERFACE | grep inet
7.3 路由策略配置
#!/bin/bash
# 多线路路由策略
# 创建路由表
echo "100 wan1" >> /etc/iproute2/rt_tables
echo "200 wan2" >> /etc/iproute2/rt_tables
# 配置路由表100
sudo ip route add default via 192.168.1.1 table wan1
sudo ip route add 192.168.1.0/24 dev eth0 table wan1
# 配置路由表200
sudo ip route add default via 192.168.2.1 table wan2
sudo ip route add 192.168.2.0/24 dev eth1 table wan2
# 配置策略路由
sudo ip rule add from 192.168.1.100 table wan1
sudo ip rule add from 192.168.2.100 table wan2
8. 高级技巧
8.1 批量操作
# 从文件读取配置(适用于自动化)
sudo ip -batch <<EOF
link set eth0 up
addr add 192.168.1.100/24 dev eth0
route add default via 192.168.1.1
EOF
8.2 JSON格式输出
# JSON格式输出,便于脚本处理
ip -j link show
ip -j addr show
ip -j route show
# 结合jq处理JSON输出
ip -j addr show | jq '.[] | select(.ifname=="eth0") | .addr_info[] | select(.family=="inet") | .local'
8.3 网络命名空间
# 创建网络命名空间
sudo ip netns add ns1
# 在命名空间中执行命令
sudo ip netns exec ns1 ip link show
sudo ip netns exec ns1 ip addr add 192.168.100.1/24 dev lo
# 删除命名空间
sudo ip netns del ns1
9. 常用命令速查表
| 查看接口 | ip link show |
| 启用接口 | ip link set eth0 up |
| 查看IP | ip addr show |
| 添加IP | ip addr add 192.168.1.100/24 dev eth0 |
| 查看路由 | ip route show |
| 添加路由 | ip route add 192.168.2.0/24 via 192.168.1.1 |
| 查看ARP | ip neighbor show |
| 添加ARP | ip neigh add 192.168.1.50 lladdr 00:11:22:33:44:55 dev eth0 |

|
🌺The End🌺点点关注,收藏不迷路🌺 |





