UCI配置文件介绍及配置

uci

OpenWrt的模型统一配置接口

配置文件
uci的配置文件中通常包含一个或多个配置节,所谓配置节是带有一个或多个选项的语句。所有的配置文件UCI配置文件均保留在/etc/config中。
/etc/config中的文件含义:dhcp (Dnsmasq软件包配置,包含DHCP和DNS设置)dropbear (SSH服务器选项) timeserver (rdate的时间服务列表) luci(基本的LuCI配置) wireless(无线设置和WIFI网络定义) uhttpd(Web服务器选项配置)upnpd(miniupnpd UPnP服务设置) qos(网络服务质量的配置文件定义)
如/etc/config/system ,是关于系统设置的配置,包含主机名称,网络时间同步等 在这里插入图片描述config system 语句定义了一个配置节的开始,配置类型为“system”但没有名称,没有名称的配置节点,称为匿名配置节,选项option hostname ‘XiaoQiao’ 和 option log_size ‘64’ 和option timezong ‘CST-8’ 三行定义了这个配置节的两个简单配置。config hostdns 'netdt’定义了另外一个配置节的开始。类型为hostdns,名称为netdt

UCI标识符和配置文件的名称只能包含字母a~z、0~9和_。例如字符(-)是不允许使用的,且需要正确的加上引号。

uci get wireless.wl0.ssid #查看wifi名称
uci get wireless.wl0.key #查看wifi密码

uci set network.lan.ipaddr=192.168.8.1  #修改局域网网关IP地址,也可以直接用vi修改network文件
uci commit network  #提交  所有uci set、uci add、uci rename、uci delete命令将配置写入一个临时位置,在运行uci commit时写入实际的存储位置
/etc/init.d/network restart  #使修改生效

使用如下命令也可以修改wifi密码:

uci set wireless.wl0.key=123456789
uci commit
修改完成之后需要重启路由器             直接使用  /sbin/reboot

init.d首先在该软件预期的位置生成这样的一个配置文件,它通过重新启动可执行程序再次读入配置。若只是直接启动可执行文件,没有通过init.d调用,将不会将一个UCI配置文件更新到特定程序相应的配置文件位置,在/etc/config/的修改将不会对现有进程有任何影响。

OpenWrt系统默认有3个网卡接口,可以通过network.@interface[0]来引用第一个。或者使用负索引,例如-1 表示倒数第一个

uci get network.@interface[0].ifname #获取第一个网卡的名称

有些运行中的状态值没有保存在/etc/config下,而是在/var/state下,此时使用参数 -P来查询当前值。

uci -P/var/state show network.wan

当为链表时,配置如下:

#增加到链表中一个配置项
uci add_list system.ntp.server='ntp.bjbook.net' #增加后记得commit
#删除链表中的一个配置项
uci del_list system.ntp.server='ntp.bjbook.net'  #删除后记得commit
#删除链表中所有的配置项
uci delete system.ntp.server
创建一个自定义配置

uci add命令只能创建匿名配置节,有名配置节使用uci set来完成
创建一个helloRoute配置

touch /etc/config/hello
uci set hello.globe=system #设置配置节的类型为system
#设置配置节的三个选项
uci set hello.globe.agent=bjbook
uci set hello.globe.url='www.bjbook.net/openwrt'
uci set hello.globe.delay=100
uci commit

UCI模块提供了一个shell脚本(/lib/config/uci.sh)并封装了UCI命令行工具的功能,函数名以uci开头,在使用uci_load(加载配置并设置到环境变量中)之前要先导入functions.sh,因为uci_load函数会调用到functions.sh中的config()、option()、list()等函数,将配置导入环境变量中。

. /lib/functions.sh    //装载函数

以uci_开头的函数和以config_开头的函数大多数功能完全相同,唯一区别在于uci_get等函数直接从文件中获取,而config_get函数从环境变量中读取。config_get函数使用config_load一次从配置文件中读取设置到环境变量中,以后均不再进行磁盘操作,性能优于uci_get,uci_get每次均从文件中读取。

sysctl

sysctl是用于修改运行中的内核参数的命令。

/sbin/sysctl -a   #显示所有的内核配置
/sbin/sysctl -n kernel.hostname   #查询kernel.hostname的值
/sbin/sysctl -w kernel.hostname="zhang"   #修改系统主机名为zhang
/sbin/sysctl -p /etc/sysctl.conf   #加载配置
cat /proc/sys/net/ipv4/ip_forward   #直接查询是否打开路由转发
echo "1" > /proc/sys/net/ipv4/ip_forward  #打开路由转发设置
系统配置

