Linux 常用命令 - ip 【显示和配置网卡参数】
简介
ip 是 “Internet Protocol” 的简写,属于 iproute2 工具集的组成部分。这个多功能网络配置工具通过 netlink 协议直接与内核通信,用于管理网络接口、路由表、ARP 缓存、隧道等网络组件。
使用方式
ip [ OPTIONS ] OBJECT { COMMAND | help }
ip [ -force ] -batch filename
OBJECT := { link | address | addrlabel | route | rule | neigh | ntable | tunnel | tuntap | maddress | mroute | mrule | monitor | xfrm | netns | l2tp | tcp_metrics | token | macsec | vrf | mptcp | ioam }
OPTIONS := { -V[ersion] | -h[uman-readable] | -s[tatistics] | -d[etails] | -r[esolve] | -iec | -f[amily] { inet | inet6 | link } | -4 | -6 | -B | -0 | -l[oops] { maximum-addr-flush-attempts } | -o[neline] | -rc[vbuf][size] | -t[imestamp] | -ts[hort] | -n[etns] name | -N[umeric] | -a[ll] | -c[olor] | -br[ief] | -j[son] | -p[retty] }
常用选项
-h, -human, -human-readable
:以易读格式显示网络统计数据(带单位)。-b, -batch <FILENAME>
:批量执行模式,从指定文件或标准输入读取命令序列,遇到第一条失败命令即停止执行。-force
:批量执行模式下若遇到错误不停止,继续执行后续指令,并且通过返回码反映出现的错误(遇到错误时不为零)。-s, -stats, -statistics
:输出更多信息,如果多次使用该选项,信息量会增加,通常是统计信息或时间值。-d, -details
:显示设备/接口的扩展属性。-l, -loops <COUNT>
:设置ip address flush
操作的最大重试次数,默认为 10 次,0 代表循环至所有地址都被删除。-f, -family <FAMILY>
:指定协议栈类型,协议栈可以为inet
,inet6
,bridge
,mpls
或link
。如果没有指定该选项,则会依据其他参数来猜测协议栈。如果给出的参数不能够猜测出协议栈,则默认会使用inet
或any
。link
作为一个特殊的标识符,表示不涉及网络协议。-4
:-family inet
的简写。-6
:-family inet6
的简写。-B
:-family bridge
的简写。-M
:-family mpls
的简写。-0
:-family link
的简写。-o, -oneline
: 单行输出模式,将多行记录压缩为单行(换行符转义为\
),这在使用wc
或grep
来进行记录条数统计时非常有用。-r, -resolve
:将 IP 地址转换为域名(依赖系统 DNS 设置)。-n, -netns <NETNS>
:跨命名空间操作:切换到指定网络命名空间NETNS
执行命令。等效于将ip netns exec NETNS ip [ OPTIONS ] OBJECT { COMMAND | help }
简化为ip -n[etns] NETNS [ OPTIONS ] OBJECT { COMMAND | help }
。-N, -Numeric
:直接显示协议号/范围等元数据的数字标识(不转换为更易读的名称)。-a, -all
:对当前类别所有对象执行操作(如果子命令支持的话)。例如ip -a link delete
删除所有网络接口(危险操作!)。-c[color][={always|auto|never}
:彩色输出模式配置(需终端支持)。如果不指定参数或参数为always
,则无论stdout
的状态,强制启用彩色输出。如果参数为auto
,则当stdout
是终端时启用彩色输出。如果参数为never
,则禁用彩色输出。如果该选项被指定了多次,则采用最后一次。当同时使用了-json
时该选项会被忽略。-t, -timestamp
:在使用监控选项时显示当前时间。-ts, -tshort
:类似于-timestamp
但简化输出的时间格式。-rc, -rcvbuf<SIZE>
:调整内核通信缓冲区,默认为 1MB。-iec
:单位转换基准设置为 1024 而非 1000。-br, -brief
:使用极简表格输出模式,当前支持的命令有ip addr show
,ip link show
以及ip neigh show
。-j, -json
:以JSON
格式输出结果(紧凑型)。-p, -pretty
:JSON 美化输出模式(增强可读性)。-V, -Version
:显示版本信息。
OBJECT
所有 OBJECT 名称均支持全称或缩写形式,比如 address
可以简写为 addr
或 a
。
address
:设备的协议(IP 或 IPV6)地址。addrlabel
:协议地址选择的标签配置。ioam
:管理IOAM
命名空间和模式。l2tp
:通过IP隧道传输以太网(L2TPv3)。link
:网络设备。maddress
:多播地址。monitor
:网络事件监视器。mptcp
:多路径 TCP 连接管理。mroute
:组播路由缓存操作。mrule
:组播路由策略规则管理。neighbour
:ARP
或NDISC
缓存管理。netns
:网络命名空间管理。ntable
:邻居缓存表参数管理。route
:路由表。rule
:路由策略数据库规则。tcp_metrics/tcpmetrics
:TCP 指标参数管理。token
:令牌化接口标识符管理。tunnel
:IP 隧道。tuntap
: TUN/TAP 设备管理。vrf
: 虚拟路由和转发设备管理。xfrm
:IPSec 策略管理。
COMMAND
COMMAND
用来指定要对前面选定的 OBJECT 执行的具体操作。
具体支持的操作项是根据所选择的对象类型来决定的。一般来说,对于大多数对象,你都可以执行 add
(添加)、delete
(删除)和 show
或 list
(显示/列出)这些基本操作。但并不是所有对象都支持全部这些操作,有些对象可能还有一些自己独特的、额外的命令。
其中,help
命令支持所有对象。其会列出这个对象支持哪些命令,以及这些命令的参数应该怎么写。
如果不指定命令,那么系统会尝试执行一个默认的命令。通常情况下,这个默认命令是 list
。但是,如果这种类型的对象本身就不支持被列出,那么默认命令就会是 help
。
环境变量 - COLORFGBG
如果你设置了 COLORFGBG
这个环境变量,ip
命令会利用它的值来判断你的终端背景是深色还是浅色,并据此选择对比度更高的颜色来显示输出,以提高可读性。
通常,COLORFGBG
环境变量的值包含两个或三个由分号 ;
分隔的数字。ip
命令关心的是最后一个数字。如果最后一个数字是 0 到 6 之间(包括 0 和 6)或者等于 8,那么 ip
命令会认为你正在使用深色背景,并选用适合深色背景的颜色方案:
COLORFGBG=";0" ip -c a
返回值
命令执行成功返回 0,语法错误返回 1,若执行过程中内核产生了错误则返回 2。
参考示例
显示网络接口信息
ip addr show
使用 addr show
可以显示分配给所有网络接口的地址信息:
jay@jaylinuxlenovo:~/test$ ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 68:f7:28:b3:02:81 brd ff:ff:ff:ff:ff:ff
inet 192.168.2.110/24 brd 192.168.2.255 scope global enp2s0
valid_lft forever preferred_lft forever
......
3: br-a9c8849ae008: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:d7:7c:99:f0 brd ff:ff:ff:ff:ff:ff
inet 172.18.0.1/16 brd 172.18.255.255 scope global br-a9c8849ae008
valid_lft forever preferred_lft forever
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:66:0b:80:97 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
显示指定网络接口的统计信息
ip -s link show lo
使用 -s
选项可以显示统计信息。这里的 lo
指定的是本地回环网络:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
RX: bytes packets errors dropped missed mcast
228037390453 236479161 0 0 0 0
TX: bytes packets errors dropped carrier collsns
228037390453 236479161 0 0 0 0
查看内核中的网络邻居表
ip neigh
使用 neigh
可以查看当前内核缓存的网络邻居表信息:
jay@jaylinuxlenovo:~/test$ ip neigh
192.168.2.169 dev enp2s0 lladdr 1c:69:7a:b4:65:42 STALE
192.168.2.1 dev enp2s0 lladdr a4:a9:30:7d:0c:5e REACHABLE
192.168.2.199 dev enp2s0 FAILED
192.168.1.1 dev enp2s0 lladdr 88:c1:74:69:58:e9 STALE
192.168.2.8 dev enp2s0 lladdr b6:28:8f:4c:25:2b STALE
192.168.2.10 dev enp2s0 lladdr 28:6d:cd:3c:7f:14 STALE
192.168.2.12 dev enp2s0 lladdr 32:d8:2d:24:76:8c STALE
192.168.2.30 dev enp2s0 lladdr d2:5c:9f:eb:18:fb STALE
......
查看路由表
ip route
使用 route
可以显示当前的路由表信息:
jay@jaylinuxlenovo:~/test$ ip route
default via 192.168.2.1 dev enp2s0 proto static
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown
172.18.0.0/16 dev br-a9c8849ae008 proto kernel scope link src 172.18.0.1 linkdown
192.168.2.0/24 dev enp2s0 proto kernel scope link src 192.168.2.110
注意事项
-
使用
ip
命令修改网络配置需要 root 权限。 -
修改网络配置时要小心,错误的配置可能导致网络中断。
-
使用
ip
命令操作网络接口时,请确保接口名称正确,以免误操作其他接口。 -
直接使用
ip
命令所做的大部分配置更改(如ip addr add
,ip route add
),这些更改在系统重启或网络服务重启后会丢失。 -
ip
命令的默认输出信息比较详细,适合人类阅读,但也可能比较冗长,对于脚本处理,可以考虑使用-brief (-br)
获取更简洁的输出,或者使用-json
获取 JSON 格式的输出。