linux的ip命令和ifconfig类似,但前者功能更强大,并旨在取代后者。使用ip命令,只需一个命令,你就能很轻松地执行一些网络管理任务。ifconfig是net-tools中已被废弃使用的一个命令,许多年前就已经没有维护了。iproute2套件里提供了许多增强功能的命令,ip命令即是其中之一。


要安装ip,请点击这里下载iproute2套装工具 。不过,大多数Linux发行版已经预装了iproute2工具,我所使用的cenos7也已经安装好了。
你也可以使用git命令来下载最新源代码来编译:

git clone https://kernel.googlesource.com/pub/scm/linux/kernel/git/shemminger/iproute2

添加Ip地址

[[email protected] ~]# ip addr add 地址/掩码 dev 网卡
[[email protected] ~]# ip addr add 10.0.0.1/24 dev ens3

查看是否添加成功:

[[email protected] ~]# ip add show ens3
2: ens3:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:16:3c:5a:28:36 brd ff:ff:ff:ff:ff:ff
    inet 103.42.214.185/24 brd 103.42.214.255 scope global dynamic ens3
       valid_lft 21304834sec preferred_lft 21304834sec
    inet 10.0.0.1/24 scope global ens3
       valid_lft forever preferred_lft forever
    inet6 fe80::52a8:534b:6bbc:84ec/64 scope link 
       valid_lft forever preferred_lft forever

删除IP地址

你也可以使用相同的方式来删除IP地址,只需用del代替add.

[[email protected] ~]# ip addr del 10.0.0.1/24 dev ens3

查看是否删除成功:

[[email protected] ~]# ip add show ens3
2: ens3:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:16:3c:5a:28:36 brd ff:ff:ff:ff:ff:ff
    inet 103.42.214.185/24 brd 103.42.214.255 scope global dynamic ens3
       valid_lft 21304710sec preferred_lft 21304710sec
    inet6 fe80::52a8:534b:6bbc:84ec/64 scope link 
       valid_lft forever preferred_lft forever

列出路由表条目

ip命令的路由对象的参数还可以帮助你查看网络中的路由数据,并设置你的路由表。第一个条目是默认的路由条目,你可以随意改动它。

[[email protected] ~]# ip route show
default via 103.42.214.129 dev ens3  proto static  metric 100 
43.239.156.3 via 103.42.214.129 dev ens3  proto dhcp  metric 100 
103.42.214.0/24 dev ens3  proto kernel  scope link  src 103.42.214.185  metric 100 

假设现在你有一个IP地址,你需要知道路由包从哪里来。可以使用下面的路由选项(译注:列出了路由所使用的接口等):

[[email protected] ~]# ip route get 203.104.192.252
203.104.192.252 via 103.42.214.129 dev ens3  src 103.42.214.185 
    cache 

更改默认路由

[[email protected] ~]#  ip route add default via 103.42.214.185

显示网络统计数据

使用ip命令还可以显示不同网络接口的统计数据。

[[email protected] ~]# ip -s link
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    RX: bytes  packets  errors  dropped overrun mcast   
    1551184    1679     0       0       0       0       
    TX: bytes  packets  errors  dropped carrier collsns 
    1551184    1679     0       0       0       0       
2: ens3:  mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether 00:16:3c:5a:28:36 brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast   
    1600242326 24178377 0       0       0       0       
    TX: bytes  packets  errors  dropped carrier collsns 
    518491490  1346047  0       0       0       0     

当你需要获取一个特定网络接口的信息时,在网络接口名字后面添加选项ls即可。使用多个选项-s会给你这个特定接口更详细的信息。特别是在排除网络连接故障时,这会非常有用.

[[email protected] ~]# ip -s -s link ls ens3
2: ens3:  mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether 00:16:3c:5a:28:36 brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast   
    1600491831 24183603 0       0       0       0       
    RX errors: length   crc     frame   fifo    missed
               0        0       0       0       205384  
    TX: bytes  packets  errors  dropped carrier collsns 
    518496984  1346100  0       0       0       0       
    TX errors: aborted  fifo   window heartbeat transns
               0        0       0       0       2      

ARP条目

地址解析协议(ARP)用于将一个IP地址转换成它对应的物理地址,也就是通常所说的MAC地址。使用ip命令的neigh或者neighbour选项,你可以查看接入你所在的局域网的设备的MAC地址.

[[email protected] ~]#  ip neighbour
103.42.214.129 dev ens3 lladdr 14:fe:b5:d4:90:8b DELAY

监控netlink消息

也可以使用ip命令查看netlink消息。monitor选项允许你查看网络设备的状态。比如,所在局域网的一台电脑根据它的状态可以被分类成REACHABLE或者STALE。使用下面的命令:

