Contents

linux中的ifconfig命令简介

1. 概述

有时我们需要**检查和重新配置 Linux 机器上的网络接口。**这有助于我们解决网络问题、安装或配置网络接口卡。

在本教程中,我们将研究 ifconfig ,它用于管理我们的网络接口。我们将看看它的语法和一些常见的用例。

2. 什么是ifconfig

ifconfig代表“接口配置”。它允许我们查看和配置网络接口设置

$ ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.91.129  netmask 255.255.255.0  broadcast 192.168.91.255
        ether 00:0c:29:b6:7f:1a  txqueuelen 1000  (Ethernet)
        RX packets 1823  bytes 916481 (916.4 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 950  bytes 105268 (105.2 KB)
        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 639  bytes 56025 (56.0 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 639  bytes 56025 (56.0 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

正如我们所见,只需运行此命令即可输出有关所有活动网络接口的信息。

3. 基本语法

让我们看一下基本语法:

ifconfig [options] [interface]

options参数确定ifconfig命令显示的内容。

interface参数指定我们要使用该命令定位的特定网络接口。 

4. 查看特定网络接口

假设我们想查看单个接口ens33的详细信息:

$ ifconfig ens33
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.91.129  netmask 255.255.255.0  broadcast 192.168.91.255
        ether 00:0c:29:b6:7f:1a  txqueuelen 1000  (Ethernet)
        RX packets 2281  bytes 949247 (949.2 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 991  bytes 111961 (111.9 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

如我们所见,列表现在只包含ens33接口的详细信息。

5. 常用显示选项

5.1. -a(全部)

如果我们想显示所有接口,无论它们是否处于活动状态,我们都可以添加*-a*标志:

$ ifconfig -a
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.91.129  netmask 255.255.255.0  broadcast 192.168.91.255
        ether 00:0c:29:b6:7f:1a  txqueuelen 1000  (Ethernet)
        RX packets 90793  bytes 114935888 (114.9 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 32279  bytes 2094115 (2.0 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
lo: flags=8<LOOPBACK>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 776  bytes 67908 (67.9 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 776  bytes 67908 (67.9 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

此命令返回ens33接口和lo接口。

我们可以通过查看 标志,特别是UPRUNNING关键字来查看接口是启用还是禁用。

从这里我们可以看到,似乎ens33网络接口已启用并正在运行,而lo接口已禁用。

如果我们在没有*-a选项的情况下运行该命令,它将仅显示ens33网络接口。*

5.2. -s(短)

对于接口的快速摘要,以及一些简短的网络统计信息,我们可以使用*-s*选项:

$ ifconfig -s
Iface      MTU    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
ens33     1500    90798      0      0 0         32284      0      0      0 BMRU
lo       65536      799      0      0 0           799      0      0      0 LRU

该命令为我们提供了一个简短的网络接口列表。

我们应该注意,这些网络接口名称可能会因计算机而异。

5.3. -v(详细)

我们可以使用 -v选项查看所有带有详细错误信息的活动网络接口

$ ifconfig -v
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.91.129  netmask 255.255.255.0  broadcast 192.168.91.255
        ether 00:0c:29:b6:7f:1a  txqueuelen 1000  (Ethernet)
        RX packets 90826  bytes 114938592 (114.9 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 32287  bytes 2094984 (2.0 MB)
        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 802  bytes 70854 (70.8 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 802  bytes 70854 (70.8 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

虽然此输出看起来与默认输出相同,但如果出现错误,它还会提供其他信息。

6. 启动和关闭接口

up和 down命令用于启用和禁用特定的网络接口。假设我们要禁用接口 ens33

$ sudo ifconfig ens33 down

我们应该注意,我们需要使用sudo来提升我们使用该命令的权限。

该命令停止了ens33网络接口。但是,它没有产生任何输出来告诉我们。

因此,让我们检查一下该接口是否已被禁用:

$ ifconfig -s
Iface      MTU    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
lo       65536      817      0      0 0           817      0      0      0 LRU

现在,让我们重新启用界面并再次检查:

$ sudo ifconfig ens33 up
$ ifconfig -s
Iface      MTU    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
ens33     1500    91291      0      0 0         32340      0      0      0 BMRU
lo       65536      821      0      0 0           821      0      0      0 LRU

7. 更改界面设置

默认情况下,Linux 通过 DHCP 为大多数网络接口分配 IP 地址。这通常是推荐的,但如果我们需要给网络接口一个特定的静态 IP 地址、子网掩码或广播地址,我们可以使用 ifconfig

7.1. 设置静态 IP 地址

让我们使用ifconfig将我们的接口设置为静态 IP 地址192.168.91.200

$ sudo ifconfig ens33 192.168.91.200

现在,让我们看一下界面:

$ ifconfig ens33
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.91.200  netmask 255.255.255.0  broadcast 192.168.91.255
        inet6 fe80::eda4:f797:27d4:df20  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:b6:7f:1a  txqueuelen 1000  (Ethernet)
        RX packets 93199  bytes 115117763 (115.1 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 32845  bytes 2168554 (2.1 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

在这里,我们看到 IP 地址的值已按预期更改。

7.2. 设置子网掩码

当我们更改网络接口的 IP 地址时,我们可能还想更改子网掩码以匹配。

我们为此使用网络掩码选项:

$ sudo ifconfig ens33 netmask 255.255.0.0
$ ifconfig ens33
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.91.128  netmask 255.255.0.0  broadcast 192.168.255.255
        inet6 fe80::eda4:f797:27d4:df20  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:b6:7f:1a  txqueuelen 1000  (Ethernet)
        RX packets 93400  bytes 115137530 (115.1 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 33066  bytes 2200524 (2.2 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

我们可以看到上面的命令已经将网络掩码更改为255.255.0.0

7.3. 设置广播地址

广播地址通常会自行分配,但如果我们想指定一个特定的广播地址,我们可以使用广播选项:

$ sudo ifconfig ens33 broadcast 10.2.255.255
$ ifconfig ens33
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.91.128  netmask 255.255.255.0  broadcast 10.2.255.255
        inet6 fe80::eda4:f797:27d4:df20  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:b6:7f:1a  txqueuelen 1000  (Ethernet)
        RX packets 93690  bytes 115157142 (115.1 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 33113  bytes 2209591 (2.2 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

如我们所见,该命令已将广播地址更改为10.2.255.255

7.4. 在一行中设置 IP 地址、子网掩码和广播地址

如果我们需要全部更改它们,那么在单个命令中指定每个网络参数将是低效的。 但是,ifconfig允许我们一次设置它们:

$ sudo ifconfig ens33 10.2.1.101 netmask 255.255.0.0 broadcast 10.2.255.255

如果我们再次运行 ifconfig,我们现在可以看到我们指定的所有网络设置:

$ ifconfig ens33
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.2.1.101  netmask 255.255.0.0  broadcast 10.2.255.255
        inet6 fe80::eda4:f797:27d4:df20  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:b6:7f:1a  txqueuelen 1000  (Ethernet)
        RX packets 94069  bytes 115188532 (115.1 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 33260  bytes 2231587 (2.2 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0