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地址
[root@hk ~]# ip addr add 地址/掩码 dev 网卡
[root@hk ~]# ip addr add 10.0.0.1/24 dev ens3
查看是否添加成功:
[root@hk ~]# ip add show ens3
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> 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.
[root@hk ~]# ip addr del 10.0.0.1/24 dev ens3
查看是否删除成功:
[root@hk ~]# ip add show ens3
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> 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命令的路由对象的参数还可以帮助你查看网络中的路由数据,并设置你的路由表。第一个条目是默认的路由条目,你可以随意改动它。
[root@hk ~]# 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地址,你需要知道路由包从哪里来。可以使用下面的路由选项(译注:列出了路由所使用的接口等):
[root@hk ~]# ip route get 203.104.192.252
203.104.192.252 via 103.42.214.129 dev ens3 src 103.42.214.185
cache
更改默认路由
[root@hk ~]# ip route add default via 103.42.214.185
显示网络统计数据
使用ip命令还可以显示不同网络接口的统计数据。
[root@hk ~]# ip -s link
1: lo: <LOOPBACK,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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会给你这个特定接口更详细的信息。特别是在排除网络连接故障时,这会非常有用.
[root@hk ~]# ip -s -s link ls ens3
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> 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地址.
[root@hk ~]# ip neighbour
103.42.214.129 dev ens3 lladdr 14:fe:b5:d4:90:8b DELAY
监控netlink消息
也可以使用ip命令查看netlink消息。monitor选项允许你查看网络设备的状态。比如,所在局域网的一台电脑根据它的状态可以被分类成REACHABLE或者STALE。使用下面的命令:
[root@hk ~]# 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更改为你可用的任意接口即可.
[root@hk ~]# ip link set ens3 down
[root@hk ~]# ip link set ens3 up
获取帮助
当你陷入困境,不知道某一个特定的选项怎么用的时候,你可以使用help选项。man页面并不会提供许多关于如何使用ip选项的信息,因此这里就是获取帮助的地方。 比如,想知道关于route选项更多的信息:
[root@hk ~]# 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命令了!