UCI工具命令

https://blog.csdn.net/qq_41453285/article/details/102528227

一、UCI工具介绍

在开发调整配置时,可以直接使用vi编辑器修改UCI配置文件。但是UCI统一配置文件的目的就是所有 OpenWrt 配置可以通过统一接口读取和修改。对于开发人员而言,如 果使用 awk 和 grep 工具来解析将是非常低效的,UCI实用工具提供了修改和分析UCI文件的脚本编程开发接口

备注(重点)

当使用UCI工具写入配置文件时,配置文件都是整个重写并且不需要确认命令。这意味着在文件中任何多余的注释行和空行均会被删除
如果你有 UCI 类型的配置文件,想保存自己的注释和空行,那就不应该使用UCI命令行工具来编辑文件

二、命令格式与选项

命令格式:

uci [<options>] <command> [<arguments>]

options如下:

-c <path>:set the search path for config files (default: /etc/config)

-d <str>:set the delimiter for list values in uci show

-f <file>:use <file> as input instead of stdin

-m:when importing, merge data into an existing package

-n:name unnamed sections on export (default)

-N:don’t name unnamed sections

-p <path>:add a search path for config change files

-P <path>:add a search path for config change files and use as default

-q:quiet mode (don’t print error messages)

-s:force strict mode (stop on parser errors, default)

-S:disable strict mode

-X:do not use extended syntax on ‘show’

command如下:

命 令 含 义
add 增加指定配置文件的类型为 section-type 的匿名区段
add_list 对已存在的 list 选项增加字符串
commit 对给定的配置文件写入修改,如果没有指定参数则将所有的配置文件写入文件系统。所 有的“uci set”“uci add”“uci rename”和“uci delete”命令将配置写入一个临时位置, 在运行“uci commit”时写入实际的存储位置
export 导出一个机器可读格式的配置。它是作为操作配置文件的 shell 脚本而在内部使用,导 出配置内容时会在前面加“package”和文件名
import 以 UCI 语法导入配置文件
changes 列出配置文件分阶段修改的内容,即未使用“uci commit”提交的修改。如果没有指定 配置文件,则指所有的配置文件的修改部分
show 显示指定的选项、配置节或配置文件。以精简的方式输出,即 key=value 的方式输出
get 获取指定区段选项的值
set 设置指定配置节选项的值,或者是增加一个配置节,类型设置为指定的值
delete 删除指定的配置节或选项
rename 对指定的选项或配置节重命名为指定的名字
revert 恢复指定的选项,配置节或配置文件

UCI工具命令-风君雪科技博客

三、-P选项(/var/state文件)

有些运行中的状态值没有保存在/etc/config目录下,而是保存在/var/state下,这时可 以使用“-P”参数来查询当前状态值

UCI工具命令-风君雪科技博客

四、演示案例(修改IP地址)

网络配置的相关信息存放在/etc/config/network文件中

UCI工具命令-风君雪科技博客

下面我们修改“lan”这个网络接口的IP地址(修改完在下面图中可以看到“lan”这个网络接口的IP地址为我们设置的值)

uci set network.lan.ipaddr=192.168.0.50

uci commit network
 
/etc/init.d/network restart

UCI工具命令-风君雪科技博客

删除上面我们设置的IP地址

uci delete network.lan.ipaddr
 
uci commit network
 
/etc/init.d/network restart

UCI工具命令-风君雪科技博客

五、演示案例(修改多个配置节类型或匿名配置节)

概念:当有多个配置节类型相同或者为匿名配置节时,UCI使用数组数字引用它们
规则如下:

①例如:OpenWrt 系统默认有 3 个网卡接口,可以通过network.@interface[0]来引用第一个,通过network.@ interface[1]来引用第二个,通过network.@interface[2]来引用第三个
②也可以使用负索引, 例如network.@interface[−1],其中“−1”指的是最后一个,“−2”指的是倒数第二个,以此类推

演示案例(获取各个网卡名称)

我这个OpenWrt系统中有两个网卡

UCI工具命令-风君雪科技博客

uci get network.@interface[0].ifname   //获取第一个
uci get network.@interface[1].ifname   //获取第二个
 
uci get network.loopback.ifname   //获取第一个
uci get network.lan.ifname   //获取第二个
 
uci get network.@interface[-2].ifname   //获取第一个
uci get network.@interface[-1].ifname   //获取第二个

UCI工具命令-风君雪科技博客

六、演示案例(更改链表配置)

当一个配置文件中的选项(option)为链表时,操作方法有所不同

演示案例

例如我们的/etc/config/system配置文件中就有“list”形式的链表选项

UCI工具命令-风君雪科技博客

添加到链表中一个配置项:

uci add_list system.ntp.server='ntp.dongshao.net'
 
uci commit system

 UCI工具命令-风君雪科技博客

删除链表中的一个配置项

uci del_list system.ntp.server='ntp.dongshao.net'
 
uci commit system

UCI工具命令-风君雪科技博客

删除链表中的所有配置项

uci delete system.ntp.server
 
uci commit system

七、自定义配置文件及修改

下面我们创建一个helloRoute的配置

第一步:先创建一个“hello”的配置文件

touch /etc/config/hello

UCI工具命令-风君雪科技博客

第二步:首先通过命令行创建配置文件。像上面的配置一样,如果你想增加一个配置节,大多数人都会想到使用“uci add”命令,但实际上“uci add”仅可以创建匿名配置节,不能完 成创建命名配置的目标,要使用“uci set”命令来完成

uci set hello.globe=system

第三步:设置配置节的3个选项

uci set hello.globe.agent=dongshao                           //用户代理属性
uci set hello.globe.url='https://blog.csdn.net/qq_41453285'  //访问URL
uci set hello.globe.delay=100                                //启动延迟时间
 
uci commit  //提交配置修改

 UCI工具命令-风君雪科技博客

查看配置文件内容

UCI工具命令-风君雪科技博客

============ End