openWrt入门(2) - ubus

ubus - 帮助输出

ubus list  - 列表

要了解当前总线上正在运行哪些服务,只需使用以下  ubus list  命令即可。这将显示向 RPC 服务器注册的所有命名空间的完整列表:

列表显示如下:

指定服务路径来筛选列表

-v选项

要找出特定服务提供哪些过程/方法及其参数签名,请添加除命名空间路径之外的附加 -v 选项

 debug - Fail to connect ubus


先查找进程号

先 

ps -auxfw | grep ubus

找到ubus 的进程号

再杀掉进程


kill 进程号  ,杀掉进程
(kill 普通杀,发送请求让进程自杀, kil -9 强杀,不发生请求,直接把进程强制杀死)


杀掉进程后再重启:


/etc/init.d/rpcd restart

ubus call

参数必须是有效的 JSON 字符串,并根据函数签名设置键和值:

ubus listen 

ubus send 

通过 HTTP 访问 ubus

列出所有活动会话

请尝试 

ubus call session list

解析json文件获取wan 的地址:

其中json 文件通过ubus 指令获取:

ubus call network.interface.wan status

-- 加载 cjson 模块,用于 JSON 数据的编码和解码
local cjson = require("cjson")

-- 检查 cjson 模块是否成功加载
if not cjson then
    -- 如果模块加载失败,打印错误信息并终止执行
    error("Failed to load cjson module")
end

-- 定义一个字符串,包含要执行的 ubus 命令
-- 这个命令用于获取 wan 接口的状态信息
local command = "ubus call network.interface.wan status"

-- 使用 io.popen 执行 ubus 命令,并捕获输出
-- "r" 模式表示以只读方式打开
local handle = io.popen(command, "r")

-- 从命令输出中读取所有数据
local status_json = handle:read("*a")

-- 关闭打开的命令执行句柄
handle:close()

-- 使用 cjson.decode 函数解析 JSON 格式的字符串
-- 将解析后的 Lua 表赋值给变量 status
local status = cjson.decode(status_json)

-- 检查 JSON 解析是否成功
if status then
    -- 检查解析后的表中是否存在 "ipv4-address" 字段
    -- 并且该字段是一个数组且长度大于 0
    if status["ipv4-address"] and #status["ipv4-address"] > 0 then
        -- 提取第一个 ipv4 地址对象的 address 和 mask 字段
        local address = status["ipv4-address"][1].address
        local mask = status["ipv4-address"][1].mask
        
        -- 打印 WAN 接口的 IPv4 地址和子网掩码
        print("WAN IPv4 Address: " .. address .. " with subnet mask /" .. mask)
    else
        -- 如果 "ipv4-address" 字段不存在或数组为空,打印提示信息
        print("WAN interface does not have an IPv4 address")
    end
else
    -- 如果 JSON 解析失败,打印错误信息
    print("Failed to decode JSON response from ubus")
end

 namespace 传统解析json

-- load  moudle
require "ubus"

local con = ubus.connect()
if not con then
    error("Failed to connect to ubus")
end

-- Iterate all namespace and procedures
local namespace = con:objects()
for i, n in ipairs(namespace) do
    print("namespace= " .. n) -- ubus list 里面的东西,也即uci那些常用命名空间
    local signatures = con:signatures(n)
    for p, s in pairs(signatures) do
        print("\tprocedures = " .. p)
        for k, v in pairs(s) do
            print("\t\tattribute= " .. k .. " type =" .. v)
        end
    end
end

-- call a  procedure

-- 假设 conn 是已经建立的 ubus 连接
local status = con:call("network.interface.wan", "status", {})

-- 检查 status 是否为 nil 或者空表
if status and status["ipv4-address"] and #status["ipv4-address"] > 0 then
    -- 尝试访问第一个 ipv4 地址的信息
    local address_info = status["ipv4-address"][1]
    if address_info and address_info.address and address_info.mask then
        -- 如果 address 和 mask 都存在,打印它们
        print(address_info.address .. " " .. address_info.mask)
    else
        print("Invalid or missing address or mask information")
    end
else
    print("Failed to retrieve WAN interface status or no ipv4-address information available")
end



--[[ 
print(" ================================================================ ")
local status = con:call("network.interface.wan","status",{name = "ipv4-address"})
for k,v in pairs(status) do 
   print("wan value" .. v)
end    

]]--


-- close connection
con:close()

进程状态总结: 

在 Linux 系统中,查看进程状态时可能会看到 `S` 或 `S+` 这样的状态。这些状态代表了进程的特定睡眠模式,具体含义如下:

1. S (sleeping):
   - 进程正在睡眠状态,等待某个事件或资源。这是正常的系统行为,例如等待I/O操作完成或等待信号。

2. S+ (interruptible sleep with optional stops):
   - 进程处于可中断的睡眠状态,并且可以响应终端产生的停止信号。这意味着进程正在等待某些条件的发生,但如果收到特定的信号(如停止信号),它可以被中断。

3. D (uninterruptible sleep):
   - 进程处于不可中断的睡眠状态,通常是在等待 I/O 操作完成。在这种状态下,进程不会响应大多数信号,直到它所等待的 I/O 完成。

4. T (stopped):
   - 进程已被停止,通常是因为收到 `SIGSTOP` 信号。在这种状态下,进程不会执行任何操作,直到收到 `SIGCONT` 信号。

5. Z (zombie)
   - 这是“僵尸”进程,已经完成执行但尚未被父进程回收。僵尸进程仍然存在于系统中,以便父进程可以读取它的退出状态。

6. X (dead):
   - 进程已经终止,这是进程生命周期的最终状态。

在使用 `ps` 命令查看进程状态时,进程的状态列会显示上述某个字母,以表明进程的当前状态。例如:

ps aux | grep <process_name>
 

输出中可能会看到类似 `S` 或 `S+` 的状态,表示进程正在睡眠。

请注意,进程状态是动态变化的,随着进程的执行和系统事件的发生,进程的状态会相应地改变。
 

  • 14
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值