[[email protected] ~]# ip monitor all
[nsid current]103.42.214.129 dev ens3 lladdr 14:fe:b5:d4:90:8b STALE
[nsid current]103.42.214.129 dev ens3 lladdr 14:fe:b5:d4:90:8b STALE
[nsid current]103.42.214.129 dev ens3 lladdr 14:fe:b5:d4:90:8b STALE
[nsid current]103.42.214.129 dev ens3 lladdr 14:fe:b5:d4:90:8b STALE
[nsid current]103.42.214.129 dev ens3 lladdr 14:fe:b5:d4:90:8b STALE
[nsid current]103.42.214.129 dev ens3 lladdr 14:fe:b5:d4:90:8b STALE
[nsid current]103.42.214.129 dev ens3 lladdr 14:fe:b5:d4:90:8b STALE
[nsid current]103.42.214.129 dev ens3 lladdr 14:fe:b5:d4:90:8b STALE
[nsid current]103.42.214.129 dev ens3 lladdr 14:fe:b5:d4:90:8b STALE
[nsid current]103.42.214.129 dev ens3 lladdr 14:fe:b5:d4:90:8b STALE
[nsid current]103.42.214.129 dev ens3 lladdr 14:fe:b5:d4:90:8b STALE
[nsid current]103.42.214.129 dev ens3 lladdr 14:fe:b5:d4:90:8b STALE
[nsid current]103.42.214.129 dev ens3 lladdr 14:fe:b5:d4:90:8b STALE
[nsid current]103.42.214.129 dev ens3 lladdr 14:fe:b5:d4:90:8b STALE
[nsid current]103.42.214.129 dev ens3 lladdr 14:fe:b5:d4:90:8b STALE
[nsid current]103.42.214.129 dev ens3 lladdr 14:fe:b5:d4:90:8b STALE

激活和停止网络接口

你可以使用ip命令的up和down选项来激某个特定的接口,就像ifconfig的用法一样。
在这个例子中,当ppp0接口被激活和在它被停止和再次激活之后,你可以看到相应的路由表条目。这个接口可能是wlan0或者eth0。将ppp0更改为你可用的任意接口即可.

[[email protected] ~]# ip link set ens3 down
[[email protected] ~]# ip link set ens3 up

获取帮助

当你陷入困境,不知道某一个特定的选项怎么用的时候,你可以使用help选项。man页面并不会提供许多关于如何使用ip选项的信息,因此这里就是获取帮助的地方。
比如,想知道关于route选项更多的信息:

[[email protected] ~]# ip route help
Usage: ip route { list | flush } SELECTOR
       ip route save SELECTOR
       ip route restore
       ip route showdump
       ip route get ADDRESS [ from ADDRESS iif STRING ]
                            [ oif STRING ]  [ tos TOS ]
                            [ mark NUMBER ]
       ip route { add | del | change | append | replace } ROUTE
SELECTOR := [ root PREFIX ] [ match PREFIX ] [ exact PREFIX ]
            [ table TABLE_ID ] [ proto RTPROTO ]
            [ type TYPE ] [ scope SCOPE ]
ROUTE := NODE_SPEC [ INFO_SPEC ]
NODE_SPEC := [ TYPE ] PREFIX [ tos TOS ]
             [ table TABLE_ID ] [ proto RTPROTO ]
             [ scope SCOPE ] [ metric METRIC ]
INFO_SPEC := NH OPTIONS FLAGS [ nexthop NH ]...
NH := [ via ADDRESS ] [ dev STRING ] [ weight NUMBER ] NHFLAGS
OPTIONS := FLAGS [ mtu NUMBER ] [ advmss NUMBER ]
           [ rtt TIME ] [ rttvar TIME ] [reordering NUMBER ]
           [ window NUMBER ] [ cwnd NUMBER ] [ initcwnd NUMBER ]
           [ ssthresh NUMBER ] [ realms REALM ] [ src ADDRESS ]
           [ rto_min TIME ] [ hoplimit NUMBER ] [ initrwnd NUMBER ]
           [ features FEATURES ] [ quickack BOOL ] [ congctl NAME ]
           [ expires TIME ]
TYPE := { unicast | local | broadcast | multicast | throw |
          unreachable | prohibit | blackhole | nat }
TABLE_ID := [ local | main | default | all | NUMBER ]
SCOPE := [ host | link | global | NUMBER ]
NHFLAGS := [ onlink | pervasive ]
RTPROTO := [ kernel | boot | static | NUMBER ]
TIME := NUMBER[s|ms]
BOOL := [1|0]
FEATURES := ecn

小结

现在linux版本都到centos7(我用的最多的是centos7)了,而centos7中已经去除了ifconfig命令。所以对于网络管理者们和所有的Linux使用者们,ip命令是必备工具。是时候抛弃ifconfig命令了!