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 | 恢复指定的选项,配置节或配置文件 |
三、-P选项(/var/state文件)
有些运行中的状态值没有保存在/etc/config目录下,而是保存在/var/state下,这时可 以使用“-P”参数来查询当前状态值
四、演示案例(修改IP地址)
网络配置的相关信息存放在/etc/config/network文件中
下面我们修改“lan”这个网络接口的IP地址(修改完在下面图中可以看到“lan”这个网络接口的IP地址为我们设置的值)
uci set network.lan.ipaddr=192.168.0.50 uci commit network /etc/init.d/network restart
删除上面我们设置的IP地址
uci delete network.lan.ipaddr uci commit network /etc/init.d/network restart
五、演示案例(修改多个配置节类型或匿名配置节)
概念:当有多个配置节类型相同或者为匿名配置节时,UCI使用数组数字引用它们
规则如下:
①例如:OpenWrt 系统默认有 3 个网卡接口,可以通过network.@interface[0]来引用第一个,通过network.@ interface[1]来引用第二个,通过network.@interface[2]来引用第三个
②也可以使用负索引, 例如network.@interface[−1],其中“−1”指的是最后一个,“−2”指的是倒数第二个,以此类推
演示案例(获取各个网卡名称)
我这个OpenWrt系统中有两个网卡
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 //获取第二个
六、演示案例(更改链表配置)
当一个配置文件中的选项(option)为链表时,操作方法有所不同
演示案例
例如我们的/etc/config/system配置文件中就有“list”形式的链表选项
添加到链表中一个配置项:
uci add_list system.ntp.server='ntp.dongshao.net' uci commit system删除链表中的一个配置项
uci del_list system.ntp.server='ntp.dongshao.net' uci commit system删除链表中的所有配置项
uci delete system.ntp.server uci commit system
七、自定义配置文件及修改
下面我们创建一个helloRoute的配置
第一步:先创建一个“hello”的配置文件
touch /etc/config/hello
第二步:首先通过命令行创建配置文件。像上面的配置一样,如果你想增加一个配置节,大多数人都会想到使用“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 //提交配置修改
查看配置文件内容
============ End
最新评论