openwrt--uci指令的使用

UCI简介

UCI是集中式配置信息管理接口(Unified Configuration Interface)的缩写,他是OpenWrt引进的一套配置参数管理系统。UCI管理了OpenWrt下最主要的系统配置参数并且提供了简单、容易、标准化的人机交互接口。UCI中已经包含了网络配置、无线配置、系统信息配置等作为基本路由器所需的主要配置参数。同时UCI也可以帮助开发人员快速的建立一套基于OpenWrt的智能路由产品控制界面。

文件语法

语法格式

    config <type> ["<name>"]        # 配置节(Section)
        option <name> "value"       # 选项对(option)
        list <name> "value"         # 选项对(option)

语法解析

UCI的配置文件由配置节组成,配置节由多个选项对组成。

  • 配置节:配置节是UCI配置的一个独立配置单元,UCI配置文件是由一个或多个配置节组成。配置节有一个配置类型属性“type”,是以“config”开头,并且有一个可选名称,如果配置节不带名称标识,这样的配置节称为匿名配置节。
  • 选项对:每一个选项对都有名称“name”和值“value”,写在其所属的配置节中。选项对一般以“option”与“list”开始。

注意事项

  1. 配置节的类型(type)和选项对(option)的含义均由应用程序来决定。
  2. 类型一般用于应用程序决定如何处理配置节包含的配置选项对。
  3. 如果缺少了一个必需的选项对,那应用程序通常会触发一个异常或者记录一个异常的日志,然后程序退出。
  4. 通常选项对在配置文件中都是使用空格或制表符缩进来标识,但这个并非是语法要求,仅仅是为了增加配置文件的可读性。
  5. option和list用来提高配置文件的可读性,并且在语法上也要求使用关键字来表示选项对的开始。
  6. 通常不需要使用引号引上类型标识符的值,引号只在封闭的值包含空格或制表符的情况下需要。可以合法地使用双引号或单引号。
  7. UCI标识符和配置文件的名称只能包含字母a~z、0~9和_。例如连字符(-)是不允许的。
  8. 选项对的值需要包含任何字符,但需要正确加上引号。

语法实例

我们可以看一下实际的配置文件的内容。

    root@OpenWrt:/# cat etc/config/system 
    config system
            option hostname 'OpenWrt'
            option ttylogin '0'
            option log_size '64'
            option urandom_seed '0'
            option zonename 'UTC'
            option log_proto 'udp'
            option conloglevel '8'
            option cronloglevel '5'

    config timeserver 'ntp'
            list server '0.openwrt.pool.ntp.org'
            list server '1.openwrt.pool.ntp.org'
            list server '2.openwrt.pool.ntp.org'
            list server '3.openwrt.pool.ntp.org'

统一配置原则

Openwrt有很多独立的第三方应用程序,大多数应用程序的软件包维护者已经制作了UCI兼容的配置文件,启动时由UCI配置文件转换为软件包的原始配置文件。这是在运行初始化脚本/etc/init.d/中执行的。

