放棄 ifconfig,擁抱 ip 命令
在很長一段時間內,ifconfig
命令是配置網路介面的默認方法。它為 Linux 用戶提供了很好的服務,但是網路很複雜,所以配置網路的命令必須健壯。ip
命令是現代系統中新的默認網路命令,在本文中,我將向你展示如何使用它。
ip
命令工作在 OSI 網路棧 的兩個層上:第二層(數據鏈路層)和第三層(網路 或 IP)層。它做了之前 net-tools
包的所有工作。
安裝 ip
ip
命令包含在 iproute2util
包中,它可能已經在你的 Linux 發行版中安裝了。如果沒有,你可以從發行版的倉庫中進行安裝。
ifconfig 和 ip 使用對比
ip
和 ifconfig
命令都可以用來配置網路介面,但它們做事方法不同。接下來,作為對比,我將用它們來執行一些常見的任務。
查看網口和 IP 地址
如果你想查看主機的 IP 地址或網路介面信息,ifconfig
(不帶任何參數)命令提供了一個很好的總結。
$ ifconfig
eth0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether bc:ee:7b:5e:7d:d8 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 41 bytes 5551 (5.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 41 bytes 5551 (5.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.1.1.6 netmask 255.255.255.224 broadcast 10.1.1.31
inet6 fdb4:f58e:49f:4900:d46d:146b:b16:7212 prefixlen 64 scopeid 0x0<global>
inet6 fe80::8eb3:4bc0:7cbb:59e8 prefixlen 64 scopeid 0x20<link>
ether 08:71:90:81:1e:b5 txqueuelen 1000 (Ethernet)
RX packets 569459 bytes 779147444 (743.0 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 302882 bytes 38131213 (36.3 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
新的 ip
命令提供了類似的結果,但命令是 ip address show
,或者簡寫為 ip a
:
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
link/ether bc:ee:7b:5e:7d:d8 brd ff:ff:ff:ff:ff:ff
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 08:71:90:81:1e:b5 brd ff:ff:ff:ff:ff:ff
inet 10.1.1.6/27 brd 10.1.1.31 scope global dynamic wlan0
valid_lft 83490sec preferred_lft 83490sec
inet6 fdb4:f58e:49f:4900:d46d:146b:b16:7212/64 scope global noprefixroute dynamic
valid_lft 6909sec preferred_lft 3309sec
inet6 fe80::8eb3:4bc0:7cbb:59e8/64 scope link
valid_lft forever preferred_lft forever
添加 IP 地址
使用 ifconfig
命令添加 IP 地址命令為:
$ ifconfig eth0 add 192.9.203.21
ip
類似:
$ ip address add 192.9.203.21 dev eth0
ip
中的子命令可以縮短,所以下面這個命令同樣有效:
$ ip addr add 192.9.203.21 dev eth0
你甚至可以更短些:
$ ip a add 192.9.203.21 dev eth0
移除一個 IP 地址
添加 IP 地址與刪除 IP 地址正好相反。
使用 ifconfig
,命令是:
$ ifconfig eth0 del 192.9.203.21
ip
命令的語法是:
$ ip a del 192.9.203.21 dev eth0
啟用或禁用組播
使用 ifconfig
介面來啟用或禁用 組播 :
# ifconfig eth0 multicast
對於 ip
,使用 set
子命令與設備(dev
)以及一個布爾值和 multicast
選項:
# ip link set dev eth0 multicast on
啟用或禁用網路
每個系統管理員都熟悉「先關閉,然後打開」這個技巧來解決問題。對於網路介面來說,即打開或關閉網路。
ifconfig
命令使用 up
或 down
關鍵字來實現:
# ifconfig eth0 up
或者你可以使用一個專用命令:
# ifup eth0
ip
命令使用 set
子命令將網路設置為 up
或 down
狀態:
# ip link set eth0 up
開啟或關閉地址解析功能(ARP)
使用 ifconfig
,你可以通過聲明它來啟用:
# ifconfig eth0 arp
使用 ip
,你可以將 arp
屬性設置為 on
或 off
:
# ip link set dev eth0 arp on
ip 和 ipconfig 的優缺點
ip
命令比 ifconfig
更通用,技術上也更有效,因為它使用的是 Netlink
套接字,而不是 ioctl
系統調用。
ip
命令可能看起來比 ifconfig
更詳細、更複雜,但這是它擁有更多功能的一個原因。一旦你開始使用它,你會了解它的內部邏輯(例如,使用 set
而不是看起來隨意混合的聲明或設置)。
最後,ifconfig
已經過時了(例如,它缺乏對網路命名空間的支持),而 ip
是為現代網路而生的。嘗試並學習它,使用它,你會由衷高興的!
via: https://opensource.com/article/21/1/ifconfig-ip-linux
作者:Rajan Bhardwaj 選題:lujun9972 譯者:MjSeven 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive