OpenWrt-uci脚本命令

2023-11-03

转自:http://developer.t-firefly.com/thread-1035-1-1.html


目录:

1.UCI命令
2.
UCI的文件和流程
3.UCI 的文件语法
4.UCI 命令读写配置
5.综合实例


1.UCI命令


一个众所周知的原因,在Linux下各种软件包有各种不同的配置脚本,每个配置脚本的语法格式和操作方式不同,
这样的设计虽然可以体现出各软件包自身的优势,同时也增加了学习曲线。在这一点上OpenWrt的UCI无疑处理的更
胜一筹。UCI是集中式配置信息管理接口(Unified Configuration Interface)的缩写,他是OpenWrt引进的一套配置
参数管理系统。UCI管理了OpenWrt下最主要的系统配置参数并且提供了简单、容易、标准化的人机交互接口。UCI中
已经包含了网络配置、无线配置、系统信息配置等作为基本路由器所需的主要配置参数。同时UCI也可以帮助开发人
员快速的建立一套基于OpenWrt的智能路由产品控制界面。

2.UCI的文件和流程


UCI的配置文件全部存储在/etc/config目录下。
  1. root@OpenWrt:/# ls /etc/config/
  2. dhcp            dropbear    firewall    network      system        wireless
复制代码
日前已有大量软件包支持UCI模式管理,但不是所有的软件包,支持的软件包是这样来完成
启动的(以samba举例):
1.启动脚本/etc/init.d/samba
2.启动脚本通过UCI分析库从/etc/config/samba获得启动参数
3.启动脚本完成正常启动

    由于UCI的数据文件较为简单,并且具备了很nice的直接观感,所以配置文件既可以使用UCI
命令进行修改,也可以使用VI编辑器直接修改文件。但如果两种方式都是用时需要注意UCI命
令修改会产生缓存,每次修改好要尽快确认保存避免出现冲突。
  最常见的几个UCI配置作用说明
文件 作用
/etc/config/dhcp 面向LAN口提供的IP地址分配服务配置
/etc/config/dropbear SSH服务配置
/etc/config/firewall 路由转发,端口转发,防火墙规则
/etc/config/network 自身网络接口配置
/etc/config/system 时间服务器时区配置
/etc/config/wireless 无线网络配置


3.UCI的文件语法
UCI文件语法举例
  1. config 'section-type' 'section'
  2.         option  'key'       'value'
  3.         list    'list_key'  'list_value'
  4. config 'example' 'test'
  5.         option  'string'        'some value'
  6.         option  'boolean'       '1'
  7.         list    'collection'    'first item'
  8.         list    'collection'    'second item'
复制代码

config 节点 以关键字 config 开始的一行用来代表当前节点
            section-type 节点类型
            section 节点名称
option 选项 表示节点中的一个元素
            key 键
            value 值
list 列表选项 表示列表形式的一组参数。
           list_key 列表键
           list_value 列表值

config 节点语法格式
  1. config 'section-type' 'section'
复制代码
config 节点(后文统一称为节点)原则
           UCI 允许只有节点类型的匿名节点存在
           节点类型和名字建议使用单引号包含以免引起歧义
           节点中可以包含多个 option 选项或 list 列表选项。
           节点遇到文件结束或遇到下一个节点代表完成。
option 选项语法格式
  1. option 'key' 'value'
复制代码
option 选项(后文统一称为选项)原则
           选项的键与值建议使用单引号包含
           避免相同的选项键存在于同一个节点,否则只有一个生效
list 列表选项语法格式
  1. list 'list_key' 'list_value'
复制代码
list 列表选项(后文统一称为列表)原则
      选项的键与值建议使用单引号包含
      列表键的名字如果相同,则相同键的值将会被当作数组传递给相应软件
UCI 的语法容错
  1. option example    value
  2. option 'example'   value
  3. option example    "value"
  4. option "example"  'value'
  5. option 'example'   "value"
复制代码
UCI 无法容忍的语法
  1. option 'example" "value'
  2. option example some value with space
复制代码
尽量使用常规字符去处理器 UCI,特殊字符有可能会破坏数据结构的完整性。

4.UCI 命令读写配置
语法格式
  1. uci [<options>] <command> [<arguments>]
复制代码
读写规则
       UCI 读取总是先读取内存中的缓存,然后再读取文件中的
       进行过增加,修改,删除操作后要执行生效指令,否则所做修改只存留在缓存中
读取类语法
取得节点类型
  1. uci get <config>.<section>
复制代码
取得一个值
  1. uci get <config>.<section>.<option>
复制代码
显示全部 UCI 配置
  1. uci show
复制代码
显示指定文件配置
  1. uci show <config>
复制代码
显示指定节点名字配置
  1. uci show <config>.<section>
复制代码
显示指定选项配置
  1. uci show <config>.<section>.<option>
复制代码
显示尚未生效的修改记录
  1. uci changes <config>
复制代码
匿名节点显示(如果所显示内容有匿名节点,使用-X 参数可以显示出匿名节点的 ID)
  1. uci show -X <config>.<section>.<option>
复制代码
写入类语法
增加一个匿名节点到文件
  1. uci add <config> <section-type>
复制代码
增加一个节点到文件中
  1. uci set <config>.<section>=<section-type>
复制代码
增加一个选项和值到节点中
  1. uci set <config>.<section>.<option>=<value>
复制代码
增加一个值到列表中
  1. uci add_list <config>.<section>.<option>=<value>
复制代码
修改一个节点的类型
  1. uci set <config>.<section>=<section-type>
复制代码
修改一个选项的值
  1. uci set <config>.<section>.<option>=<value>
复制代码
删除指定名字的节点
  1. uci delete <config>.<section>
复制代码
删除指定选项
  1. uci delete <config>.<section>.<option>
复制代码
删除列表
  1. uci delete <config>.<section>.<list>
复制代码
删除列表中一个值
  1. uci del_list <config>.<section>.<option>=<string>
复制代码
生效修改(任何写入类的语法,最终都要执行生效修改,否则所做修改只在缓存中,切记!)
  1. uci commit <config>
复制代码

5.综合实例

本帖隐藏的内容

语法测试
准备产生一个用来测试的配置 mytest
  1. root@OpenWrt:~# cp /etc/config/system /etc/config/mytest
  2. root@OpenWrt:~# cat /etc/config/system
  3. config system
  4.                  option     hostname       OpenWrt
  5.                  option     timezone        UTC
  6. config timeserver ntp
  7.                  list server         0.openwrt.pool.ntp.org
  8.                  list server         1.openwrt.pool.ntp.org
  9.                  list server         2.openwrt.pool.ntp.org
  10.                  list server         3.openwrt.pool.ntp.org
  11.                  option      enabled    1
  12.                  option      enable_server   0
复制代码
看看 mytest 的配置
  1. root@OpenWrt:~# uci show mytest
  2. mytest.@system[0]=system
  3. mytest.@system[0].hostname=OpenWrt
  4. mytest.@system[0].timezone=UTC
  5. mytest.ntp=timeserver
  6. mytest.ntp.server=0.openwrt.pool.ntp.org    1.openwrt.pool.ntp.org   2.openwrt.pool.ntp.org
  7. 3.openwrt.pool.ntp.org
  8. mytest.ntp.enabled=1
  9. mytest.ntp.enable_server=0
复制代码
取得 mytest.ntp.server 这个选项的值
  1. root@OpenWrt:~# uci get mytest.ntp.server
  2. 0.openwrt.pool.ntp.org 1.openwrt.pool.ntp.org 2.openwrt.pool.ntp.org 3.openwrt.pool.ntp.org
复制代码
增加一个类型为 interface 名字为firewrt的节点
  1. uci set mytest.firewrt=interface
复制代码
增加 enable 选项到 firewrt节点
  1. uci set mytest.firewrt.enable=1
复制代码
修改类型为 system 的第一个匿名节点下的 hostname 选项
  1. uci set mytest.@system[0].hostname=firelink
复制代码
删除掉列表 mytest.ntp.server 的一个值
  1. uci del_list mytest.ntp.server=2.openwrt.pool.ntp.org
