配置檔案比較正規的叫法是:執行控制檔案 run control
linux就這個範兒
4.5.3 配置檔案
配置檔案比較文縐縐的稱呼是「執行控制檔案」,存放與具體程式相關的宣告資訊,有些時候甚至是可執行的命令,在程式啟動時解析。
對於系統級配置檔案,就像在第三章中描述的那樣,應該放在/etc目錄下。對於使用者配置檔案,應該放置在使用者的「home」目錄下,並且一般是隱藏檔案。由於linux下隱藏檔案是以「.」開頭的,所以這類配置檔案也被稱為「點檔案」。
如果乙個程式的配置資訊很多,那麼它也可以擁有乙個配置目錄或點目錄。每個目錄應該包含數個與同乙個程式相關的配置檔案。多個程式共用乙個配置目錄或點目錄,很難保證不會出問題。
配置檔案或配置目錄的命名方式沒有嚴格規定,基本上是保持與其所負責的程式的名稱一致即可。一些較為古老的程式會使用一些較為古老的約定:使用可執行檔名後加「rc」字尾的方式(rc代表執行控制)。比如/etc/bashrc和.bashrc,前者是bash的系統配置檔案,後者是bash的使用者配置檔案。更有的一些甚至就是以rc為名的,比如/etc/rc.d目錄,大多數linux發行版本都將它作為init程式的配置目錄。
配置檔案的內容同樣沒有嚴格規定,不過也有一些約定俗成的規則可供參考。比如在「萬般皆文字」一節中提到的dsv風格的文字內容。如果配置的程式是某種語言的直譯器,那麼它的內容一般會使用具體語言本身。最為著名的例子就是shell本身和emacs。前者的bashrc檔案實際上就是shell指令碼程式,後者的.emacs也是用lisp編寫的。當然,為了避免使用者為了編寫配置檔案而不得不去過多地學習新的知識,最好的辦法就是能夠提供乙個全方位的例子配置檔案,並有相關文件說明,讓使用者能夠容易地按照例子刪減。優秀的雲計算平台hadoop就是乙個非常好的例子。
4.5.4 環境變數
當linux程式啟動時,它的執行環境會包含一組名字和值的關聯(名字和值都是字串)。有些是由使用者手工設定的,有些是由系統在登入時設定的,有些是由shell或虛擬終端 設定的。這就是環境變數。在linux下,環境變數一般會攜帶檔案搜尋路徑、系統預設值、當前使用者id和程序id等資訊,以及其他有關程式執行時環境的關鍵資訊。
環境變數的讀取是非常容易的。在c和c++中,環境變數的值可以通過庫函式getenv獲得。perl和python在啟動時,會初始化環境變數字典物件。其他語言通常也都採用以上兩種方式之一。常見的系統環境變數見表4-1的描述,注意大小寫。
表4-1 常見系統環境變數
變數名用 途
user當前會話登入的賬戶名(bsd約定)
logname當前會話登入的賬戶名(system v約定)
home當前會話的使用者home目錄,這個變數非常重要,很多程式要通過這個環境變數來了解自己的使用者配置檔案的位置
columns(92個字元)文字控制台或虛擬終端視窗以字元為單位的列數,通過這個環境變數,cli的程式可以了解一行內最多能輸出多少字元
lines文字控制台或虛擬終端視窗以字元為單位的行數,通過這個環境變數,cli的程式可以了解螢幕上最多可以顯示多少行文字
shell當前使用的shell的名字
pathshell搜尋可執行程式的目錄列表
term(xterm)當前會話控制台或虛擬終端的名稱。最大的用途就是程式能夠知道可以使用哪些特性,比如是否可以輸出中文等
需要注意的是,當程式是用shell以外的方式啟動時,有些系統環境變數甚至是全部系統環境變數都還未設定。特別是那些守護程序,這些系統環境變數都還未設定——即使設定了,那些值也未必有意義。這類程式,盡量不要使用環境變數。另外,當環境變數有多個值的時候,需要使用冒號「:」作為分割,path變數就是最典型的例子。
其實環境變數有時候是很難區分什麼是系統的,什麼是使用者的。如果一定要嚴格劃分,那麼任何使用者都能訪問到的就算是系統環境變數,但是值對於每個使用者都可能不同,比如home。相反,如果只有某個具體的使用者才能訪問到的,就應該算是使用者環境變數,畢竟那是因具體的某個使用者而存在的。
儘管應用程式可以在系統定義的範圍之外自由解釋環境變數,但是這樣的做法在linux中是很少見的。而且環境變數也不適合把結構化資訊作為值傳遞到程式中(雖然原則上可行)。所以,大多數情況都是直接使用現有的環境變數,標新立異的設計乙個新的環境變數大多不是明智之舉。應該優先考慮配置檔案。
4.5.5 命令列選項
在linux中,幾乎所有程式都會提供幾個命令列選項。這樣做的乙個好處是程式的配置資訊可以由指令碼指定,這對於作為管道或過濾器的程式尤其重要。
有三種約定可以區分命令列選項和普通的引數:原始的unix風格、gnu風格和x tookit風格。
原始的unix風格命令列選項,是以連字元「-」開頭的單個字元。如果選項後面不帶引數,則被稱之為模式選項,模式選項是可以組合在一起使用的。例如,如果-a和-b是模式選項,那麼-ab或-ba就都正確,而且會啟用這兩個選項。如果選項有引數,這些引數要緊接在選項後面(是否以空格分隔可選)。
gnu風格則使用兩個連續的連字元「--」後接選項關鍵字(注意,不是單個字元)。這種風格是因為有好多程式過於複雜,導致單個字元不夠用了而發展起來的一種治標不治本的方法。較原始的unix風格更容易讓人理解,但作為我們這種非英語為母語的同胞們也經常輸入錯誤或記不住。gnu風格的選項不用空格分隔就不能組合使用。選項引數既可以用空格分隔也可以使用單個等號「=」來分隔。
最讓人痛恨的恐怕應該是x toolkit風格了。它使用單連字元和選項關鍵字,並且由x toolkit進行解析。最要命的是,x toolkit先要過濾並處理某些特別的選項,比如-geometry和-display,然後再把過濾好的命令列傳遞給應用程式去解析。如果你不清楚它會過濾哪些選項,就會死活都找不出你的程式為什麼接收不到某些選項。所以,這種東西最好別碰它。
在表4-2中我列舉了最常用的unix風格命令列選項的含義,從a到z都覆蓋到了。如果你的程式需要提供某些方面的配置選項,那麼可以直接使用。如果遇到衝突了,那麼最好採用gnu風格。因為這樣,可以使你的程式非常通用,也容易理解。當然,這對初學者也是有幫助的,因為linux下大多數程式也是按照表中的約定去做的。
表4-2 常用的unix風格命令列選項的含義
變數名用 途
-b緩衝區(buffer)或資料塊(block)大小,帶引數;
批處理(batch),不帶引數
-c命令(command),帶引數;檢查(check),不帶引數
(續)變數名用 途
-d除錯(debug),帶或不帶引數;帶引數指定除錯資訊級別,這個非常普遍;
偶爾具有刪除(delete)或目錄(directory)的含義
-d定義(define),帶引數。比如c編譯器的巨集定義;
-e執行(execute),帶引數;編輯(edit),不帶引數;
偶爾具有排除(exclude)或擴充套件(extend)的含義
-f檔案(file),帶引數,表示檔案輸入;強制(force),多數不帶引數
-ggdb除錯資訊,帶或不帶引數。主要用於gcc來生成gdb的特有除錯資訊
-h表頭(header),通常不帶引數。啟用、禁用或修改程式生成報表的表頭;
幫助(help),或許這是最普遍的理解
-i初始化(initiallize)或互動(interactive),通常不帶引數
-i包含(include),帶引數,比如c編譯器的標頭檔案搜尋路徑
-k保留(keep),不帶引數,禁止某個檔案、資訊或資源的常規刪除操作;
偶爾有殺死(kill)的含義
-l列表(list)、長模式(long)或登入(login),不帶引數;
載入(load),帶引數;偶爾會有代表長度(length)或鎖定(lock)的含義
-m訊息(message),帶引數;
偶爾具有郵件(mail)、模式(mode)和修改(modify)的含義
-n數字(number),帶引數;否(not),不帶引數
-o輸出(output),帶引數
-p埠(port),帶引數;協議(protocol),帶引數
-q安靜(quite),不帶引數。禁止正常的結果輸出或診斷輸出
-r或-r遞迴(recurse)或反向(reverse),不帶引數
-s緘默(silent),不帶引數。與-q類似,如果兩者都支援,-q表示「安靜」,-s表示「絕對緘默」;主題(subject),帶引數;偶爾具有大小(size)的含義
-t標記(tag),帶引數
-u使用者(user),帶引數
-v冗長(verbose),帶或不帶引數;版本(version),不帶引數
-v版本(version),不帶引數,比-v常見
-w寬度(width),帶引數;警告(warning),不帶引數
-x啟用除錯,同-d類似,帶或不帶引數;提取(extract),帶引數
-y是(yes),不帶引數
-z啟用壓縮,不帶引數
獲取yml配置檔案裡面的值的方式
方式一 全域性變數獲取配置檔案中的值 value private string accesskeyid 方式二 autowired private environment env 作用是把當前專案中所有的yml配置檔案資訊存到env中,以鍵值對 key value 形式。string accessk...
Hibernate的配置檔案配置
hiebernate一共有兩種方式,xml檔案配置和注釋配置,這裡就只講第一種配置方式 xml配置檔案配置,而xml檔案配置需要配置兩個檔案,分別是hibernate.cfg.xml和 hbm.xml 這個 是和實體類名一樣的,例如customer的實體類,如下 public class custo...
unix的配置檔案
1 使用者配置檔案 在每個使用者的自家目錄下面都有乙個.profile檔案,該檔案配置了使用者的環境變數 2 網路服務配置檔案 網路服務配置檔案 etc inetd.conf檔案裡面配置了隨solaris自動啟動的網路服務 常見問題 啟動ftp和telnet服務,把該檔案中,ftp和telnet行前...