UCI的配置文件全部存储在/etc/config目录下。
01.root@OpenWrt:/# ls /etc/config/
02.dhcp dropbear firewall network system wireless
复制代码日前已有大量软件包支持UCI模式管理,但不是所有的软件包,支持的软件包是这样来完成
启动的(以samba举例):
1.启动脚本/etc/init.d/samba
2.启动脚本通过UCI分析库从/etc/config/samba获得启动参数
3.启动脚本完成正常启动
由于UCI的数据文件较为简单,并且具备了很nice的直接观感,所以配置文件既可以使用UCI
命令进行修改,也可以使用VI编辑器直接修改文件。但如果两种方式都是用时需要注意UCI命
令修改会产生缓存,每次修改好要尽快确认保存避免出现冲突。
最常见的几个UCI配置作用说明
文件 作用
基本配置:
/etc/config/dhcp 面向LAN口提供的IP地址分配服务配置 ,dnsmasq和DHCP的配置/etc/config/dropbear SSH服务配置
/etc/config/firewall 中央防火墙配置
/etc/config/network 交换,接口和路由配置
/etc/config/system 杂项与系统配置
/etc/config/timeserver rdate的时间服务器列表
/etc/config/wireless 无线网络配置
IPV6配置
/etc/config/ahcpd Ad-Hoc配置协议(AHCP)服务端配置以及转发器配置
/etc/config/aiccu ALCCU客户端配置
/etc/config/dhcp6c WIDE-DHCPv6 客户端配置
/etc/config/dhcp6s WIDE-DHCPv6服务端配置
/etc/config/gw6c GW6C客户端配置
/etc/config/radvd 路由通告(radvd)配置
其他:
/etc/config/etherwake 以太网唤醒:etherwake
/etc/config/fstab 挂载点及swap
/etc/config/hd-idle 另一个可选的硬盘空闲休眠进程(需要路由器支持USB硬盘)
/etc/config/httpd 网页服务器配置选项(Busybox自带httpd,已被舍弃)
/etc/config/luci 基础LuCl配置
/etc/config/luci_statistics 包统计配置
/etc/config/mini_snmpd mini_snmpd配置
/etc/config/mountd OpenWrt自动挂载进程(类似autofs)
/etc/config/multiwan 简单多WAN出口配置
/etc/config/uhttpd Web服务器配置(uHTTPD)
....
3.UCI的文件语法
UCI文件语法举例
01.config 'section-type' 'section'
02. option 'key' 'value'
03. list 'list_key' 'list_value'
04.config 'example' 'test'
05. option 'string' 'some value'
06. option 'boolean' '1'
07. list 'collection' 'first item'
08. list 'collection' 'second item'
复制代码
config 节点 以关键字 config 开始的一行用来代表当前节点
section-type 节点类型
section 节点名称
option 选项 表示节点中的一个元素
key 键
value 值
list 列表选项 表示列表形式的一组参数。
list_key 列表键
list_value 列表值
config 节点语法格式
01.config 'section-type' 'section'
config 节点(后文统一称为节点)原则
UCI 允许只有节点类型的匿名节点存在
节点类型和名字建议使用单引号包含以免引起歧义
节点中可以包含多个 option 选项或 list 列表选项。
节点遇到文件结束或遇到下一个节点代表完成。
option 选项语法格式
01.option 'key' 'value'
option 选项(后文统一称为选项)原则
选项的键与值建议使用单引号包含
避免相同的选项键存在于同一个节点,否则只有一个生效
list 列表选项语法格式
01.list 'list_key' 'list_value'
list 列表选项(后文统一称为列表)原则
选项的键与值建议使用单引号包含
列表键的名字如果相同,则相同键的值将会被当作数组传递给相应软件
UCI 的语法容错
01.option example value
02.option 'example' value
03.option example "value"
04.option "example" 'value'
05.option 'example' "value"
UCI 无法容忍的语法
01.option 'example" "value'
02.option example some value with space
尽量使用常规字符去处理器 UCI,特殊字符有可能会破坏数据结构的完整性。
4.UCI 命令读写配置
语法格式
01.uci [<options>] <command> [<arguments>]
读写规则
UCI 读取总是先读取内存中的缓存,然后再读取文件中的
进行过增加,修改,删除操作后要执行生效指令,否则所做修改只存留在缓存中
读取类语法
取得节点类型
root@OpenWrt:~#uci get <config>.<section>
取得一个值
root@OpenWrt:~# uci get <config>.<section>.<option>
显示全部 UCI 配置
root@OpenWrt:~# uci show
显示指定文件配置
root@OpenWrt:~# uci show <config>
显示指定节点名字配置
root@OpenWrt:~# uci show <config>.<section>
显示指定选项配置
root@OpenWrt:~# uci show <config>.<section>.<option>
显示尚未生效的修改记录
root@OpenWrt:~# uci changes <config>
匿名节点显示(如果所显示内容有匿名节点,使用-X 参数可以显示出匿名节点的 ID)
root@OpenWrt:~# uci show -X <config>.<section>.<option>
写入类语法
增加一个匿名节点到文件:
root@OpenWrt:~# uci add <config> <section-type>
增加一个节点到文件中:
root@OpenWrt:~# uci set <config>.<section>=<section-type>
增加一个选项和值到节点中:
root@OpenWrt:~# uci set <config>.<section>.<option>=<value>
增加一个值到列表中:
root@OpenWrt:~# uci add_list <config>.<section>.<option>=<value>
修改一个节点的类型:
root@OpenWrt:~# uci set <config>.<section>=<section-type>
修改一个选项的值:
root@OpenWrt:~# uci set <config>.<section>.<option>=<value>
删除指定名字的节点:
root@OpenWrt:~# uci delete <config>.<section>
删除指定选项:
root@OpenWrt:~# uci delete <config>.<section>.<option>
删除列表:
root@OpenWrt:~# uci delete <config>.<section>.<list>
删除列表中一个值:
root@OpenWrt:~# uci del_list <config>.<section>.<option>=<string>
重命名:
root@OpenWrt:~# uci rename <config>.<section>.<option>.<option>=<name>
查看修改量:
root@OpenWrt:~# uci changes <config>
生效修改:
root@OpenWrt:~# uci commit <config>
任何写入类的语法,最终都要执行生效修改,否则所做修改只在缓存中,切记!
举个栗子:
如果我们想把uHTTPd Web服务器的侦听端口80改成8080,我们应该在/ etc /config/ uhttpd目录下配置
root@OpenWrt:~# uci set uhttpd.main.listen_http=8080
root@OpenWrt:~# uci commit uhttpd
root@OpenWrt:~# /etc/init.d/uhttpd restart
root@OpenWrt:~#
完成后,现在配置文件被更新,uHTTPd侦听端口为8080
创建一个给定类型的新命名的节点
root@OpenWrt:~# touch /etc/config/playapp
root@OpenWrt:~# uci show playapp
root@OpenWrt:~# uci add playapp blah
cfg02a4fc
root@OpenWrt:~# uci show playappp
layapp.@blah[0]=blah
root@OpenWrt:~# uci commit && cat /etc/config/playapp
config blah
#
关于UCI路径设置 Example:
有如下配置文件:
root@OpenWrt:~# /etc/config/foo
config bar 'first'
option name 'Mr. First'
config bar
option name 'Mr. Second'
config bar 'third'
option name 'Mr. Third'
其路径应该是以下情况:
# Mr. First
uci get foo.@bar[0].name
uci get foo.@bar[-0].name
uci get foo.@bar[-3].name
uci get foo.first.name
# Mr. Second
uci get foo.@bar[1].name
uci get foo.@bar[-2].name
# uci get foo.second.name won't work; label 'second' undefined.
# Mr. Third
uci get foo.@bar[2].name
uci get foo.@bar[-1].name
uci get foo.third.name
用show查看配置:
root@OpenWrt:~# uci show foo
foo.first=bar
foo.first.name=Mr. First
foo.@bar[0]=bar
foo.@bar[0].name=Mr. Second
foo.third=bar
foo.third.name=Mr. Third
但如果用"uci show foo.@bar[0]"查看,则:
root@OpenWrt:~#uci show foo.@bar[0]
foo.first=bar
foo.first.name=Mr. First
添加防火墙规则
这是一个添加SSH端口转发到防火墙规则的例子,和'-1'使用的一个例子
root@OpenWrt:~# uci add firewall rule
root@OpenWrt:~# uci set firewall.@rule[-1].src=wan
root@OpenWrt:~# uci set firewall.@rule[-1].target=ACCEPT
root@OpenWrt:~# uci set firewall.@rule[-1].proto=tcp
root@OpenWrt:~# uci set firewall.@rule[-1].dest_port=22
root@OpenWrt:~# uci commit firewall
root@OpenWrt:~# /etc/init.d/firewall restart