AI智能
改变未来

Linux 中如何使用 IP 命令

老版本的 Linux 中都是使用

ifconfig

命令检查和配置网络接口,但是该命令目前已经没有维护了,取而代之的是

ip

命令

ip

命令和

ifconfig

命令很相似,但是 相比起来,

ip

命令的功能更强大,它能执行多种

ifconfig

命令无法执行的任务

本文将介绍

ip

命令常用的一些操作

显示所有网络接口信息

输入

ip addr

或者

ip a

命令可以显示所有的网络接口信息

[root@ecs-centos-7 ~]# ip addr1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope hostvalid_lft forever preferred_lft forever2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500qdisc pfifo_fast state UP group default qlen 1000link/ether fa:16:3e:e0:4f:b8 brd ff:ff:ff:ff:ff:ffinet 192.168.0.9/24 brd 192.168.0.255 scope global noprefixroute dynamic eth0valid_lft 74409sec preferred_lft 74409secinet6 fe80::f816:3eff:fee0:4fb8/64 scope linkvalid_lft forever preferred_lft forever[root@ecs-centos-7 ~]#

上面的输出中,可以看出系统目前的网络接口分别是

lo

eth0

, 前者是网络环回接口,后者是常规的网络接口

输出接口信息的 字段详解

<BROADCAST,MULTICAST,UP,LOWER_UP>: BROADCAST 表示支持广播, MULTICAST 表示支持多播UP 网络接口处于开启状态LOWER_UP 表示网络电缆已插入并且已连上网络mtu 1500: 最大传输的单位1500字节qdisc pfifo_fast: 数据包排队state UP: 接口状态已开启qlen 1000: 传输队列长度link/ether fa:16:3e:e0:4f:b8 Mac地址brd ff:ff:ff:ff:ff:ff 广播地址inet 192.168.0.9/24 : IPV4scope global: 全局有效dynamic eth0: 动态分配地址valid_lft 74409sec: IPV4有效期preferred_lft 74409sec: IPV4首选生存期inet6 fe80::f816:3eff:fee0:4fb8/64  IPV6scope link: 仅在此接口上生效

除了输出所有的网络接口信息外,还可以按照以下方式个性化输出网络接口信息

  • 按照是否支持 IPV4 或 IPV6输出

命令

ip -4 a

会输出只支持IPV4的接口信息

同样,命令

ip -6 a

会输出只支持IPV6的接口信息

  • 按照接口名字输出

命令

ip a show eth0

会输出

eth0

接口的信息

[root@ecs-centos-7 ~]# ip a show eth02: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500qdisc pfifo_fast state UP group default qlen 1000link/ether fa:16:3e:e0:4f:b8 brd ff:ff:ff:ff:ff:ffinet 192.168.0.9/24 brd 192.168.0.255 scope global noprefixroute dynamic eth0valid_lft 73494sec preferred_lft 73494secinet6 fe80::f816:3eff:fee0:4fb8/64 scope linkvalid_lft forever preferred_lft forever
  • 按照网络接口开启和关闭状态输出

命令

ip link ls up

会输出所有处于开启状态的网络接口信息

那么,

ip link ls down

就会输出所有处于关闭状态的网络接口信息

为网络接口 添加、移除 IP地址

  • 添加IP

为指定网络接口分配IP地址的命令格式:

ip a add ip地址 dev 接口名字

比如:现在要为

eth0

网络接口分配一个网络掩码为 20 的IP

192.168.1.10

, 具体的输入请看下面的实例

[root@ecs-centos-7 ~]# ip a add 192.168.1.10/20  dev eth0[root@ecs-centos-7 ~]# ip a show eth02: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500qdisc pfifo_fast state UP group default qlen 1000link/ether fa:16:3e:e0:4f:b8 brd ff:ff:ff:ff:ff:ffinet56c192.168.0.9/24 brd 192.168.0.255 scope global noprefixroute dynamic eth0valid_lft 71787sec preferred_lft 71787secinet 192.168.1.10/20 scope global eth0valid_lft forever preferred_lft foreverinet6 fe80::f816:3eff:fee0:4fb8/64 scope linkvalid_lft forever preferred_lft forever

从上面例子的输出结果可以看出,网络接口

eth0

上多了一个

192.168.1.10