Openwrt系统的核心配置分成很多个文件,并且都位于 **/etc/config/**目录下。每个文件涉及系统配置的某一部分。你可以用一个文件编辑器修改,或者用命令行实用程序UCI编辑配置文件。UCI的配置文件也可通过各种编程API来修改。

    ls /etc/config/
    attendedsysupgrade  mosquitto           ucitest         dhcp                network             ucitrack
    dropbear            openssl             uhttpd          firewall            rpcd                wireless
    luci                system

无论是通过一个文本编辑器还是命令行工具修改配置文件,在改变一个UCI的配置文件后,受影响的服务或者可执行程序必须由init.d进行重启。这样更新的UCI配置才会真正生效。

常用功能配置文件含义

基本配置
路径含义
/etc/config/dhcpdnsmasq和DHCP的配置
/etc/config/dropbearSSH服务端选项
/etc/config/firewall中央防火墙配置
/etc/config/network交换,接口和路由配置
/etc/config/system杂项与系统配置
/etc/config/timeserverrdate的时间服务器列表
/etc/config/wireless无线设置和无线网络的定义
IPv6
路径含义
/etc/config/ahcpdAd-Hoc配置协议(AHCP) 服务端配置以及转发器配置
/etc/config/aiccuAICCU 客户端配置
/etc/config/dhcp6cWIDE-DHCPv6 客户端配置
/etc/config/dhcp6sWIDE-DHCPv6 服务端配置
/etc/config/gw6cGW6c 客户端配置
/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基础 LuCI 配置
/etc/config/luci_statistics包统计配置
/etc/config/mini_snmpdmini_snmpd 配置
/etc/config/mountdOpenWrt 自动挂载进程(类似autofs)
/etc/config/multiwan简单多WAN出口配置
/etc/config/ntpclientntp客户端配置,用以获取正确时间
/etc/config/pure-ftpdPure-FTPd 服务端配置
/etc/config/qosQoS配置(流量限制与整形)
/etc/config/sambasamba配置(Microsoft文件共享)
/etc/config/snmpdSNMPd(snmp服务进程) 配置
/etc/config/sshtunnelsshtunnel配置
/etc/config/stundSTUN 服务端配置
/etc/config/transmissionBitTorrent配置
/etc/config/uhttpdWeb服务器配置(uHTTPd)
/etc/config/upnpdminiupnpd UPnP服务器配置
/etc/config/ushareuShare UPnP 服务器配置
/etc/config/vbladevblade 用户空间AOE(ATA over Ethernet)配置
/etc/config/vnstatvnstat 下载器配置
/etc/config/wifitoogle使用按钮来开关WiFi的脚本
/etc/config/wolWake-on-Lan: wol
/etc/config/zncZNC 配置

配置服务示例

首先使用UCI命令行工具修改network服务

    root@OpenWrt:/# uci set network.lan.ipaddr='192.168.1.1'
    root@OpenWrt:/# uci commit network

修改完以后还没有生效,必须要重启network服务才能生效修改

    root@OpenWrt:/# /etc/init.d/network restart

UCI工具

下面是UCI工具选项对含义和基本使用方法,以及一些如何使用这个命令行接口工具的示例。

    root@OpenWrt:/# uci
    Usage: uci [<options>] <command> [<arguments>]
    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
            -t <path>  set save path for config change files
            -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'

UCI命令含义

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

UCI命令实例

  1. 新增一个匿名配置节
    uci add test type
    uci add /etc/config/test type
  1. 新增一个选项对
    uci set test.@type[0].Enable=1
    uci set /etc/config/test.@type[0].Enable=1
  1. 新增一个选项对列表
    uci add_list test.@type[0].list="01 url"
    uci add_list /etc/config/test.@type[0].list="01 url"
  1. 显示已经修改的配置
    uci changes
  1. 提交已经修改的配置
    uci commit
  1. 显示现有配置、配置节或选项对
    uci show test
    uci show test.@type[0]
    uci show test.@type[0].Enable
  1. 显示现有配置节的类型与指定选项对的值
    uci get test.@type[0]
    uci get test.@type[0].Enable
  1. 删除指定配置节或选项对
    uci delete test.@type[0]
    uci delete test.@type[-1].Enable
  1. 删除指定选项对列表其中一个值
    uci del_list test.@type[0].list="01 url"
  1. 修改指定配置节或选项对的名称
    uci rename test.@type[0]="newsection"
    uci rename test.@type[0].list="url"
  1. 修改指定配置节的类型
    uci set test.@type[0]="newtype"
  1. 恢复未提交的配置文件、配置节或选项对
    uci revert test
    uci revert test.@type[0]
    uci revert test.@type[0].Enable
  1. 导出配置文件
    uci export test >> test
  1. 导入配置文件
    root@OpenWrt:~# uci import test
    config system 
            option hostname 'OpenWrt'
            option ttylogin '0'      
            option log_size '64'     
            option urandom_seed '0'
            option zonename 'UTC'  
            option log_proto 'udp' 
            option conloglevel '8'
            option cronloglevel '5'
                                
    config timeserver 'ntp'        
            list server '0.openwrt.pool.ntp.org'
            list server '1.openwrt.pool.ntp.org'
            list server '2.openwrt.pool.ntp.org'

    # 此指令需要自己输入配置文件,输入完以后按“Ctrl+D”组合键结束
  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值