OpenWrt UCI系统(转载)

原文地址:http://wiki.openwrt.org/zh-cn/doc/uci

UCI系统

"uci"是"Unified Configuration Interface"(统一配置界面)的缩写,意在OpenWrt整个系统的配置集中化。

系统配置应容易,更直接且在此有文档描述,从而使你的生活更轻松!

(它是White Russian系列OpenWrt基于nvram的配置的后继改进。)

许多程序在系统某处拥有自己的配置文件,

比如/etc/network/interfaces/etc/exports/etc/dnsmasq.conf或者 /etc/samba/samba.conf

有时它们还使用稍有不同的语法。

在OpenWrt中你无需为此烦恼,我们只需更改UCI配置文件!

不需要为了某个更改起效而重启系统!参阅下文中的命令行实用工具以了解如何做到这点。

还有不要忘了官方程序包(official binaries)里包含了很多后台程序,但默认情况下并未启用!

比如cron后台程序默认并未激活,因而只编辑crontab并无作用。

你需要用/etc/init.d/crond start起动它或用/etc/init.d/crond enable激活它。 大部分后台程序都可以disable(禁用),stop(停止)和restart(重起)。 还有一些非UCI配置你可以参阅。

共同原则

OpenWrt的所有配置文件皆位于/etc/config/目录下。每个文件大致与它所配置的那部分系统相关。可用文本编辑器、"uci" 命令行实用程序或各种编程API(比如 Shell, Lua and C)来编辑/修改这些配置文件。

配置文件

文件位置 描述
基本配置
/etc/config/dhcp 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 AICCU 客户端配置
/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 基础 LuCI 配置
/etc/config/luci_statistics 包统计配置
/etc/config/mini_snmpd mini_snmpd 配置
/etc/config/mountd OpenWrt 自动挂载进程(类似autofs)
/etc/config/multiwan 简单多WAN出口配置
/etc/config/ntpclient ntp客户端配置,用以获取正确时间
/etc/config/pure-ftpd Pure-FTPd 服务端配置
/etc/config/qos QoS配置(流量限制与整形)
/etc/config/samba samba配置(Microsoft文件共享)
/etc/config/snmpd SNMPd(snmp服务进程) 配置
/etc/config/sshtunnel sshtunnel配置
/etc/config/stund STUN 服务端配置
/etc/config/transmission BitTorrent配置
/etc/config/uhttpd Web服务器配置(uHTTPd)
/etc/config/upnpd miniupnpd UPnP服务器配置
/etc/config/ushare uShare UPnP 服务器配置
/etc/config/vblade vblade 用户空间AOE(ATA over Ethernet)配置
/etc/config/vnstat vnstat 下载器配置
/etc/config/wifitoogle 使用按钮来开关WiFi的脚本
/etc/config/wol Wake-on-Lan: wol
/etc/config/znc ZNC 配置

文件语法

在UCI的配置文件通常包含一个或多个配置语句,包含一个或多个用来定义实际值的选项语句的所谓的节。

下面是一个简单的配置示例文件:

package 'example'

config 'example' 'test'
        option   'string'      'some value'
        option   'boolean'     '1'
        list     'collection'  'first item'
        list     'collection'  'second item'

  • config 'example' 'test' 语句标志着一个节的开始。这里的配置类型是example,配置名是test。配置中也允许出现匿名节,即自定义了配置类型,而没有配置名的节。配置类型对应配置处理程序来说是十分重要的,因为配置程序需要根据这些信息来处理这些配置项。
  • option 'string' 'some value' 和  option 'boolean' '1'  定义了一些简单值。文本选项和布尔选项在语法上并没有差异。布尔选项中可以用'0' , 'no', 'off', 或者'false'来表示false值,或者也可以用'1', 'yes','on'或者'true'来表示真值。
  • 以list关键字开头的多个行,可用于定义包含多个值的选项。所有共享一个名称的list语句,会组装形成一个值列表,列表中每个值出现的顺序,和它在配置文件中的顺序相同。如上例中,列表的名称是'collection',它包含了两个值,即'first item'和'second item'。
  • 'option'和'list'语句的缩进可以增加配置文件的可读性,但是在语法不是必须的。

通常不需要为标识符和值加引号,只有当值包括空格或者制表符的时候,才必须加引号。同时,在使用引号的时候,可以用双引号代替单引号。

下面列举的例子都是符合uci语法的正确配置:

  • option example value
  • option 'example' value
  • option example "value"
  • option "example" 'value'
  • option 'example' "value"

反之,以下配置则存在语法错误

  • option 'example" "value' (引号不匹配)
  • option example some value with space (值中包含空格,需要为值加引号)

还有一点是必须知道的,即UCI标识符和配置文件名称所包含的字符必须是由a-z, 0-9_组成。 选项值则可以包含任意字符,只要这个值是加了引号的。

命令行实用工具

使用awk、grep等命令来解析Openwr的配置文件是低效和不明智的做法,建议用户通过uci工具对openwrt进行配置。

下面将给出一些例子,来展示uci这个强大的工具。

用法

root@OpenWrt:/lib/config#uci

用法: uci [<options>] <command> [<arguments>]

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

参数:
	-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'

例子:

导出整个配置

root@OpenWrt:~#uci export uhttpd

package 'uhttpd'

config 'uhttpd' 'main'

list 'listen_http' '0.0.0.0:80'

list 'listen_http' '0.0.0.0:8080'

list 'listen_https' '0.0.0.0:443'

option 'home' '/www'

option 'rfc1918_filter' '1'

option 'cert' '/etc/uhttpd.crt'

option 'key' '/etc/uhttpd.key'