的 IP

命令

ip a add 192.168.1.10/20  dev eth0

执行成功的话,是没有任何输出,如果网络接口

eth0

不存在的话,会输出

Cannot find device \"eth0\"

的错误信息

其实,还可以通过执行

ping 192.168.1.10

命令来测试网络接口上IP是否分配成功,如果能 ping 通IP的话,表示分配成功,否则表示失败

说明:192.168.1.10/20 中 20 是 CIDR 表示法的网络掩码,想详细了解的可以自行查阅网络掩码的资料

  • 移除IP

网络接口上添加了IP之后,可使用

ip a del ip地址 dev 接口名字

命令从指定的接口移除指定的IP,移除的时候IP后面需要携带网络掩码

[root@ecs-centos-7 ~]# ip a del 192.168.1.10/20 dev eth0[root@ecs-centos-7 ~]# ip a show2b58eth02: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500qdisc pfifo_fast state UP group default qlen 1000link/ether fa:16:3e:e0:4f:b8 brd ff:ff:ff:ff:ff:ffinet 192.168.0.9/24 brd 192.168.0.255 scope global noprefixroute dynamic eth0valid_lft 71414sec preferred_lft 71414secinet6 fe80::f816:3eff:fee0:4fb8/64 scope linkvalid_lft forever preferred_lft forever

修改网络接口状态

要关闭或者开启网络接口,可以使用

ip link set dev 接口名字 up/down

命令

例如:有

lo

eth0

两个网络接口, 具体接口信息如下

[root@ecs-centos-7 ~]# ip a1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope hostvalid_lft forever preferred_lft forever2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500qdisc pfifo_fast state UP group default qlen 1000link/ether fa:16:3e:e0:4f:b8 brd ff:ff:ff:ff:ff:ffinet 192.168.0.9/24 brd 192.168.0.255 scope global noprefixroute dynamic eth0valid_lft 59216sec preferred_lft 59216secinet6 fe80::f816:3eff:fee0:4fb8/64 scope linkvalid_lft forever preferred_lft forever

通过

ping -w 3 127.0.0.1

命令测试,结果表明

lo

接口目前是开启状态,具体的测试输出如下所示

[root@ecs-centos-7 ~]# ping -w 3 127.0.0.1PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.014 ms64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.026 ms64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.022 ms64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.023 ms--- 127.0.0.1 ping statistics ---4 packets transmitted, 4 received, 0% packet loss, time 2999msrtt min/avg/max/mdev = 0.014/0.021/0.026/0.005 ms

现在关闭

lo

网络接口,并再次测试该接口的状态,具体命令如下:

[root@ecs-centos-7 ~]# ip link set dev lo down[root@ecs-centos-7 ~]# ip link show lo1: lo: <LOOPBACK> mtu 65536 qdisc noqueue state DOWN mode DEFAULT group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00[root@ecs-centos-7 ~]# ping -w 3 127.0.0.1PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.--- 127.0.0.1 ping statistics ---4 packets transmitted, 0 received, 100% packet loss, time 2999ms

执行

ip link set dev lo down

命令之后,关闭了网络接口

lo

,通过

ip link show lo

命令查看该接口的信息,结果表明接口是关闭状态,再次通过

ping -w 3 127.0.0.1

测试接口的状态,再一次确认了接口是关闭状态

修改网络接口传输队列长度

通过

p l set txqueuelen 长度 dev 接口名字

命令可以设置网络接口的传输队列长度

[root@ecs-centos-7 ~]# ip l show eth02: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500qdisc pfifo_fast state UP mode DEFAULT group default qlen 1200link/ether fa:16:3e:e0:4f:b8 brd ff:ff:ff:ff:ff:ff[root@ecs-centos-7 ~]# ip l set txqueuelen 1000 dev eth0[root@ecs-centos-7 ~]# ip l show eth02: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000link/ether fa:16:3e:e0:4f:b8 brd ff:ff:ff:ff:ff:ff

上面的例子中,字符串

qlen 1200

表示传输队列长度是

1200

从例子中可以看出,修改传输队列长度之前,传输队列长度是

1200

执行

ip l set txqueuelen 1000 dev eth0

命令把传输队列长队修改为

1000

, 然后再执行

ip l show eth0

命令查询

