UCI: Unified Configuration Interface 通用配置接口,主要用于集中控制openwrt的配置文件。

1、uci使用的配置文件一般放置在设备上的/etc/config目录下,包括一些兼容的应用,譬如snmp,保存在/etc/config/的配置文件是已经被重写后的文件。

并且这些配置文件被写在RAM,而不是flash中,因为它没有必要被写在不易失的内存中,并且他们会经常改变。

存在于/etc/config下面的文件,可以使用直接修改或者通过uci命令的方式,还有兼容的luci页面等来进行修改。配置文件被修改后,要想使配置生效,必须重启相应的进程。

2、uci配置文件的语法

uci配置文件包含了多个“config”段。

package 'example'

config 'example' 'test'
option 'string' 'some value'
option 'boolean' '1'
list 'collection' 'first item'
list 'collection' 'second item'
  • The config 'example' 'test'  statement defines the start of a section with the type example and the name test. There can also be so called anonymous sections with only a type, but no name identifier. The type is important for the processing programs to decide how to treat the enclosed options.

“example”和“test”定义了一个段,段的类型为example,名字为test。也有匿名段,即只有段类型(example),木有段名称(test).

  • The option 'string' 'some value'  and  option 'boolean' '1'  lines define simple values within the section. Note that there are no syntactical differences between text and boolean options. Per convention, boolean options may have one of the values '0', 'no', 'off', 'false' or 'disabled' to specify a false value or '1' , 'yes', 'on', 'true' or 'enabled' to specify a true value.

“string”和“some value”组成了一对值(value)。并且对于文本和布尔型没有明确的界限

  • In the lines starting with a list keyword an option with multiple values is defined. All list statements that share the same name, collection in our example, will be combined into a single list of values with the same order as in the configuration file.

关键字“list”定义了一个数组,共用一个数组名(例如本例中的 collection),

  • The indentation of the option and list statements is a convention to improve the readability of the configuration file but it's not syntactically required.
  • If an option is absent and not required, the default value is assumed. If it is absent and required, it may trigger an error in the application or other unwanted behaviour.
  • A way to disable a config section, that does not have a enabled option to be disabled, is renaming the config section identifier (or type, in this case example) to a value not recognized by the processes that uses those values. Normally a disabled_identifier as config section type/identifier is sufficient.

一种禁止section段的方法,就是重命名section段名(或者是类型type名),总之就是使使用这个配置文件的进程识别不出来。

It is important to know that UCI identifiers and config file names may contain only the characters a-z0-9 and _.

uci配置文件中使用的变量只支持a-z,0-9和下划线_.

3、使用命令行修改配置文件

对于匿名段,需要加@和取第一个[0]的符号才能够正常获取和修改值。

例如:

root@hbg:/# cat /etc/config/snmpd
config agent
        option agentaddress UDP:161

利用查看命令你会查看到:

root@hbg:/# uci show snmpd
snmpd.@agent[0]=agent
snmpd.@agent[0].agentaddress=UDP:161

因此你要查看agent下的值时需要使用命令:

root@hbg:/# uci get snmpd.@agent[0].agentaddress
UDP:161
root@TVWS:/#

否则会报错:

root@hbg:/# uci get snmpd.agent.agentaddress
uci: Entry not found
root@TVWS:/

来源于:  http://wiki.openwrt.org/doc/uci

05-06 08:30