Pixel, Byte, and Comma的軟件開發者Martin Streicher 在本文中為我們揭示了UNIX高手的秘密。Martin Streicher 是一位 Ruby on Rails 的自由開發人員和 Linux Magazine 的前任主編。Martin 畢業於 Purdue University 並獲得計算機科學學位,從 1986 年起他一直從事 UNIX 類系統的編程工作。他喜歡收集藝術品和玩具。
保存環境變量
大多數 UNIX 用戶在 .bashrc(針對 Bash shell)和 .zshrc(針對 Z shell)等 shell 啟動文件中塞滿大量用戶設置,以便一次又一次地重建鐘愛的 shell 環境。啟動文件能夠創建別名、設置 shell 選項、創建函數、以及設置環境變量。關鍵的環境變量包括 HOME(指向您的主目錄)、PATH(列舉從中搜索應用程序的目錄)和 MANPATH(列舉從中搜索手冊頁的目錄)。要查看您的 shell 中設置了哪些環境變量,鍵入 printenv
命令。查閱 shell 手冊頁,獲取可用環境變量的完整列表。
與 shell 一樣,可以通過環境變量定制其他許多 UNIX 應用程序。例如,Java 子系統要求定義 JAVA_HOME 來指向 Java 運行時的根。同樣,Amazon Web Services (AWS) 實用程序套件強制使用 AWS_CREDENTIAL_FILE 來指向一個包含有效私匙憑證的文件。單獨的應用程序也提供環境變量,關鍵是如何發現這些變量。幸運的是,這種工作不需要非法入侵;相反,只需查詢手邊的實用工具手冊頁,查找標題為 “Environment Variables” 的章節即可。
例如,分頁實用程序 less
定義了幾個有用的環境變量:
◆環境變量 LESS 存儲一些命令行選項,以在您每次調用該分頁程序時減少鍵入量。例如,如果您需要閱讀大量日志文件,可將以下語句添加到一個 shell 啟動文件中:
export LESS='--RAW-CONTROL-CHARACTERS --squeeze-lines --ignore-case'
上述選項將分別解譯控制字符(通常是語法著色),將多個空行壓縮為一行,並忽略字符串匹配中的大小寫。如果您使用代碼,可嘗試以下選項:
export LESS='--LINE-NUMBERS --quit-if-one-screen --quit-on-intr'
◆名為 LESSKEY 的環境設置指向一個密匙綁定文件。可以使用密匙綁定來定制 less
的行為,比如,匹配另一個頁面或編輯器的行為。
◆與 shell 一樣,less
能保留多個調用之間的歷史。設置 LESSHISTFILE 和 LESSHISTSIZE 分別指向一個持久命令文件和設置要記錄的命令的最大條數。
GNU Compiler Collection (GCC) 是另一個典型的環境變量應用示例。GCC 定義各種環境變量來定制其操作。LIBRARY_PATH,顧名思義,是一個目錄列表,用於搜索要鏈接到的庫;COMPILER_PATH 的工作方式與 shell 的 PATH 非常相似,但是由 GCC 在內部使用,用於查找編譯過程中使用的子程序。
如果您針對單個平台寫代碼並構建二進制文件,您可能永遠也不會用到這些環境變量,但是,如果您跨平台交叉編譯相同的代碼,那麼這些變量對於訪問每個平台的不同的頭部和庫至關重要。您可以將這些變量設置為不同的值集合,一個集合針對一種機器,而另一個集合針對另一種風格的系統。
事實上,您可以從 GCC 獲得一個暗示:可以為每個應用程序維護多個環境變量集合,根據手邊的工作從一個集合切換到另一個集合。一種方法是在每個項目目錄中保存一個環境初始化文件並根據需要 source
它。例如,許多 Ruby 開發人員使用這種方法來在不同的 Ruby 版本間切換,根據需要更改環境變量 PATH、GEM_HOME 和 GEM_PATH,從一個版本跳到另一個版本。
“點綴” 環境
與環境變量非常相似的是,許多 Linux和 UNIX 應用程序都提供一個點 文件 — 文件名以圓點開始的小文件 — 來進行定制。與環境變量不同的是:環境變量采集少量標記和相對較少的信息量,而點文件可能更廣泛、更復雜,擁有自己獨特的語法規則、甚至自己的編程語言。點文件是保存選項和設置的理想位置,因為(根據 UNIX 傳統)以一個圓點開始的文件名不會出現在標准的目錄清單中。(使用 ls -a
來查看這些所謂的隱藏文件。)點文件是純文本文件,只是文件名比較特別而已。
點文件通常位於您的主目錄內,但有些實用程序也在當前工作目錄中查找點文件。如果一個應用程序支持多個點文件,則該程序通常應用於優先規則,來表明一個文件比另一個文件優先。通常,“本地” 點文件 — 位於當前工作目錄 — 優先級最高,然後是主目錄中的點文件,最後是一個系統范圍配置文件。這些文件可以全部存在,也可以存在一個,或者都不存在,這取決於應用程序將這些文件視為互斥的還是遞增的。在第一種情況下,優先鏈中第一個點文件的優先權是不容置疑的。在後一種情況下,配置可以級聯或融解到最終結果中。
less
的密匙綁定文件是一個簡單點文件示例,位於 $HOME/.lesskey 中。文件中的每一行都是一對(一個按鍵和一條命令),如下所示:
\r forw-line \n forw-line e forw-line j forw-line ^E forw-line ^N forw-line k back-line y back-line ^Y back-line
fetchmail
是比較復雜的點文件示例。這個實用程序在本地從多個遠程源提取電子郵件並傳送消息。這個實用程序的操作只通過 $HOME/.fetchmailrc 控制。(參見手冊頁了解它的眾多選項。)cron
、git
、vi
,以及其他許多命令都能識別點文件。同樣,請閱讀這個應用程序的手冊頁,了解可以在點文件中配置的內容。有些點文件內容豐富,足以占用一個單獨的手冊頁,比如 crontab
。