Linux之(27)networkctl命令
Author:OnceDayDate:2023年4月25日漫漫长路,有人对你微笑过嘛…networkctl 命令 – 人人都懂物联网 (getiot.tech)如何在Linux上设置systemd-networked - A5互联 - 博客园 (cnblogs.com)systemd-networkd-wait-online.service-小白笔记_码灵的博客-CSDN博客。
Linux之(27)networkctl命令总结
Author:OnceDay Date:2023年4月25日
漫漫长路,有人对你微笑过嘛…
参考文档:
- networkctl 命令 – 人人都懂物联网 (getiot.tech)
- 如何在Linux上设置systemd-networked - A5互联 - 博客园 (cnblogs.com)
- systemd-networkd.service(8) - Linux manual page (man7.org)
- systemd.netdev(5) - Linux manual page (man7.org)
- networkctl(1) - Linux manual page (man7.org)
- systemd-networkd-wait-online.service-小白笔记_码灵的博客-CSDN博客
- systemd-network-generator.service(8) - Linux manual page (man7.org)
1. 概述
networkctl(英文全拼:network control)用于查询和控制 Linux 网络子系统,比如查看网络设备及其连接状态的摘要。
networkctl 是新版本 systemd 命令集中的命令之一,对应 systemd-networkd 服务。
Systemd-networkd是一个管理网络的系统服务。它检测和配置出现的网络设备,以及创建虚拟网络设备。
要配置独立于网络的低级链路设置,可以参考下面的文章:
网络设备的配置信息可参考下面文章:
监控和等待网络连线成功可参考下面文章:
从内核网络设备信息生成system-netowrkd配置文件信息可参考下面文章:
2. 网络状态查询(natworkctl)
networkctl 命令是 systemd-networkd 的一个命令行工具,用于查询网络连接的状态。它可以显示所有连接的状态,也可以显示指定接口的状态。
onceday->~:# networkctl --help
networkctl [OPTIONS...] COMMAND
Query and control the networking subsystem.
Commands:
list [PATTERN...] List links
status [PATTERN...] Show link status
lldp [PATTERN...] Show LLDP neighbors
label Show current address label entries in the kernel
delete DEVICES... Delete virtual netdevs
up DEVICES... Bring devices up
down DEVICES... Bring devices down
renew DEVICES... Renew dynamic configurations
forcerenew DEVICES... Trigger DHCP reconfiguration of all connected clients
reconfigure DEVICES... Reconfigure interfaces
reload Reload .network and .netdev files
Options:
-h --help Show this help
--version Show package version
--no-pager Do not pipe output into a pager
--no-legend Do not show the headers and footers
-a --all Show status for all links
-s --stats Show detailed link statics
-l --full Do not ellipsize output
-n --lines=INTEGER Number of journal entries to show
--json=pretty|short|off
Generate JSON output
See the networkctl(1) man page for details.
2.1 查询当前的网络连接状态
支持的命令如下:
networkctl list # 打印网络设备状态
networkctl list --json=pretty # 以漂亮的json格式输出
networkctl list --np-legend # 不输出头尾两行信息
networkctl list [dev_name...] # 查看指定设备的信息
下面是一个实例:
ubuntu->~:$ networkctl list
IDX LINK TYPE OPERATIONAL SETUP
1 lo loopback carrier unmanaged
2 eth0 ether routable configured
2 links listed.
可能的OPERATIONAL状态如下:
- missing:设备丢失
- off:设备已关闭
- no-carrier:设备已启动,但尚未连接到网络
- dormant:设备已连接到网络,但尚未准备好进行正常通信
- degraded-carrier:对于 bond 或 bridge 主机,一个 bonding 或 bridge 从网络接口处于 off、no-carrier 或 dormant 状态
- carrier:链路已连接,或对于 bond 或 bridge 主机,所有 bonding 或 bridge 从网络接口都已附属于主机
- degraded:链路具有载波并在本地链路上配置了有效地址
- enslaved:链路具有载波并附属于 bond 或 bridge 主机网络接口
- routable:链路具有载波并配置了可路由地址
设置(SETUP)状态有以下几种:
- pending:udev 仍在处理链接,我们还不知道是否将其管理
- initialized:udev 已处理链接,但我们还不知道是否将其管理
- configuring:正在检索配置或配置链接的过程中
- configured:链接已成功配置
- unmanaged:networkd 不处理链接
- failed:networkd 无法管理链接
- linger:链接已消失,但尚未被 networkd 放弃
2.2 查看网络设备的底层信息
显示指定链路的信息:类型、状态、内核模块驱动程序、硬件和IP地址、已配置的DNS服务器等。
支持的命令如下:
networkctl status # 打印网络设备状态
networkctl status --json=pretty # 以漂亮的json格式输出
networkctl status --np-legend # 不输出头尾两行信息
networkctl status [dev_name...] # 查看指定设备的信息
下面是一个实例:
ubuntu->~:$ networkctl status
● State: routable
Online state: online
Address: 18.18.18.17 on eth0
fe80::5054:ff:fe85:f022 on eth0
Gateway: 18.18.18.1 on eth0
DNS: 188.188.188.19
188.188.188.98
Jan 06 14:02:21 VM-4-17-ubuntu systemd-networkd[666007]: eth0: Link UP
Jan 06 14:02:21 VM-4-17-ubuntu systemd-networkd[666007]: eth0: Gained carrier
Jan 06 14:02:21 VM-4-17-ubuntu systemd-networkd[666007]: lo: Link UP
Jan 06 14:02:21 VM-4-17-ubuntu systemd-networkd[666007]: lo: Gained carrier
Jan 06 14:02:21 VM-4-17-ubuntu systemd-networkd[666007]: eth0: Gained IPv6LL
Jan 06 14:02:21 VM-4-17-ubuntu systemd-networkd[666007]: Enumeration completed
...省略...
在整个网络状态中,在线状态取决于所有所需链路的单个在线状态。默认情况下,需要管理链路上线。在这种情况下,在线状态是以下其中一种:
-
unknown
,所有链接都有未知的在线状态(即没有需要链接)。 -
offline
,所有必需的链接都离线。 -
partial
,一些(但不是全部)所需的链接是在线的。 -
online
,所有必需的链接都在线。
2.3 查看链路层信息
显示发现的LLDP (Link Layer Discovery Protocol)邻居。如果指定了一个或多个pattern,则只显示这些接口上的邻居。否则显示所有接口上发现的邻居。请注意,要使此功能起作用,必须为特定接口打开LLDP功能。
可使用命令 networkctl lldp [--no-legend]
,可能的输出类似下面:
LINK CHASSIS ID SYSTEM NAME CAPS PORT ID PORT DESCRIPTION
enp0s25 00:e0:4c:00:00:00 GS1900 ..b........ 2 Port #2
功能支持标识:
o - Other; p - Repeater; b - Bridge; w - WLAN Access Point; r - Router;
t - Telephone; d - DOCSIS cable device; a - Station; c - Customer VLAN;
s - Service VLAN, m - Two-port MAC Relay (TPMR)
2.4 输出数字化地址标签信息
显示可用于地址选择的数字地址标签。这与ip-addrlabel(8)
显示的信息相同。
ubuntu->~:$ networkctl label
LABEL PREFIX/PREFIXLEN
0 ::1/128
1 ::/0
2 2002::/16
3 ::/96
4 ::ffff:0.0.0.0/96
5 fc00::/7
6 2001::/32
7 2001:10::/28
11 fec0::/10
12 3ffe::/16
上面的命令输出内容与ip addrlabel
是等价的:
2.5 设置/更新/删除虚拟网络设备
下面的device
可以接受接口名称或索引号码。
networkctl delete device #删除虚拟netdev
networkctl up device #开启网络设备
networkctl down device #关闭网络设备
networkctl renew device #更新动态配置,如从DHCP服务器获取数据
networkctl forcerenew device #发送一个FORCERENEW消息给所有连接的客户端。触发DHCP重新配置
networkctl reconfigure device #重新配置网络接口。接受接口名称或索引号码。但这并不会重新加载配置文件
networkctl reload device #重新加载.netdev和.network文件
重新加载.netdev
和.network
文件。如果找到一个新的netdev
文件,则创建相应的netdev
。请注意,即使修改或删除了现有的netdev
, systemd-networkd
也不会更新或删除netdev
。如果找到一个新的、修改的或删除的.network
文件,那么与该文件匹配的所有接口都将被重新配置。
3. 其他一些命令
还有一些其他的命令,位于下面的文件夹lib/systemd
或者lib/local/systemd
,主要是下面两个命令:
systemd-networkd-wait-online
,监控网络设备配置状态变化,一次性命令。systemd-network-generator
,根据当前系统网络设备配置,生成对应的配置文件。
下面来实际看一看两个命令:
ubuntu->~:$ /lib/systemd/systemd-networkd-wait-online --help
systemd-networkd-wait-online [OPTIONS...]
Block until network is configured.
-h --help Show this help
--version Print version string
-q --quiet Do not show status information
-i --interface=INTERFACE[:MIN_OPERSTATE[:MAX_OPERSTATE]]
Block until at least these interfaces have appeared
--ignore=INTERFACE Don't take these interfaces into account
-o --operational-state=MIN_OPERSTATE[:MAX_OPERSTATE]
Required operational state
-4 --ipv4 Requires at least one IPv4 address
-6 --ipv6 Requires at least one IPv6 address
--any Wait until at least one of the interfaces is online
--timeout=SECS Maximum time to wait for network connectivity
See the systemd-networkd-wait-online.service(8) man page for details.
下面是一些实际输出:
ubuntu->~:$ /lib/systemd/systemd-networkd-wait-online -4
managing: eth0
ubuntu->~:$ /lib/systemd/systemd-networkd-wait-online -o routable
managing: eth0
另外一个命令如下:
ubuntu->~:$ /lib/systemd/systemd-network-generator --help
systemd-network-generator [OPTIONS...] [-- KERNEL_CMDLINE]
-h --help Show this help
--version Show package version
--root=PATH Operate on an alternate filesystem root
输出的配置文件在/run/systemd/network
文件夹内查看。
更多推荐
所有评论(0)