系統設定變數
您不需要任何動作來提供一個 /etc/conf.d 的設定檔:如果您的 init 程序執行了,以下將會自動的載入(例:可用的變數):
- /etc/conf.d/<您的 init 程序>
- /etc/conf.d/basic
- /etc/rc.conf
另外,如果您的 init 程序需要一個虛擬的相依性(如 net),那麼相關的檔案將會也會被載入(如 /etc/conf.d/net)。
4.e. 更改執行階段(RunLevel)的態度
誰會受益?
很多使用手提電腦的使用者將會明白這個狀況:在家裡您需要啟動 net.eth0,在外面因為沒有網路,所以您不想啟動 net.eth0。因此您可以依照您的需求而改變 Gentoo 的執行階段。
舉例來說,您可以建立第二個 "default" 執行階段來讓您執行其他的起始程序(Init Scripts)。然後在開機時選擇使用預設的執行階段。
使用 softlevel
首先,建立第二個 "default" 執行階段。我們將建立 offline 執行階段為這次的範例:
原始碼 23: 建立一個執行階段目錄 |
# mkdir /etc/runlevels/offline
|
然後加入相關的起始程序到剛建立完成的目錄內。舉例來說,如果除了 net.eth0 以外,您想要將其他 default 執行階段的內容都複製到新的執行階段:
原始碼 24: 加入相關起始程序 |
(把所有預設執行階段的服務複製到 offline 執行階段) # cd /etc/runlevels/default # for service in *; do rc-update add $service offline; done (將不需要的服務從 offline 執行階段移除) # rc-update del net.eth0 offline (顯示 offline 執行階段啟動的服務) # rc-update show offline (部分的輸出) acpid | offline domainname | offline local | offline net.eth0 | |
現在編輯您的開機程式設定檔然後加入一個新的 offline 執行階段。舉例來說,在 /boot/grub/grub.conf:
原始碼 25: 加入 offline 執行階段 |
title Gentoo Linux Offline Usage
root (hd0,0)
kernel hd(0,0)/kernel-2.4.25 root=/dev/hda3 softlevel=offline
|
噹啷!完成了。當您重新啟動系統然後選擇剛加入的選項, offline 將會被執行而不是本來的 default。
使用 bootlevel
使用 bootlevel 和 softlevel 的方法完全類似。唯一不一樣的就是您需要定義另外一個 "boot" 執行階段而不是第二個 "default" 執行階段。
5. 環境變數
5.a. 系統變數?
這是什麼
系統變數是一個有名稱的物件,包含一個或多個程式要用的資訊。許多使用者(特別是 Linux 新手)覺得這有一些古怪而且難以管理。這想法有一些錯誤:使用者可以用系統變數輕鬆的改變一個或多個程式設定。
重要的範例
下面的表格顯示許多 Linux 使用的變數以及它們的用途。範例在表格後面展示。
| 變數 | 說明 |
| PATH | 這個變數包含用冒號分隔的目錄列表,讓系統尋找可執行檔。如果您輸入一個可執行檔 (例如 ls,rc-update 或 emerge)但是這個檔案不在列表中的 目錄,您的系統不會執行它(除非您輸入完整的路徑,如 /bin/ls)。 |
| ROOTPATH | 這個變數和 PATH 有相同功能,但是這裡面包含的目錄是根使用者數入指令時 才會尋找。 |
| LDPATH | 這個變數包含以冒號分隔的目錄列表,讓動態連結檔在裡面搜尋函式庫。 |
| MANPATH | 這個變數包含以冒號分隔的目錄列表,讓 man 指令搜尋手冊頁。 |
| INFODIR | 這個變數包含以冒號分隔的目錄列表,讓 info 搜尋資訊頁。 |
| PAGER | 這個變數包含顯示檔案內容的程式路徑(例如 less 或 more)。 |
| EDITOR | 這個變數包含編輯的程式路徑(例如 nano 或 vi)。 |
| KDEDIRS | 這個變數包含以冒號分隔的目錄列表,設定 KDE 的主要路徑。 |
| CLASSPATH | 這個變數包含以冒號分隔的目錄列表,設定 Java 程式的路徑。 |
| CONFIG_PROTECT | 這個變數包含以空白分隔的目錄列表,這些目錄在 Portage 更新時需要被保護。 |
| CONFIG_PROTECT_MASK | 這個變數包含以空白分隔的目錄列表,這些目錄更新 Portage 時不要被保護。 |
底下是所有的變數的設定範例:
原始碼 1: Example definitions |
PATH="/bin:/usr/bin:/usr/local/bin:/opt/bin:/usr/games/bin" ROOTPATH="/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin" LDPATH="/lib:/usr/lib:/usr/local/lib:/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2.3" MANPATH="/usr/share/man:/usr/local/share/man" INFODIR="/usr/share/info:/usr/local/share/info" PAGER="/usr/bin/less" EDITOR="/usr/bin/vim" KDEDIRS="/usr" CLASSPATH="/opt/blackdown-jre-1.4.1/lib/rt.jar:." CONFIG_PROTECT="/usr/X11R6/lib/X11/xkb /opt/tomcat/conf /usr/kde/3.1/share/config /usr/share/texmf/tex/generic/config/ /usr/share/texmf/tex/platex/config/ /usr/share/config" CONFIG_PROTECT_MASK="/etc/gconf |
5.b. 定義全域變數
/etc/env.d 目錄
為了要集中管理這些變數的設定,Gentoo 使用 /etc/env.d 目錄。在目錄中您會發現許多檔案,例如 00basic,05gcc 等。這裡面包含檔案名稱中所提到的程式需要用的變數。
例如,當您安裝 gcc 後,ebulid 會建立一個叫做 05gcc 的檔案,包含下面的變數設定:
原始碼 2: /etc/env.d/05gcc |
PATH="/usr/i686-pc-linux-gnu/gcc-bin/3.2" ROOTPATH="/usr/i686-pc-linux-gnu/gcc-bin/3.2" MANPATH="/usr/share/gcc-data/i686-pc-linux-gnu/3.2/man" INFOPATH="/usr/share/gcc-data/i686-pc-linux-gnu/3.2/info" CC="gcc" CXX="g++" LDPATH="/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2.3" |
其他的 Linux 套件會告訴您在 /etc/profile 或其他地方新增這些變數。 Gentoo 則讓您很容易(對 Portage 也是)去管理這些變數而不用注意其他設定系統變數的檔案。
舉例來說,當 gcc 更新了之後,/etc/env.d/05gcc 也會同時被更新而使用者不必做任何事。
這不僅對 Portage 有好處,對使用者也是。您或許偶爾會被要求設定一些系統變數。拿 http_proxy 做例子。您不用弄亂 /etc/profile,只要建立一個檔案( /etc/env.d/99local )然後在裡面輸入設定:
原始碼 3: /etc/env.d/99local |
http_proxy="proxy.server.com:8080" |
藉著將您自己的變數設定放到這個檔案中,您可以很快找到哪些變數是您自己設定的。
env-update 指令稿
在 /etc/env.d 中的數個檔案同時定義了 PATH 變數。這並沒有錯:當您執行 env-update,他會把數個設定同時加到系統設定中,因此讓軟體套件(或使用者)加入他們自己的設定而不會干擾已經存在的設定。
env-update 指令稿將會以 /etc/env.d 中的檔案名稱以字母順序依序加入系統設定中。檔案名稱開頭必需要是兩位數的數字。
原始碼 4: env-update 的新增順序 |
00basic 99kde-env 99local
+-------------+----------------+-------------+
PATH="/bin:/usr/bin:/usr/kde/3.2/bin:/usr/local/bin"
|