option 'cgi_prefix' '/cgi-bin'

option 'script_timeout' '60'

option 'network_timeout' '30'

option 'tcp_keepalive' '1'

config 'cert' 'px5g'

option 'days' '730'

option 'bits' '1024'

option 'country' 'DE'

option 'state' 'Berlin'

option 'location' 'Berlin'

option 'commonname' 'OpenWrt'

root@OpenWrt:~#

查看所有配置项的值

root@OpenWrt:~#uci show uhttpd

uhttpd.main=uhttpd

uhttpd.main.listen_http=0.0.0.0:80 0.0.0.0:8080

uhttpd.main.listen_https=0.0.0.0:443

uhttpd.main.home=/www

uhttpd.main.rfc1918_filter=1

uhttpd.main.cert=/etc/uhttpd.crt

uhttpd.main.key=/etc/uhttpd.key

uhttpd.main.cgi_prefix=/cgi-bin

uhttpd.main.script_timeout=60

uhttpd.main.network_timeout=30

uhttpd.main.tcp_keepalive=1

uhttpd.px5g=cert

uhttpd.px5g.days=730

uhttpd.px5g.bits=1024

uhttpd.px5g.country=DE

uhttpd.px5g.state=Berlin

uhttpd.px5g.location=Berlin

uhttpd.px5g.commonname=OpenWrt

root@OpenWrt:~#

查看特定配置项的值

root@OpenWrt:~#uci get uhttpd.@uhttpd[0].listen_http

0.0.0.0:80 0.0.0.0:8080

root@OpenWrt:~#

查询网络接口的状态

root@OpenWrt:~#uci -P/var/state show network.wan

network.wan=interfacenetwork.wan.ifname=eth0.1

network.wan.proto=dhcpnetwork.wan.defaultroute=0

network.wan.peerdns=0network.wan.device=eth0.1

network.wan.ipaddr=10.11.12.13

network.wan.broadcast=255.255.255.255

network.wan.netmask=255.255.255.0

network.wan.gateway=10.11.12.1

network.wan.dnsdomain=network.wan.dns=10.11.12.100 10.11.12.200

network.wan.up=1network.wan.lease_gateway=10.11.12.1

network.wan.lease_server=10.11.12.25

network.wan.lease_acquired=1262482940

network.wan.lease_lifetime=5400

network.wan.lease_hostname=x-10-11-12-13

root@OpenWrt:~#

添加防火墙规则

这是一个添加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


OpenWrt 系统中,**UCI(Unified Configuration Interface)** 是用于管理系统配置的核心组件。它提供了一种统一、简洁的方式来配置网络、无线、系统服务等各项参数。 --- ### 一、UCI 的基本概念 1. **作用**: - 统一管理配置文件。 - 提供命令行工具 `uci` 供用户操作配置。 - 配置更改后可立即生效或重启后生效。 2. **配置文件位置**: - 主配置文件存放在 `/etc/config/` 目录下。 - 常见配置文件包括: - `/etc/config/network`:网络配置 - `/etc/config/wireless`:无线配置 - `/etc/config/dhcp`:DHCP 服务配置 - `/etc/config/system`:系统设置 - `/etc/config/firewall`:防火墙规则 --- ### 二、UCI 命令详解 `uci` 是操作配置的核心命令,支持增删改查等操作。 #### 常用命令格式: ```bash uci [操作] [配置项路径] [值] ``` #### 操作类型: | 操作 | 说明 | |------------|------------------------------| | `get` | 获取配置项的值 | | `set` | 设置配置项的值 | | `add` | 添加一个新节(section) | | `delete` | 删除一个节或配置项 | | `commit` | 提交更改,使配置永久生效 | | `revert` | 撤销未提交的更改 | | `show` | 显示配置项内容 | #### 示例: ```bash # 查看无线配置 uci show wireless # 获取无线设备 radio0 的类型 uci get wireless.radio0.type # 设置无线设备 radio0 的通道为 6 uci set wireless.radio0.channel=6 # 添加一个新的无线网络配置 uci add wireless wifi-iface # 提交更改 uci commit wireless # 重启无线服务使配置生效 wifi reload ``` --- ### 三、UCI 配置结构说明 UCI 配置由 **配置文件 → 节(section)→ 选项(option)** 组成。 #### 示例:`/etc/config/network` ```bash config interface 'loopback' option ifname 'lo' option proto 'static' option ipaddr '127.0.0.1' option netmask '255.0.0.0' config interface 'lan' option ifname 'eth0' option proto 'dhcp' ``` - `config interface 'loopback'`:定义一个名为 `loopback` 的接口节。 - `option ifname 'lo'`:设置该节的选项。 --- ### 四、常用配置文件示例 #### 1. 网络配置(network) ```bash config interface 'lan' option proto 'static' option ipaddr '192.168.1.1' option netmask '255.255.255.0' option gateway '192.168.1.254' option dns '8.8.8.8' ``` #### 2. 无线配置(wireless) ```bash config wifi-device 'radio0' option type 'mac80211' option channel '6' option hwmode '11g' option path 'platform/ar934x/wmac' option htmode 'HT20' option disabled 0 config wifi-iface option device 'radio0' option network 'lan' option mode 'ap' option ssid 'OpenWrt' option encryption 'psk2' option key 'password123' ``` --- ### 五、注意事项 1. **修改后需提交**:`uci commit` 2. **服务需重启**:如网络、无线等服务需手动重启(如 `wifi reload`、`ifdown lan && ifup lan`) 3. **备份配置**:可使用 `uci export > config_backup.txt` 备份配置 4. **恢复配置**:使用 `uci import < config_backup.txt` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值