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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM