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