UCI工具命令

UCI工具命令

https://blog.csdn.net/qq_41453285/article/details/102528227

一、UCI工具介绍

  • 在开发调整配置时,可以直接使用vi编辑器修改UCI配置文件。但是UCI统一配置文件的目的就是所有 OpenWrt 配置可以通过统一接口读取和修改。对于开发人员而言,如 果使用 awk 和 grep 工具来解析将是非常低效的,UCI实用工具提供了修改和分析UCI文件的脚本编程开发接口

备注(重点)

  • 当使用UCI工具写入配置文件时,配置文件都是整个重写并且不需要确认命令。这意味着在文件中任何多余的注释行和空行均会被删除
  • 如果你有 UCI 类型的配置文件,想保存自己的注释和空行,那就不应该使用UCI命令行工具来编辑文件

二、命令格式与选项

  • 命令格式:
uci [<options>] <command> [<arguments>]
  • 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

    • -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'

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

三、-P选项(/var/state文件)

  • 有些运行中的状态值没有保存在/etc/config目录下,而是保存在/var/state下,这时可 以使用“-P”参数来查询当前状态值

四、演示案例(修改IP地址)

  • 网络配置的相关信息存放在/etc/config/network文件中

  • 下面我们修改“lan”这个网络接口的IP地址(修改完在下面图中可以看到“lan”这个网络接口的IP地址为我们设置的值)
  • uci set network.lan.ipaddr=192.168.0.50
    
    uci commit network
     
    /etc/init.d/network restart

  • 删除上面我们设置的IP地址
  • uci delete network.lan.ipaddr
     
    uci commit network
     
    /etc/init.d/network restart

五、演示案例(修改多个配置节类型或匿名配置节)

  • 概念:当有多个配置节类型相同或者为匿名配置节时,UCI使用数组数字引用它们
  • 规则如下:
    • ①例如:OpenWrt 系统默认有 3 个网卡接口,可以通过network.@interface[0]来引用第一个,通过network.@ interface[1]来引用第二个,通过network.@interface[2]来引用第三个
    • ②也可以使用负索引, 例如network.@interface[−1],其中“−1”指的是最后一个,“−2”指的是倒数第二个,以此类推

演示案例(获取各个网卡名称)

  • 我这个OpenWrt系统中有两个网卡

uci get network.@interface[0].ifname   //获取第一个
uci get network.@interface[1].ifname   //获取第二个
 
uci get network.loopback.ifname   //获取第一个
uci get network.lan.ifname   //获取第二个
 
uci get network.@interface[-2].ifname   //获取第一个
uci get network.@interface[-1].ifname   //获取第二个

六、演示案例(更改链表配置)

  • 当一个配置文件中的选项(option)为链表时,操作方法有所不同

演示案例

  • 例如我们的/etc/config/system配置文件中就有“list”形式的链表选项

  • 添加到链表中一个配置项:
  • uci add_list system.ntp.server='ntp.dongshao.net'
     
    uci commit system

 

  • 删除链表中的一个配置项
  • uci del_list system.ntp.server='ntp.dongshao.net'
     
    uci commit system

  • 删除链表中的所有配置项
  • uci delete system.ntp.server
     
    uci commit system

七、自定义配置文件及修改

下面我们创建一个helloRoute的配置

  • 第一步:先创建一个“hello”的配置文件
touch /etc/config/hello

  • 第二步:首先通过命令行创建配置文件。像上面的配置一样,如果你想增加一个配置节,大多数人都会想到使用“uci add”命令,但实际上“uci add”仅可以创建匿名配置节,不能完 成创建命名配置的目标,要使用“uci set”命令来完成
uci set hello.globe=system

  • 第三步:设置配置节的3个选项
  • uci set hello.globe.agent=dongshao                           //用户代理属性
    uci set hello.globe.url='https://blog.csdn.net/qq_41453285'  //访问URL
    uci set hello.globe.delay=100                                //启动延迟时间
     
    uci commit  //提交配置修改

 

  • 查看配置文件内容

============ End

原文地址:https://www.cnblogs.com/lsgxeva/p/13646634.html