复制代码
查看都修改了啥
  1. root@OpenWrt:~# uci changes mytest
  2. mytest.firewrt=interface
  3. mytest.firewrt.enable=1
  4. mytest.cfg02e48a.hostname=firelink
  5. mytest.ntp.server-=2.openwrt.pool.ntp.org
复制代码
使修改生效
  1. uci commit mytest
复制代码
看看 mytest 文件
  1. root@OpenWrt:~# cat /etc/config/mytest
  2. config system
  3.                option timezone 'UTC'
  4.                option hostname 'firelink'
  5. config timeserver 'ntp'
  6.                 list server '0.openwrt.pool.ntp.org'
  7.                 list server '1.openwrt.pool.ntp.org'
  8.                 list server '3.openwrt.pool.ntp.org'
  9.                 option enabled '1'
  10.                 option enable_server '0'
  11. config interface 'firewrt'
  12.                 option enable '1'
复制代码
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenWrt-uci脚本命令 的相关文章

  • [Java]在数组中查找一个数字并返回其下标值

    此代码仅用于数组为非递减序列 二分查找 public class BinarySearch public static int binarySearch int array int target int left 0 int right a
  • PTA8(python)

    python程序设计选做题集 函数题和编程题 6 1 用类来计算圆面积 10 分 6 2 统计商品总价 20 分 6 3 定义商品类 特殊方法 30 分 6 4 学生成绩管理 30 分 6 5 设计一个股票类 高教社 Python编程基础及
  • STM32F429点亮led实验

    一 调用的函数 在stm32f429中点亮led通过控制引脚的高低电平来实现 在f429的hal库中控制引脚高低电平的函数 void HAL GPIO WritePin GPIO TypeDef GPIOx uint16 t GPIO Pi
  • 笔记-CDN

    转自 http www jianshu com p df806e04b204 转自 http blog qiniu com archives 6221 从 CDN 到 LiveNet 随着基础设施的升级 我们从文字时代演进到读图时代 又从读
  • nb传输协议和服务器的连接,NB-iot网络架构介绍_NB-iot的数据传输方式

    一 NB iot网络架构 整个NB IoT网络架构分为五个部分 终端 无线网络 核心网络 EPC IoT支持平台和应用服务器 二 NB iot网络架构简介 1 终端 主要通过空中接口连接到基站 终端方面主要包括工业终端和NB IoT模块 工
  • Node.js程序如何访问MySQL数据库呢?Sequelize操作MySQL数据库详解

    使用Sequelize 访问MySQL 当我们安装好MySQL后 Node js程序如何访问MySQL数据库呢 访问MySQL数据库只有一种方法 就是通过网络发送SQL命令 然后 MySQL服务器执行后返回结果 我们可以在命令行窗口输入my
  • 以太坊未来的 POS 协议:Casper

    以太坊未来的 POS 协议 大家好 我是Vlad 2014年9月份我开始了研究和设计以太坊POS proof of stake 权益证明 架构的工作 目前Vitalik和我对于Serenity阶段的POS协议应该长什么样已经有了许多共识 只
  • 证券市场的法律法规体系

    前言 作为金融公司的一员 这个证券从业资格证还是要拿到手 虽然我是技术人员 但这方面的知识还是要加强 要懂法 哈哈 已经报名了6月24号的考试 还有50天左右的时间 从今天起就记录下 我自己的学习笔记吧 Come on 证券市场法律法规体系
  • iis 配置多域名,多https

    当一个https的请求到达IIS服务器时 https请求为加密状态 需要拿到相应的服务器证书解密请求 由于每个站点对应的证书不同 服务器需要通过请求中不同的主机头来判断需要用哪个证书解密 然而主机头作为请求的一部分也被加密 最终IIS只好使
  • DAS、NAS、SAN、iSCSI 存储方案概述

    目前服务器所使用的专业存储方案有DAS NAS SAN iSCSI几种 存储根据服务器类型可以分为 封闭系统的存储和开放系统的存储 1 封闭系统主要指大型机 2 开放系统指基于包括Windows UNIX Linux等操作系统的服务器 开放
  • 鱼眼图像的全景矫正

    1 球面透视投影与展开 鱼眼镜头的成像通常首先要进行球面透视投影 即将三维空间中的点沿着经过镜头光学中心的直线投影到以光心为原点的单位半径球体 内表面 上 从而球面上的每一个点 可通过相应的经纬度来表示 如图 1 所示 以镜头光学中心为原点
  • vue2.x自定义v-loading指令

    vue3 x自定义v loading思路类似 directive js import Loading from loading import Vue from vue const loadingDirective inserted el b
  • 排查Javascript内存泄漏案例(一)

    Chrome DevTools里的Performance面板和Memory面板可以用来定位内存问题 如何判断应用发生内存泄漏 为了证明螃蟹的听觉在腿上 一个专家捉了只螃蟹并冲它大吼 螃蟹很快就跑了 然后捉回来再冲它吼 螃蟹又跑了 最后专家把
  • Linux 创建用户并限制其访问目录,设置密码为永不过期

    创建用户及访问目录 useradd sou d tmp sou M 设置用户密码 passwd sou Tip 输入命令后 会提示输入密码 修改密码为永不过期 chage M 99999 sou 将访问目录和所有子目录权限全部赋予用户 ch
  • 十二、Linux系统中的软件管理

    十二 Linux 系统中的软件管理 rpm dnf命令 软件仓库的搭建 12 1 Linux中软件包的类型 1 DEB UBlinux DEBlinux 2 RPM redhat centOS fadora 3 bz2 gz xz 1 需要
  • Linux root用户使用普通用户的conda环境的方法

    1 使用root用户登录 2 假设普通用户为new user conda环境安装在new user用户目录下 则可以使用如下命令激活conda环境 source home new user miniconda3 bin activate 激
  • 联想小新I1000 win10电脑系统安装教程

    最近因为之前电脑太卡了 想要给自己的联想小新重装系统 发现网上说采用以下方式安装的win10系统会更干净一些 过程做以下记录 联想小新 win10电脑系统安装教程 1 制作系统安装盘 1 1 准备U盘以及一台用来制作安装盘的电脑 1 2 下
  • 通过遍历,找到链表中最后一个结点

    通过遍历 找到链表中最后一个结点 首先创建一个链表 然后再找到链表的最后一个结点 代码实例 class Node public int val public Node next public Node int val this val va

