1 UCI系統介紹
UCI即統一接口配置(UnifiedConfigurationInterface)的簡稱,它被應用于OpenWrt系統上面。
UCI是簡單、實用、直接了當的。UCI是OpenWrt上面主要的配置用戶接口,用來作為主要的系統設置,這些設置通常對設備是至關重要的,例如網絡接口、無線設置、遠程登陸權限設置等都是通過UCI來實現配置的。他是構建一整套系統的必須部分。
此外,大部分第三方軟件也被集成到UCI中,因此他們在openwrt中也能很簡單的配置。許多程序有他們自己的配置文件,像/etc/network/interfaces、/etc/exports、/etc/dnsmasq.conf、/etc/samba/smb.conf,并且他們有他們自己的語法,opewnrt不需要改變他們,只需要改UCI設置就行,opewnrt開發者已經對許多軟件做了UCI集成,當然openwrt開發者不可能把所有軟件都集成進來。因為他們的精力也是有限的。
大部分被集成到UCI系統中的軟件通過修改UCI配置文件,都能很簡單的被配置,這些配置主要應用于系統初始化腳本,他們在/etc/ini.d下面,開啟被UCI系統集成的進程就需要用UCI配置文件。比如運行/etc/init.d/sambastart就會用到/etc/config/samba配置文件。
2 UCI系統規則
Openwrt中UCI配置文件被放在/etc/config目錄下面,每一個配置文件設計到系統的一種配置。你可以用文本編輯器修改這個配置文件,或者用uci命令修改。當然它也可以用其他API接口來修改,比如shell、lua等,而且web接口像luci、webif也可以改變它。當配置文件被改變后,必須重啟程序才能生效。
下面舉一個修改ip地址的例子,如果你想把默認的ip:192.168.1.1改為192.168.2.1,可以通過vi來編輯配置文件。
$vi /etc/config/network
在/etc/config/network中找到:
option ipaddr192.168.1.1
把他改變為
option ipaddr192.168.2.1
然后重啟網絡/etc/init.d/networkrestart就會發現系統的ip已經變為新ip地址了。
3 UCI文件語法
UCI配置文件通常一個或者更多的config語句,一個config語句中包括一個或者更多的option語句來表示配置內容。下面一個UCI配置文件的內容:
package'example'
config'example''test'
option'string''somevalue'
option'boolean''1'
list'collection''firstitem'
list'collection''seconditem'
config'example''test'這條語句是一個config語句的開始,表示類型是example,test代表名字,其中類型是必不可少的,而且不同的config語句不能有相同的類型,它對啟動腳本有非常重要的意義,但是名字不是必不可少的,可以沒有,也可以有。
option'string''somevalue'和option'boolean''1'定義了值的內容,這里string和boolean在語法上面沒有差異。在boolean中‘0’,‘no’,‘off’,‘disable’,‘false’都代表0,而‘1’,‘yes’、‘on’、‘true’,‘enable’都代表1。
用list語句可以定義多個值,他們都有相同的名字,在這里為collection。
其中option和list對配置文件是非常重要的,每個字段都是用option或者list來表示,option代表字段值唯一(后面叫option字段),list代表字段有多個值(后面叫list字段),他們是配置文件賦值的重要表示。但是在一個配置文件中,它們不是必須的語法。通常值不需要用引號括起來,只有有空格或者TAB建的時候才需要用引號。而且單引號和雙引號要一一對應,下面表示合法的語言:
optionexamplevalue
option'example'value
optionexample"value"
option"example"'value'
option'example'"value"
4 UCI命令
用vi、腳本、lua等工具修改uci配置文件比較麻煩還容易出錯,openwrt提供了uci命令工具來操作uci配置文件。uci工具可以獲取一個值,設置一個值等功能。在終端下面運行uci命令可以查看他的幫助說明。
Usage :uci [] []
Commands:
batch
export []
import []
changes []
commit []
add
add_list .
.=
show [[.
[.]]]
get .
[.]
set .
[.]=
delete [.]]
rename .
[.]=
revert [.
[.]]
reorder .
=
Options:
-c setthesearchpathforconfigfiles(default:/etc/config)
-d setthedelimiterforlistvaluesinucishow
-f useasinputinsteadofstdin
-a applynewconfigurationaftercommit
-L donotloadanyplugins
-m whenimporting,mergedataintoanexistingpackage
-n nameunnamedsectionsonexport(default)
-N don'tnameunnamedsections
-p addasearchpathforconfigchangefiles
-P addasearchpathforconfigchangefilesanduseasdefault
-q quietmode(don'tprinterrormessages)
-s forcestrictmode(stoponparsererrors,default)
-S disablestrictmode
-X donotuseextendedsyntaxon'show'
下面的表格詳細的介紹了他們的主要用法:
名字 | Config****字段 | 描述 |
---|---|---|
commit | [] | 把改變的uci配置的改變寫入文件系統中,所有的"uciset","uciadd","ucirename"和"ucidelete"都是通過ucicommit寫入flash中。 |
batch | - | 執行uci腳本 |
export | [] | 導出一個配置,供使用人員閱讀 |
import | [] | 輸入一個uci語句 |
changes | [] | 顯示在沒有運行ucicommit之前的所有配置文件改變記錄 |
add | 增加一個config | |
get | .[.] | 得到option字段值 |
set | .[.]= | 設置option字段值 |
delete | [.]] | 刪除一個option或者list字段 |
add | _list..= | 增加一個存在的list字段鏈表 |
rename | .[.]= | 給option字段重命名 |
show | [[.[.]]] | 展示一個配置的具體內容 |
下面我們舉例說明常用的一些用法。
獲取一個值:
獲取lan口的ip地址:ucigetnetwork.lan.ipaddr
#ucigetnetwork.lan.ipaddr192.168.1.1
設置一個值:
設置lan口的ip地址為192.168.2.1
#ucisetnetwork.lan.ipaddr=192.168.2.1
完成之后需要要使其生效,運行ucicommit
#ucisetnetwork.lan.ipaddr=192.168.2.1
#ucicommit
設置好之后重啟network,/etc/config/networkrestart,我們發現網口ip已經被改變了。
運行ifconfig。
#ifconfig
br-lanLinkencap:EthernetHWaddr00:11:22:33:44:55
inetaddr:192.168.2.1Bcast:192.168.2.255
Mask:255.255.255.0
inet6addr:fd18:75c3:2be6::1/60Scope:Global
inet6addr:fe80::211:22ff:fe33:4455/64Scope:Link
UPBROADCASTRUNNINGMULTICASTMTU:1500Metric:1
RXpackets:16errors:0dropped:0overruns:0frame:0
TXpackets:8errors:0dropped:0overruns:0carrier:0
collisions:0txqueuelen:0
RXbytes:4904(4.7KiB)TXbytes:976(976.0B)
已經變為192.168.2.1了。
導出顯示一個選項的配置,現在我們導出uhttp的配置,效果如下所示:
#uciexportuhttpd
packageuhttpd
configuhttpd'main'
listlisten_http'0.0.0.0:80'
listlisten_http'[::]:80'
listlisten_https'0.0.0.0:443'
listlisten_https'[::]:443'
optionhome'/www'
optionrfc1918_filter'1'
optionmax_requests'3'
optionmax_connections'100'
optioncert'/etc/uhttpd.crt'
optionkey'/etc/uhttpd.key'
optioncgi_prefix'/cgi-bin'
optionscript_timeout'60'
optionnetwork_timeout'30'
optionhttp_keepalive'20'
optiontcp_keepalive'1'
optionubus_prefix'/ubus'
configcert'px5g'
optiondays'730'
optionbits'1024'
optioncountry'DE'
optionstate'Berlin'
optionlocation'Berlin'
optioncommonname'OpenWrt'
用show可以展示uhttp的具體內容,和export不同的是,export時導出配置文件的內容,show時顯示uhttp配置的值。效果如下:
#ucishowuhttpd
uhttpd.main=uhttpd
uhttpd.main.listen_http=0.0.0.0:80[::]:80
uhttpd.main.listen_https=0.0.0.0:443[::]:443
uhttpd.main.home=/www
uhttpd.main.rfc1918_filter=1
uhttpd.main.max_requests=3
uhttpd.main.max_connections=100
uhttpd.main.cert=/etc/uhttpd.crt
uhttpd.main.key=/etc/uhttpd.key
uhttpd.main.cgi_prefix=/cgi-bin
uhttpd.main.script_timeout=60
uhttpd.main.network_timeout=30
uhttpd.main.http_keepalive=20
uhttpd.main.tcp_keepalive=1
uhttpd.main.ubus_prefix=/ubus
uhttpd.px5g=cert
uhttpd.px5g.days=730
uhttpd.px5g.bits=1024
uhttpd.px5g.country=DE
uhttpd.px5g.state=Berlin
uhttpd.px5g.location=Berlin
uhttpd.px5g.commonname=OpenWrt
前面大部分是option字段的內容,現在說一下怎么增加list字段。首先看一下system的配置內容,他的ntp服務器就是list字段。用export我們先看一下:
#uciexportsystem
packagesystem
configsystem
optionhostname'OpenWrt'
optiontimezone'UTC'
configtimeserver'ntp'
listserver'0.openwrt.pool.ntp.org'
listserver'1.openwrt.pool.ntp.org'
listserver'2.openwrt.pool.ntp.org'
listserver'3.openwrt.pool.ntp.org'
optionenabled'1'
optionenable_server'0'
看到server就是list字段,從表格可以看到,add_list可以增加list字段。uciadd_listsystem.ntp.server='4.de.pool.ntp.org'這個命令可以增加4.de.pool.ntp.org進入list字段。增加完之后可以看一下,如下所示:
#uciexportsystem
packagesystem
configsystem
optionhostname'OpenWrt'
optiontimezone'UTC'
configtimeserver'ntp'
listserver'0.openwrt.pool.ntp.org'
listserver'1.openwrt.pool.ntp.org'
listserver'2.openwrt.pool.ntp.org'
listserver'3.openwrt.pool.ntp.org'
listserver'4.de.pool.ntp.org'
optionenabled'1'
optionenable_server'0'
如果增加一個新的配置,只需要按照UCI系統的語法,增加一個配置文件就可以,或者用uci add命令。下面列出用uci命令增加一個新配置的用法:
#touch/etc/config/playapp
新建一個配置文件
#ucishowplayapp
顯示配置內容,可以看到無內容
#uciaddplayappblah
增加一個配置項
#ucishowplayapp
顯示配置內容
playapp.@blah[0]=blah
root@OpenWrt:/#ucicommit&&cat/etc/config/playapp
configblah
顯示文件內容,可以看到用uci命令設置進去了。其他的命令大家可以都自己試一試,這里就不一一列舉了。Opewnrt界面采用luci,他很好的應用了uci系統,學好uci系統對學習luci有很好的幫助,所以大家需要好好學習這個章節。
審核編輯:湯梓紅
-
接口
+關注
關注
33文章
8575瀏覽量
151014 -
無線
+關注
關注
31文章
5450瀏覽量
173238 -
命令
+關注
關注
5文章
683瀏覽量
22011 -
編輯器
+關注
關注
1文章
805瀏覽量
31163 -
OpenWrt
+關注
關注
10文章
130瀏覽量
39296
發布評論請先 登錄
相關推薦
評論