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/