/etc/rc.local 系统每次启动时由/etc/rc.d/S95done调用,是一个shell脚本,若有任何想要在开机之后就立即执行的命令,就直接将其写在/etc/rc.local ,当启动系统时会自动被执行。
/etc/profile为系统的每个登录用户设置环境变量。
/etc/shells shell对于linux内核来说,相当于一个外壳,linux有多少个命令解析外壳程序,shells文件包含系统中所有外壳程序的列表。OpenWrt采用/bin/ash,此时shells文件中的内容就是/bin/ash,而Ubuntu中shells文件内容如下
在这里插入图片描述/etc/fstab 关于文件系统的静态信息,系统启动时读取并设置,文件fstab包含各种文件系统的描述信息,现在fstab只能通过程序读取,不能修改它,创建和维护这个文件的是系统管理员 。
/etc/services 这个文件是互联网网络服务类型列表。普通的ASCII编码文件,提供了友好的文本名称和互联网服务之间的映射,还包含了端口号和协议类型。
/etc/protocols 文件是协议定义描述文件,是一个普通的ASCII玛文本文件,用于u描述各种各样的因特网网络协议。如下,第2列数字表示协议的数字号码,将出现在IP报头,用十进制数字表示。第3列是协议的选项。
在这里插入图片描述

在 **UCI(Unified Configuration Interface)** 配置文件中: > ❌ `#` **不是标准的注释符号**,尽管它看起来像注释。 --- ### ✅ 正确答案:**UCI 配置文件不支持以 `#` 开头的行作为注释** UCI 的语法非常严格,其配置文件(如 `/etc/config/network`, `/etc/config/wireless` 等)**只识别特定格式的指令**: ```text config section_type 'section_name' option key 'value' list item 'value' ``` 如果你写: ```text # This is a comment option proto 'dhcp' ``` 👉 **这个 `#` 行会被 UCI 解析器忽略吗?不会!它会被当作一个无效配置行处理,可能导致解析错误或意外行为。** 虽然某些版本的 UCI 工具链在读取时可能“跳过”无法识别的行(比如以 `#` 开头),但这**不是官方支持的功能**,也不保证在所有系统上都安全。 --- ## 🛑 千万不要这样写! ```text config interface 'wan' # option proto 'static' ← 错误!这不是注释 option proto 'dhcp' ``` 这会导致: - `uci show network` 可能出错 - `uci commit` 失败 - 或者 netifd 无法正确加载配置 --- ## ✅ 正确做法:如何“注释”掉一行? ### 方法一:**重命名选项名加前缀(推荐)** ```text config interface 'wan' option _proto 'static' # 被禁用的配置,用下划线标记 option proto 'dhcp' ``` 或者: ```text option disabled_proto 'static' ``` 这是 OpenWrt 社区常用做法 —— 改名绕过生效。 --- ### 方法二:使用外部文档或 README 文件记录说明 例如创建 `/etc/config/README-network` 来解释配置逻辑。 --- ### 方法三:使用 UCI 命令行备份和删除 如果你要临时关闭某个选项: ```bash uci delete network.wan.proto uci set network.wan.proto=dhcp # 再打开 ``` 比“注释”更符合 UCI 设计哲学。 --- ## 🔧 验证工具建议 始终使用以下命令验证配置是否合法: ```bash uci show network uci export network ``` 如果输出中出现了你没定义的奇怪字段,说明配置文件有语法问题。 --- ## 💡 特别提醒:Shell 脚本 vs UCI 文件 | 上下文 | `#` 是否为注释 | |-------|----------------| | UCI 配置文件(`/etc/config/*`) | ❌ 不是,应避免使用 | | Shell 脚本(`/etc/init.d/*`) | ✅ 是,可以正常使用 | | Lua 代码(LuCI) | ✅ `--` 是注释 | | Dropbear SSH 配置等其他文件 | ✅ 视具体程序而定 | --- ## ✅ 总结 | 问题 | 回答 | |------|------| | `#` 在 UCI 配置中是注释吗? | ❌ 否,**不被官方支持** | | 能否使用 `#` 注释行? | ⚠️ 不推荐,可能引起解析问题 | | 正确的“注释”方法是什么? | 改名选项(如 `_option`)或移除配置 | | 如何安全调试配置? | 使用 `uci show/export` 检查结构 | ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值