UCI System 学习之路

UCI System

简介

UCI是Unified Configuration Interface的缩写,目的是集中管理OpenWrt设备中各个模块的配置。

基本原则

OpenWrt中主要的数据文件默认都是独立的存放在/etc/config/目录中,当然,你也可以单独的指定特
殊的目录存储它们。修改或者设定文件内容的方法有很多,例如可以通过uci命令或者API(例如SHELL,
LUA以及C)来修改,WEB GUI即可以通过LuCI来修改。
当数据文件被修改的时候,需要与之相关的servic才能让修改的数据文件被重新加载。

模型演示

image

UCI usage

root@CGW4000T:~# uci
Usage: uci [] []

Commands:
    batch
    export     [<config>]
    import     [<config>]
    changes    [<config>]
    commit     [<config>]
    add        <config> <section-type>
    add_list   <config>.<section>.<option>=<string>
    del_list   <config>.<section>.<option>=<string>
    show       [<config>[.<section>[.<option>]]]
    get        <config>.<section>[.<option>]
    set        <config>.<section>[.<option>]=<value>
    delete     <config>[.<section>[[.<option>][=<id>]]]
    rename     <config>.<section>[.<option>]=<name>
    revert     <config>[.<section>[.<option>]]
    reorder    <config>.<section>=<position>

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'

API

Lua API

实例化uci上下文

local x = luci.model.uci.cursor()

x:set("config","name","type") --增加一个section
x:set("config","sectionname","option","exp") --在section下增加配置
参数说明
config --- 配置文件的名字,配置文件位于/etc/config/下
name --- 配置文件中某个类型的具体名字
type --- 配置文件中类型(type)
option --- 具体配置
exp --- 配置文件中具体参数类型的值

x:delete("config","section") --删除section
x:delete("config,"section","option") -- 在section下删除option

使用'增'中的API即可修改各参数的值

x:foreach("config","type","function(s) ... end") -- 遍历整个config文件
x:get("config","sectionname","option") ---获得option的值
特别解释
在foreach中有两个变量,分别为s[".type"](section type),以及s[".name"](section name),其中
s[".type"]可以没有,但是s[".name"]一定是存在的,遍历时通常都是采用s[".name"]

Shell API

获取

config_get var_name setction_name option_name <default>
参数说明
var_name:        用来存放option值的变量。
settion_name:    就是section 的名字
option_name:    就是option的名字

设置

config_set用来配置config值,命令格式如下:
config_set section_name option_name var_name
参数说明
var_name:        用来存放option值的变量。
settion_name:    就是section 的名字
option_name:    就是option的名字

遍历

config_foreach callback_func section_type <customer_val>
callback_func就是回调函数,它有2个参数,第一个是section type,如果有定义customer_val,那么第二个就是customer_val。我们可以在config_foreach里调用config_get与config_set
  • 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!

扫一扫,分享到微信

微信分享二维码
  • © 2015-2020 Mankitty
  • Powered by Hexo Theme Ayer
  • PV: UV:

请我喝杯咖啡吧~

支付宝
微信