eth0

网络接口的信息,查询结果中

default qlen 1000

说明修改成功

修改网络接口的MTU(最大传输单元)

通过

p l set mtu 长度 dev 接口名字

命令可以设置网络接口的最大传输单元

[root@ecs-centos-7 ~]# ip l show eth02: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1600 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1200link/ether fa:16:3e:e0:4f:b8 brd ff:ff:ff:ff:ff:ff[root@ecs-centos-7 ~]# ip l set set mtu 1500dev eth0[root@ecs-centos-7 ~]# ip l show eth02: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500qdisc pfifo_fast state UP mode DEFAULT group default qlen 1200link/ether fa:16:3e:e0:4f:b8 brd ff:ff:ff:ff:ff:ff

上面的例子中,字符串

mtu 1600

表示最大传输单元是

1600

从例子中可以看出,修改传输队列长度之前,最大传输单元是

1600

执行

ip l set set mtu 1500dev eth0

命令把最大传输单元修改为

1500

, 然后再执行

ip l show eth0

命令查询

eth0

网络接口的信息,查询结果中

mtu 1500

说明修改成功

查看IP路由表

下面几条命令都可以查看 IP 路由表

ip rip routeip r listip route list
  • 查看路由表
[root@ecs-centos-7 ~]# ip rdefault via 192.168.0.1 dev eth0 proto dhcp metric 100169.254.169.254 via 192.168.0.254 dev eth0 proto dhcp metric 100192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.9 metric 100
  • 查看指定IP以及网络掩码的路由表
[root@ecs-centos-7 ~]# ip r list 192.168.0.0/24192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.9 metric 100

查看ARP缓存

ARP是 Address Resolution Protocol 的缩写, 全称是地址解析协议,它是用于实现从IP地址到Mac地址的映射,也就是询问目标IP的Mac地址

在本地存储了一份IP对应Mac地址的映射表,这张表叫做 ARP缓存表,可以使用

ip n

命令查看缓存表

[root@ecs-centos-7 ~]# ip n192.168.0.1 dev eth0 lladdr fa:16:3e:64:38:a8 REACHABLE192.168.0.254 dev eth0 lladdr fa:fa:fa:fa:fa:01 STALE

更改网卡Mac地址

大部分场景中是不需要修改Mac地址的,但有时你可能想隐藏真实的Mac地址(物理地址),这时可以修改Mac地址,修改Mac地址的命令如下

ip link set dev 接口名 address 新的Mac地址

下面以修改

lo

网络接口的Mac地址为例来说明

[root@ecs-centos-7 ~]#ip l list lo1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00[root@ecs-centos-7 ~]# ip l set lo address fa:16:3e:e0:4f:b4[root@ecs-centos-7 ~]#ip l list lo1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000link/loopback fa:16:3e:e0:4f:b4 brd 00:00:00:00:00:00

从上面的例子中可以看出,

lo

接口初始的Mac地址是

00:00:00:00:00:00

执行

ip l set lo address fa:16:3e:e0:4f:b4

命令修改Mac地址,然后再执行

ip l list lo

查看

lo

接口的信息,输出的结果信息表明Mac地址修改成功

注意:如果当前网络接口上执行上面的命令,当前会话会中断,需要重启机器才能恢复,所以最好是在其他的网络接口上测试

查看网络统计信息

通过

ip -s link

命令可以查看网络接口上的一些统计数据,比如接口上传输的字节数、报文数,错误或者丢弃的报文数等等

[root@ecs-centos-7 ~]# ip -s link1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00RX: bytes  packets  errors  dropped overrun mcast272        2        0       0       0       0TX: bytes  packets  errors  dropped carrier collsns272        2        0       0       0       02: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000link/ether fa:16:3e:e0:4f:b8 brd ff:ff:ff:ff:ff:ffRX: bytes  packets  errors  dropped overrun mcast47949      531      0       0       0       0TX: bytes  packets  errors  dropped carrier collsns50816      492      0       0       0       0[root@ecs-centos-7 ~]#

想查看更详细的信息可以使用

ip -s -s link

命令, 这个在排除网络故障时经常用到

小结

本文介绍了

ip

命令的常见用法,更多的用法请使用

man ip

命令查看

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » Linux 中如何使用 IP 命令