Linux的ip命令和ifconfig類似,但前者功能更強大,並旨在取代后者。使用ip命令,只需一個命令,你就能很輕松地執行一些網絡管理任務。ifconfig是net-tools中已被廢棄使用的一個命令,許多年前就已經沒有維護了。iproute2套件里提供了許多增強功能的命令,ip命令即是其中之一。

要安裝ip,請點擊這里下載iproute2套裝工具 。不過,大多數Linux發行版已經預裝了iproute2工具。
你也可以使用git命令來下載最新源代碼來編譯:
$ git clone https://kernel.googlesource.com/pub/scm/linux/kernel/git/shemminger/iproute2.git
設置和刪除Ip地址
要給你的機器設置一個IP地址,可以使用下列ip命令:
[root@Gin scripts]# ip addr add 192.168.17.30/24 dev eth0
[root@Gin scripts]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
link/ether 00:0c:29:84:0c:21 brd ff:ff:ff:ff:ff:ff
inet 192.168.17.129/24 brd 192.168.17.255 scope global eth0
inet 192.168.17.30/24 scope global secondary eth0
inet6 fe80::20c:29ff:fe84:c21/64 scope link
valid_lft forever preferred_lft forever
請注意IP地址要有一個后綴,比如/24。這種用法用於在無類域內路由選擇(CIDR)中來顯示所用的子網掩碼。在這個例子中,子網掩碼是255.255.255.0。
你也可以使用相同的方式來刪除IP地址,只需用del代替add。
[root@Gin scripts]# ip addr del 192.168.17.30/24 dev eth0
[root@Gin scripts]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
link/ether 00:0c:29:84:0c:21 brd ff:ff:ff:ff:ff:ff
inet 192.168.17.129/24 brd 192.168.17.255 scope global eth0
inet6 fe80::20c:29ff:fe84:c21/64 scope link
valid_lft forever preferred_lft forever
列出路由表條目
ip命令的路由對象的參數還可以幫助你查看網絡中的路由數據,並設置你的路由表。第一個條目是默認的路由條目,你可以隨意改動它。
在這個例子中,有幾個路由條目。這個結果顯示有幾個設備通過不同的網絡接口連接起來。它們包括WIFI、以太網和一個點對點連接。
[root@Gin scripts]# ip route show 192.168.17.0/24 dev eth0 proto kernel scope link src 192.168.17.129 169.254.0.0/16 dev eth0 scope link metric 1002 default via 192.168.17.2 dev eth0
假設現在你有一個IP地址,你需要知道路由包從哪里來。可以使用下面的路由選項(譯注:列出了路由所使用的接口等):
[root@Gin scripts]# ip route get 192.168.17.130
192.168.17.130 dev eth0 src 192.168.17.129
cache mtu 1500 advmss 1460 hoplimit 64
更改默認路由
要更改默認路由,使用下面ip命令:
[root@Gin scripts]# ip route add default via 192.168.17.3
顯示網絡統計數據
使用ip命令還可以顯示不同網絡接口的統計數據
[root@Gin scripts]# ip -s link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
RX: bytes packets errors dropped overrun mcast
0 0 0 0 0 0
TX: bytes packets errors dropped carrier collsns
0 0 0 0 0 0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
link/ether 00:0c:29:84:0c:21 brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped overrun mcast
135268 1134 0 0 0 0
TX: bytes packets errors dropped carrier collsns
134830 960 0 0 0 0
當你需要獲取一個特定網絡接口的信息時,在網絡接口名字后面添加選項ls即可。使用多個選項-s會給你這個特定接口更詳細的信息。特別是在排除網絡連接故障時,這會非常有用。
$ ip -s -s link ls p2p1

ARP條目
地址解析協議(ARP)用於將一個IP地址轉換成它對應的物理地址,也就是通常所說的MAC地址。使用ip命令的neigh或者neighbour選項,你可以查看接入你所在的局域網的設備的MAC地址。
[root@Gin scripts]# ip neighbour 192.168.17.1 dev eth0 lladdr 00:50:56:c0:00:08 DELAY
監控netlink消息
也可以使用ip命令查看netlink消息。monitor選項允許你查看網絡設備的狀態。比如,所在局域網的一台電腦根據它的狀態可以被分類成REACHABLE或者STALE。使用下面的命令:
[root@Gin scripts]# ip monitor all [NEIGH]192.168.17.2 dev eth0 lladdr 00:50:56:f3:2d:50 REACHABLE [NEIGH]192.168.17.1 dev eth0 lladdr 00:50:56:c0:00:08 REACHABLE
激活和停止網絡接口
你可以使用ip命令的up和down選項來激某個特定的接口,就像ifconfig的用法一樣。
在這個例子中,當ppp0接口被激活和在它被停止和再次激活之后,你可以看到相應的路由表條目。這個接口可能是wlan0或者eth0。將ppp0更改為你可用的任意接口即可。
$ ip link set eth0 down $ ip link set eth0 up
獲取幫助
當你陷入困境,不知道某一個特定的選項怎么用的時候,你可以使用help選項。man頁面並不會提供許多關於如何使用ip選項的信息,因此這里就是獲取幫助的地方。
比如,想知道關於route選項更多的信息:
[root@Gin scripts]# ip route help
Usage: ip route { list | flush } SELECTOR
ip route get ADDRESS [ from ADDRESS iif STRING ]
[ oif STRING ] [ tos TOS ]
ip route { add | del | change | append | replace | monitor } 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 ]
TYPE := [ unicast | local | broadcast | multicast | throw |
unreachable | prohibit | blackhole | nat ]
TABLE_ID := [ local | main | default | all | NUMBER ]
SCOPE := [ host | link | global | NUMBER ]
FLAGS := [ equalize ]
MP_ALGO := { rr | drr | random | wrandom }
NHFLAGS := [ onlink | pervasive ]
RTPROTO := [ kernel | boot | static | NUMBER ]
TIME := NUMBER[s|ms]
小結
對於網絡管理員們和所有的Linux使用者們,ip命令是必備工具。是時候拋棄ifconfig命令了,特別是當你寫腳本時。
via: http://linoxide.com/linux-command/use-ip-command-linux/
