2026-10-21 18:47:09
ubus是OpenWrt系统中的微总线架构,用于进程间通信,其命令行工具主要用于服务管理、方法调用及事件监听。 以下是ubus命令行的核心使用方法及示例说明:
一、基础服务查询查看所有注册服务使用ubus list命令可列出当前系统中所有已注册的服务名称,例如:
ubus list输出示例:
network.interfacenetwork.devicesystemlog此命令帮助用户快速定位可用服务,是后续操作的基础。
查看特定服务的注册功能通过-v参数结合服务名,可显示该服务下所有可调用的方法及其参数格式。例如查询network.device服务:
ubus -v list network.device输出示例:
'network.device' @00000000 "status": { "name": "String", "up": "Boolean", "rx_bytes": "Integer", "tx_bytes": "Integer" }, "set_alias": { "device": "String", "alias": "String" }其中status和set_alias为方法名,大括号内为参数类型说明。
基本调用语法使用ubus call <服务名> <方法名> <参数JSON>格式调用服务方法。例如获取网络设备状态:
ubus call network.device status '{"name": "eth0"}'输出示例:
{ "up": true, "rx_bytes": 123456, "tx_bytes": 789012}若方法无需参数,可省略JSON部分(但需保留单引号):
ubus call system reboot ''参数传递规则
参数必须为有效JSON格式,字符串需加双引号。
复杂参数可提前通过文件或变量传递,例如:
echo '{"alias": "lan"}' > /tmp/params.jsonubus call network.device set_alias "$(cat /tmp/params.json)"监听系统事件ubus支持事件订阅机制,通过ubus listen命令监听特定事件(需服务支持)。例如监听网络接口变化:
ubus listen network.interface当接口状态改变时,终端会输出类似以下信息:
{ "interface": "eth0", "action": "ifup", "data": { ... }}服务进程管理结合ubus与procd(OpenWrt进程管理工具),可实现服务启停控制。例如重启网络服务:
ubus call service restart '{"name": "network"}'服务未注册错误若调用时提示service not found,需确认:
服务是否已启动(通过ubus list验证)。
服务名称拼写是否正确(区分大小写)。
权限不足问题部分方法需root权限,可通过sudo或切换至root用户执行:
sudo ubus call system reboot ''JSON格式错误参数传递失败时,使用jq工具验证JSON有效性:
echo '{"key": "value"}' | jq .网络诊断快速查询接口状态或流量统计:
ubus call network.device status '{"name": "wlan0"}'系统维护通过system服务实现重启、关机等操作:
ubus call system reboot ''自定义服务开发开发者可基于ubus框架编写C/Lua服务,并通过ubus add命令动态注册方法(需编译进固件)。
总结:ubus命令行工具通过服务查询、方法调用和事件监听三大核心功能,构建了OpenWrt系统的高效进程通信机制。掌握其用法可显著提升系统管理效率,尤其适用于嵌入式网络设备的自动化运维场景。