随机推荐

  • ffmpeg将连续的h264分割为单帧

    http ffmpeg org doxygen trunk decode video 8c example html FFmpeg Main Page Related Pages Modules Namespaces Data Struct
  • ELK高级搜索四之Mapping映射

    目录 Mapping映射入门 什么是mapping映射 内置映射类型 keyword 使用 创建Mapping 新增数据 查询测试 属性介绍 store使用 创建索引 动态映射dynamic mapping 手动创建映射 查询映射 映射测试
  • “我永远都无法理解人类!” OpenAI “杀”死了那个成功模拟已故未婚妻的 GPT-3 机器人

    逝者已矣 生者如斯 意为死去的人已离我们而去 活着的人要好好生活 可人非圣贤 明知不可拘泥于过去 却总会在深夜不禁回想起过往的美好 并在心里说一句 我真的好想你 但已故之人如何能听到 只能天一亮 便压下心中思念 再次开启新的一天 如此日复一
  • MySQL存储函数和存储过程的区别

    存储过程与存储函数的区别 1 存储函数和存储过程统称为存储例程 store routine 存储函数的限制比较多 例如不能用临时表 只能用表变量 而存储过程的限制较少 存储过程的实现功能要复杂些 而函数的实现功能针对性比较强 2 返回值不同
  • 二维码原理、制作和识别

    参考 二维码 QR code 基本结构及生成原理 附标准下载 二维码到底是怎么被识别的 黑白小方块又是怎么储存数据的 一 矩阵式二维条码QR 矩阵式二维条码 又称棋盘式二维条码 QR码的设计理念之一就是尽可能地容错和自适应 它是在一个矩形空
  • Actix Web & SQLx 搭建 Web 后端服务

    本文代码 https github com tothis rust record tree main test actix web 已集成功能 log4rs 集成 SQLx 集成 Actix Web CRUD Cargo toml pack
  • 物联网开发119 - Micropython ESP32 C3连接人体红外感应模块HC-SR505

    一 目的 这一节我们来学习如何使用合宙ESP32 C3 连接人体红外感应模块HC SR505 下面我们一起来学习一下吧 二 环境 ESP32 C3开发板 MicroPython v1 19 1 on 2022 06 18 人体红外感应模块H
  • win10 进不去桌面 卡在输入密码界面

    重启进入安全模式 怎么进安全模式自己百度 然后在安全模式内右键左下角win键 点击运行 输入 netsh winsock reset catalog 然后重启 ok
  • 虚拟机域环境搭建

    环境描述 域控 DNS服务器 windows server 2008 R2 IP 10 1 1 11 域成员1 windows 7 IP 10 1 1 22 域成员2 windows server 2003 IP 10 1 1 33 域控
  • 解决pip卸载安装包的时候,需要确认,pip3.7 uninstall paddle-serving-server-gpu -y

    pip3 7 uninstall paddle serving server gpu y root 532c09626af3 deploy pip3 7 uninstall paddle serving app Found existing
  • C++ 常用的八种排序方法

    C 常用的八种排序方法 稳定性 排序后 2 个相等键值的顺序和排序之前它们的顺序相同 插入排序 思想 类似打扑克时的排序方法 将第一待排序序列第一个元素看做一个有序序列 把第二个元素到最后一个元素当成是未排序序列 从头到尾依次扫描未排序序列
  • (React入门)组件、组件样式、事件处理

    组件的创建 类组件 类组件 顾名思义 也就是通过使用ES6类的编写形式去编写组件 该类必须继承React Component如果想要访问父组件传递过来的参数 可通过this props的方式去访问 在组件中必须实现render方法 在ret
  • Vite按需引入自定义组件unplugin-vue-components

    1 安装插件 npm i unplugin vue components D 2 vite config ts文件加如下代码 plugins vue reactivityTransform true Components extension
  • html 学习 常用的html标签及使用

    html是什么 超文本标记语言 Hypertext Markup Language HTML 是一种用于创建网页的标记语言 本质上是浏览器可识别的规则 我们按照规则写网页 浏览器根据规则渲染我们的网页 对于不同的浏览器 对同一个标签可能会有
  • nginx下载安装启动(mac)

    为了方便下载管理 建议下载brew工具 bin zsh c curl fsSL https gitee com cunkai HomebrewCN raw master Homebrew sh 使用brew安装nginx brew inst
  • 利用stm32cubemx生成单极性倍频spwm调制代码步骤

    利用stm32实现单极性倍频SPWM调制 电赛必备 哔哩哔哩 利用stm32cubemx生成单极性倍频spwm调制 首先打开cubemx选择mcu型号 配置时钟等 很多教程讲得很好 我这就跳过这些 接下来来到定时器的配置 对于全桥电路 需要
  • 代码管理工具github+git+tortoisegit下载

    GitHub是世界上最大的代码托管平台 是程序员的必备神器 Git 是一个开源的分布式版本控制系统 用于敏捷高效地处理任何或小或大的项目 tortoisegit是一款开源的git的版本控制系统 也叫海龟git TortoiseGit的安装和
  • Session 简介及绑定

    session是什么 其实session是一个存在服务器上的类似于一个散列表格的文件 里面存有我们需要的信息 在我们需要用的时候可以从里面取出来 说起session的作用 简单的举个例子 我们在登录某些网站的时候 输入了用户名密码 登录以后
  • GTest测试框架使用

    Gtest框架简介 Gtest是Google Test的简称 是Google开发的C 单元测试框架 适用于多个平台 Liunx Mac OS X Windows Cygwin Windows CE and Symbian PlatformI
  • OpenWrt-uci脚本命令

    转自 http developer t firefly com thread 1035 1 1 html 目录 1 UCI命令 2 UCI的文件和流程 3 UCI 的文件语法 4 UCI 命令读写配置 5 综合实例 1 UCI命令 一个众所