Linux查看网络接口(ifconfig | nmcli)
Posted Xavier Jiezou
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux查看网络接口(ifconfig | nmcli)相关的知识,希望对你有一定的参考价值。
摘要
本文探讨如何在 Linux 中查看和操纵网络接口。
引言
通俗来讲,网络接口就是我们主机上的网卡。查看和操纵网络接口用到是同一个命令:ifconfig。其中操纵网络接口指的是启动、关闭和临时修改网络接口参数。一般来说,所有的用户都可以使用 ifconfig 来查看网络接口,但只有 root 用户才能操纵网络接口。顺便一提,本文提到的网络都指以太网。
用法
ifconfig
ifconfig 是 Linux 内置的查看网络接口信息的工具。
ifconfig
:查看所有已开启的网络接口。
[root@centos ~]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.16.11 netmask 255.255.255.0 broadcast 10.0.19.255
inet6 fe80::5054:ff:fe57:6eee prefixlen 64 scopeid 0x20<link>
ether 52:54:00:57:6e:ee txqueuelen 1000 (Ethernet)
RX packets 127887562 bytes 19032898575 (17.7 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 172551531 bytes 29480608787 (27.4 GiB)
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 3320954 bytes 639669711 (610.0 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 3320954 bytes 639669711 (610.0 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
输出的第一部分就是以 eth0 打头的一段输出。其中 eth0 就是网络接口的名字,表示这是我们主机中第一个以太网接口,如果有多个接口,其名字就按照 eth1、eth2 这样的顺序排下去。它有多个字段属性:
- mtu:最大数据传送单元大小
- inet:IPv4 地址(也就是我们常说的 IP 地址)
- netmask:子网掩码
- broadcast :广播地址
- inet6:IPv6 地址(目前正在普及和应用)
- RX:接收包的情况
- TX:发送包的情况
- collisions:数据传输发生冲突的次数
输出的第二部分就是以 lo 打头的一段。lo 不是一个真正的网络接口,是一个特殊的模拟出来的网络接口,每个系统都有它,叫回环接口(loop)。其各个字段属性是固定的:
- inet:127.0.0.1
- netmask:255.0.0.0
回环接口为系统提供了一个单机网络环境,一般用于程序调试。许多程序的运行也需要这个接口,我们一般不会该动该接口。
顺便一提,ifconfig 后加上一个接口名,可查看特定接口的网络信息,而不是主机上的所有接口。
如果网络接口因为其它原因没有启动,就没法直接查看了,不过你可以在 ifconfig 后面加上 -a 选项查看所有主机上的网络接口,包括未启动和未配置的接口。
如果发现某网络接口如 eth1 的 IP 地址等参数并未显示,可能是接口未开启,或接口未配置好。可以使用 ifconfig eth1 up
来开启。开启之后就能看到 IP 地址了,顺便一提,当前主机的 eth1 的 IP 地址是由网络中的 DHCP 服务器提供的。接下来,我们尝试使用 ifconfig 命令配置 eth1 的一些网络参数。
[root@centos ~]# ifconfig eth1 up # 开启 eth1 网络接口
[root@centos ~]# ifconfig eth1 192.168.16.125 netmask 255.255.255.0 # 修改 IP 地址
[root@centos ~]# ifconfig eth1 mtu 5000 # 修改 mtu
[root@centos ~]# ifconfig eth1 down # 关闭 eth1 网络接口
值得注意的是,ifconfig 改变的接口部分配置参数是临时的,如果系统重启或网络重启,这些改变的参数不会保留。
NetworkManager
NetworkManager(简称 NM)是由红帽公司开发的,用于配置和管理网络的工具。经过十多年的发展和晚上,NM 已经是一个非常好用且强大的网络管理工具了,在 CentOS 中建议使用 NM 来配置和管理网络。需要注意的是,NM 并非一个前台应用,而是一个提供网络管理和配置服务的后台进程。NM 软件包中除了 NM 本身,还包括一些用户界面工具,所有的 NM 用户界面工具都可以用来和 NM 进行交互,进而管理和配置网络。但作为一名系统管理员,建议使用 NM 的命令行界面,即 nmcli。
- 首先,我们要确认 NM 是否已在系统安装并启用。NM 在 CentOS 中一般会默认安装。可以使用
yum list NetworkManager
来确认。如果没有安装或有更新,可以用yum -y install NetworkManager
命令安装或更新。由于我这里已经安装且是最新版本,所有不需要执行任何操作。
[root@centos ~]# yum list NetworkManager
Repository epel is listed more than once in the configuration
Loading mirror speeds from cached hostfile
Installed Packages
NetworkManager.x86_64 1:1.18.8-2.el7_9 @updates
- 使用
systemctl status NetworkManager
命令确定 NM 守护进程是否已经启动,出现 active (running) 字样表示已启动,否则未启动。如果没启动,使用命令systemctl start NetworkManager
启动。
[root@centos ~]# systemctl status NetworkManager
● NetworkManager.service - Network Manager
Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:NetworkManager(8)
[root@centos ~]# systemctl start NetworkManager
[root@centos ~]# systemctl status NetworkManager
● NetworkManager.service - Network Manager
Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; disabled; vendor preset: enabled)
Active: active (running) since Fri 2022-06-10 11:05:57 CST; 34s ago
Docs: man:NetworkManager(8)
Main PID: 2634 (NetworkManager)
Tasks: 3
Memory: 9.1M
CGroup: /system.slice/NetworkManager.service
└─2634 /usr/sbin/NetworkManager --no-daemon
- 用
systemctl is-enabled NetworkManager
命令确认 NM 守护进程是否开机自启动,出现 disabled 字样表示开机不启动,enabled 表示开机自启动。如果没有开机自启动,执行systemctl enable NetworkManager
命令让其开机自启动。
[root@centos ~]# systemctl is-enabled NetworkManager
disabled
[root@centos ~]# systemctl enable NetworkManager
Created symlink from /etc/systemd/system/multi-user.target.wants/NetworkManager.service to /usr/lib/systemd/system/NetworkManager.service.
Created symlink from /etc/systemd/system/dbus-org.freedesktop.nm-dispatcher.service to /usr/lib/systemd/system/NetworkManager-dispatcher.service.
Created symlink from /etc/systemd/system/network-online.target.wants/NetworkManager-wait-online.service to /usr/lib/systemd/system/NetworkManager-wait-online.service.
[root@centos ~]# systemctl is-enabled NetworkManager
enabled
至此,我们就安装并配置了 NM 开机自启动,接下来就可以在命令行中使用 nmcli 了。
nmcli device status
或 nmcli d s
:查看当前主机上的网络接口设备状态。其各个字段定义如下:
- DEVICE:设备名
- TYPE:设备类型(以太网 | 桥接 | 回环)
- STATE:接口状态(已连接 | 已断开 | 未托管)
- CONNECTION:应用到该接口上的连接名(默认是设备名。如接口未应用连接,显示
--
)
[root@centos ~]# nmcli device status eth0
Unknown parameter: eth0
DEVICE TYPE STATE CONNECTION
eth0 ethernet connected eth0
lo loopback unmanaged --
nmcli device show eth0
:查看 eth0 设备的详细网络配置信息。事实上,这个设备的自动配置是 NM 和当前网络中的 DHCP 服务器一起完成的。当检测到系统中有新添加的且未配置的网络设备时,NM 会创建一个预设的连接来为设备提供配置,预设的连接默认会将网络接口设置为使用 DHCP 协议来获取网络配置参数。
[root@centos ~]# nmcli device show eth0
GENERAL.DEVICE: eth0
GENERAL.TYPE: ethernet
GENERAL.HWADDR: 52:54:00:57:6E:EE
GENERAL.MTU: 1500
GENERAL.STATE: 100 (connected)
GENERAL.CONNECTION: eth0
GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/1
WIRED-PROPERTIES.CARRIER: on
IP4.ADDRESS[1]: 10.0.16.11/22
IP4.GATEWAY: 10.0.16.1
...
nmcli connection show eth0
:查看 NM 自动为 eth0 建立的同名连接的具体配置详情。注意到其中 ipv4.method
打头的一行,其可选项一般是 auto 和 manual。auto:使用 DHCP 动态获取配置;manual:静态手动配置。
[root@centos ~]# nmcli connection show eth0
connection.id: eth0
connection.uuid: 7657277b-7bab-45af-b051-527b6f249e60
ipv4.method: manual
...
注意
CentOS 7 的网络接口设备命名规则与以前的发行版本有较大的变化。以前的接口设备命名规则是:ethN
,例如 eth1、eth2 等;现在使用的是一致网络设备命令规则:ensN
,例如 ens32、ens33 等。ens33 中 en 表示以太网(ethernet)接口设备,s 表示 PCle 插槽 slot,33 表示插槽索引号。
参考
以上是关于Linux查看网络接口(ifconfig | nmcli)的主要内容,如果未能解决你的问题,请参考以下文章