本帖最后由 dongtao 于 2014-5-17 13:31 編輯
在這一章當中,我們將介紹在OpenWRT系統(tǒng)下的編輯和配置的基礎指令和操作知識,因為后續(xù)的章節(jié)主要用于介紹如何配置路由的相關功能,在配置的操作時我們需要掌握編輯和處理的方法。 本章中,編輯和配置的基礎方法我們分為三種,三種方式都可以操作成功。分別為: - 使用VI編輯器: 適合教學時直接修改配置文件。
- 使用UCI進行編輯: 適合教學時使用,更適合用于自己開發(fā)的第三方程序修改配置文件。
- 使用SCP下載到本地編輯: 適合教學和系統(tǒng)的測試,文件通過SCP工具下載到本地修改,完成后再上傳到服務器上(要注意使用Notepad++或editplus或ue這類支持unix格式文本文件編輯器)
VI編輯器介紹vi(Visual Interface)是Linux上最通用的標準編輯器,幾乎99.99%的Linux發(fā)行版中都包含它。vi可以在不需要圖形界面的情況下實現(xiàn)對文件的查看、修改、刪除、查找、替換等眾多功能。vi的操作,適用于通過串口直接修改文件,以及通過ssh遠程登入系統(tǒng)修改文件。 在OpenWRT中,系統(tǒng)允許通過vi編輯器直接修改UCI配置文件,從而實現(xiàn)對系統(tǒng)的配置。 VI的操作方法在本節(jié)我們就簡單的介紹下VI的基本操作方法。
vi指令語法: vi [文件名]
如果指定的文件名不存在,將會在內存中自動創(chuàng)建一個空文件,等待保存時保存到磁盤上。如果文件名存在則將打開該文件。vi在打開文件后有兩種工作模式: - vi指令模式: 在這個模式下,不能對文件做修改,指令輸入內容在屏幕的左下方顯示。
- vi編輯模式: 在編輯模式下,可以對文件內容進行修改,刪減,或增加。在OpenWRT的系統(tǒng)下,我們可以輸入鍵盤上的主鍵盤區(qū)內容,也可以使用上下左右箭頭按鍵調整位置。
兩種模式切換: 在指令模式下,按鍵盤上的字母”i”既進入編輯模式(insert方式),這個時候可對文件進行修改編輯。在編輯模式下按鍵盤的esc鍵,即可返回指令模式,可以輸入指令。 vi支持的指令列表,所有指令都要輸入”:”作為指令開頭,以回車作為指令結束:
退出vi編輯器指令,放棄對文件的修改: :q! 退出vi編輯器: :q 保存當前內容: :w 保存退出: :wq 強制保存退出: :wq! 搜索字符: :/[字符內容]
操作舉例: ![]()
鍵盤輸入 i 進入編輯模式,然后可以 隨便輸入一些字符(這時已經(jīng)可以寫文字了) ![]()
保存退出,進入指令模式,輸入保存退出指令:wq (請編輯截圖) 該文件即保存,再次使用vi /tmp/test打開文件即可看到文件保存內容。 認識UCI眾所周知,在Linux下各種軟件包有各種不同的配置腳本,每個配置腳本的語法格式和操作方式不同,這樣的設計雖然可以體現(xiàn)出各軟件包自身的優(yōu)勢,同時也增加了智能路由產(chǎn)品開發(fā)的難度。在這一點上OpenWRT下的UCI技術無疑是一種創(chuàng)新。 UCI是(Unified Configuration Interface)集中式配置信息管理接口的縮寫,他是OpenWRT引進的一套配置參數(shù)管理機制。UCI管理了OpenWRT下最主要的系統(tǒng)配置,并且提供了簡單,容易,標準化的人機交互接口。UCI的管理包含了網(wǎng)絡配置,無線配置,系統(tǒng)信息配置等作為路由器的系統(tǒng)主要配置參數(shù)。UCI可以幫助開發(fā)人員快速的開發(fā)出基于OpenWRT的智能路由產(chǎn)品的控制界面(諸如瀏覽器界面,手機界面等)。 在OpenWRT下有大量的軟件包的配置實用了UCI兼容模式。大量的應用程序其實都有他們自己的配置文件,比如samba的配置文件默認是/etc/samba/samba.conf,但是在OpenWRT下samba軟件包使用的配置方式也是UCI。當執(zhí)行/etc/init.d/samba start的時候,啟動腳本將通過UCI的shell解碼器分析/etc/config/samba配置文件,并且生成需要的/etc/samba/samba.conf配置,來完成配置。 OpenWRT下服務軟件加載流程(samba舉例):
啟動腳本—>/etc/config/samba(UCI解碼器)—>/etc/samba/samba.conf—>啟動samba服務
OpenWRT下配置處理流程(samba舉例):
uci命令—>UCI編解碼器—>/etc/config/samba
由于uci配置文件非常適合人機交互,因此如果你是需要人工修改配置,也可以簡單的使用常見的vi編輯器直接修改配置:
vi /etc/config/samba
默認的OpenWRT系統(tǒng)擁有以下幾個配置文件,隨著軟件包的增加系統(tǒng)配置文件數(shù)量也會增加:
dhcp 路由器的DHCP服務,面向LAN口下計算機提供IP地址分配服務 dropbear SSH服務 firewall 路由轉發(fā),端口轉發(fā),防火墻規(guī)則 fstab 外部存儲器配置 network WAN / LAN 網(wǎng)絡配置 system 時間服務器時區(qū)配置 wireless 無線網(wǎng)絡配置
UCI配置文件格式UCI默認情況下只處理/etc/config中的配置文件,通過參數(shù)指定也可以通過UCI處理其他位置的配置文件。UCI的配置文件同XML不同(XML的設計更適應機器讀取),而UCI配置文件的設計對于人讀取非常友好。所以即使你手工修改這些配置也是沒有任何問題的。 UCI文件內容格式舉例:
config ‘example’ ‘test’
option ‘string’ ‘some value’
option ‘boolean’ ’1′
list ‘collection’ ‘first item’
list ‘collection’ ‘second item’
從config開始一直到下一個config出現(xiàn)中間的內容表示一個段配置(以下均用Section表達),其作用類似編程語言中的{}作用,是表示一個區(qū)域數(shù)據(jù)。
Section開始語法: config ‘類型’ ‘名字’
其中上面例子的example就是這個配置的類型,而test就是這個配置的名字。UCI允許”匿名”的配置存在所以可能存在只有”類型”而沒有”名字”的配置。
參數(shù)定義語法: option ‘鍵’ ‘值’
option表示當前的配置中的鍵/值定義語法。上面例子定義了一個鍵為’string’,值為’some value’的配置參數(shù)。
列表定義語法: list ‘集合名字’ ‘值’
list表示一種集合參數(shù),UCI會根據(jù)相同集合名字生成一個數(shù)組(以上例子數(shù)據(jù)中包含’first item’和’second item’兩個值)給予相應的軟件包使用。 UCI允許的參數(shù)格式:
option example value
option ‘example’ value
option example “value”
option “example” ‘value’
option ‘example’ “value”
當遇到上面錯誤的時候,UCI還是可以很好的工作,但是如果遇到下面的格式,UCI將出現(xiàn)問題:
option ‘example” “value’
option example some value with space
另外非常重要的是,盡量使用常規(guī)字符去處理器UCI,特殊字符有可能會破壞數(shù)據(jù)結構的完整性。 UCI文件讀寫方式UCI文件的讀寫有兩種方式: - UCI文件的讀寫可以通過OpenWRT附帶的uci指令來完成,這種讀寫方式可以用于命令行也可以用于自己開發(fā)的WEB程序來操作。
- 直接使用系統(tǒng)的vi編輯器直接修改UCI文件,所做的修改也可以被系統(tǒng)所識別。
UCI指令讀取配置語法格式: uci [<options>] <command> [<arguments>] 查看類語法:
uci get <config>.<section>[.<option>] 取得一個鍵的值 或根據(jù)段的名字取得類型
uci show [<config>[.<section>[.<option>]]] 顯示出全部 / 配置文件 / 段 / 鍵 的完整格式
uci changes [<config>] 顯示出全部 / 配置文件 的未保存修改(經(jīng)過commit語法保存后就不再有記錄)
變更類語法:
uci add <config> <section-type> 增加一個匿名段配置到配置文件中
uci set <config>.<section>[.<option>]=<value> (增加/修改)一個有名字的段 / 增加一個段中的鍵和值
uci add_list <config>.<section>.<option>=<string> 增加一個列表集合數(shù)據(jù)到配置文件中
uci del_list <config>.<section>.<option>=<string> 刪除一個指定值的列表集合數(shù)據(jù)
uci delete <config>[.<section>[[.<option>][=<id>]]] 刪除一個 段 / 鍵 / 指定值的鍵
uci commit [<config>] 將變更保存在文件中,或保存全部變更到各自文件
UCI在讀取的時候優(yōu)先顯示內存中的緩存,其次顯示文件中的。UCI在進行變更的時候只變更內存的,如果要使變更生效需要執(zhí)行commit將其寫入文件。 來舉個例子。首先產(chǎn)生一個用來做測試的樣本測試:
root@OpenWrt:~# cp /etc/config/system /etc/config/mytest
查看當前狀態(tài): ![]()
取出mytest.ntp.server的值: ![]()
增加一個名為mytest類型為hello的段到mytest文件中:
root@OpenWrt:~# uci set mytest.mytest=hello
增加一個配置到這個段中:
root@OpenWrt:~# uci set mytest.mytest.enable=1
修改mytest.@system[0].hostname這個參數(shù):
root@OpenWrt:~# uci set mytest.@system[0].hostname=hoowa
刪除掉一個ntp.server的值:
root@OpenWrt:~# uci del_list mytest.ntp.server=2.openwrt.pool.ntp.org
查看都修改了啥: ![]()
保存修改:
root@OpenWrt:~# uci commit mytest
看看文件有啥變化: ![]()
舉例,開啟wifi功能:
root@OpenWrt:/# uci set wireless.radio0.disabled=0
root@OpenWrt:/# uci commit wireless
讓wifi開啟生效:
root@OpenWrt:/# wifi
使用SCP進行文件傳輸SCP(Secure copy)是OpenWRT中的SSH附帶的文件傳輸功能,SCP在操作上類似FTP可以實現(xiàn)一個安全的數(shù)據(jù)文件傳輸。 SCP適用于調試階段的程序文件上下載,從而進行快速測試,這是個非常不錯的工具。 第一步:正式開放SSH在默認的情況下由于沒有密碼,所以SSH無法登入。首先修改系統(tǒng)超級賬戶密碼,在提示中填寫兩次新密碼:
root@OpenWrt:/# passwd
完成后重啟SSH的服務:
root@OpenWrt:/# /etc/init.d/dropbear restart
第二步: 安裝WinSCP大家可以使用一個winscp的工具實現(xiàn)這個操作。winscp工具已經(jīng)放在了教學服務器上,下載地址為http://182.92.3.46/hoowa/openwrt/tools/winscp439setup.zip。安裝這個工具軟件,然后讓你的電腦連接到開發(fā)板的wifi上(在上邊案例中,你已經(jīng)開啟過wifi了,對嗎?),同時打開軟件。 第三步: 點擊新建![]()
主機名填寫IP地址,默認的開發(fā)板是192.168.1.1
端口填寫22
用戶名填寫root
密碼就填寫剛才設置的那個密碼
文件協(xié)議選擇SCP
點擊連接, 連接過程中有提示找不到group指令,沒關系直接確認就行了。 第四步:文件處理登入后,操作起來就像FTP工具一樣,左側是你的電腦,右側是開發(fā)板系統(tǒng),你可以上載下載文件。 ![]()
在本章,我們介紹了三種進行配置編輯的方法,請選擇其中一種最為你進行后續(xù)操作所使用的方式即可。其他的用到了再回來學習也可以的。 到這里,我們在硬件部分的第一次操作基本完成,接下來將進去軟件環(huán)節(jié),來學習如何配置出一個具備完整功能的路由系統(tǒng)來。
|