配置檔案後面的rc的由來

2021-09-07 05:40:50 字數 4316 閱讀 4441

配置檔案比較正規的叫法是:執行控制檔案  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行前...