Linux之(27)networkctl命令总结

Author:OnceDay Date:2023年4月25日

漫漫长路,有人对你微笑过嘛…

参考文档:

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文件夹内查看。

Logo

更多推荐