理解Linux配置檔案(轉)

post0發表於2007-08-09
理解Linux配置檔案(轉)[@more@]

本文說明了 Linux 系統的配置檔案,在多使用者、多工環境中,配置檔案控制使用者許可權、系統應用程式、守護程式、服務和其它管理任務。這些任務包括管理使用者帳號、分配磁碟配額、管理電子郵件和新聞組,以及配置核心引數。本文還根據配置檔案的使用和其所影響的服務的情況對目前 Red Hat Linux 系統中的配置檔案進行了分類。

介紹

每個 Linux 程式都是一個可執行檔案,它含有操作碼列表,CPU 將執行這些操作碼來完成特定的操作。例如,ls 命令是由 /bin/ls 檔案提供的,該檔案含有機器指令的列表,在螢幕上顯示當前目錄中檔案的列表時需要使用這些機器指令。幾乎每個程式的行為都可以透過修改其配置檔案來按照您的偏好或需要去定製。

Linux 中有沒有一個標準的配置檔案格式?

一句話,沒有。不熟悉 Linux 的使用者(一定)會感到沮喪,因為每個配置檔案看起來都象是一個要迎接的新挑戰。在 Linux 中,每個程式設計師都可以自由選擇他或她喜歡的配置檔案格式。可以選擇的格式很多,從 /etc/shells 檔案(它包含被一個換行符分開的 shell 的列表),到 Apache 的複雜的 /etc/httpd.conf 檔案。

什麼是系統配置檔案?

核心本身也可以看成是一個“程式”。為什麼核心需要配置檔案?核心需要了解系統中使用者和組的列表,進而管理檔案許可權(即根據許可權判定特定使用者(UNIX_USERS)是否可以開啟某個檔案)。注意,這些檔案不是明確地由程式讀取的,而是由系統庫所提供的一個函式讀取,並被核心使用。例如,程式需要某個使用者的(加密過的)密碼時不應該開啟 /etc/passwd 檔案。相反,程式應該呼叫系統庫的 getpw() 函式。這種函式也被稱為系統呼叫。開啟 /etc/passwd 檔案和之後查詢那個被請求的使用者的密碼都是由核心(透過系統庫)決定的。

除非另行指定,Red Hat Linux 系統中大多數配置檔案都在 /etc 目錄中。配置檔案可以大致分為下面幾類:

訪問檔案

/etc/host.conf 告訴網路域名伺服器如何查詢主機名。(通常是 /etc/hosts,然後就是名稱伺服器;可透過 netconf 對其進行更改)

/etc/hosts 包含(本地網路中)已知主機的一個列表。如果系統的 IP 不是動態生成,就可以使用它。對於簡單的主機名解析(點分表示法),在請求 DNS 或 NIS 網路名稱伺服器之前,/etc/hosts.conf 通常會告訴解析程式先檢視這裡。

/etc/hosts.allow 請參閱 hosts_access 的聯機幫助頁。至少由 tcpd 讀取。

/etc/hosts.deny 請參閱 hosts_access 的聯機幫助頁。至少由 tcpd 讀取。

引導和登入/登出

/etc/issue & /etc/issue.net 這些檔案由 mingetty(和類似的程式)讀取,用來向從終端(issue)或透過 telnet 會話(issue.net)連線的使用者顯示一個“welcome”字串。它們包括幾行宣告 Red Hat 版本號、名稱和核心 ID 的資訊。它們由 rc.local 使用。

/etc/redhat-release 包括一行宣告 Red Hat 版本號和名稱的資訊。由 rc.local 使用。

/etc/rc.d/rc 通常在所有執行級別執行,級別作為引數傳送。例如,要以圖形(Graphics)模式(X-Server)引導機器,請在命令列執行下面的命令:init 5。執行級別 5 表示以圖形模式引導系統。

/etc/rc.d/rc.local 非正式的。可以從 rc、rc.sysinit 或 /etc/inittab 呼叫。

/etc/rc.d/rc.sysinit 通常是所有執行級別的第一個指令碼。

/etc/rc.d/rc/rcX.d 從 rc 執行的指令碼(X 表示 1 到 5 之間的任意數字)。這些目錄是特定“執行級別”的目錄。當系統啟動時,它會識別要啟動的執行級別,然後呼叫該執行級別的特定目錄中存在的所有啟動指令碼。例如,系統啟動時通常會在引導訊息之後顯示“entering run-level 3”的訊息;這意味著 /etc/rc.d/rc3.d/ 目錄中的所有初始化指令碼都將被呼叫。

檔案系統

核心提供了一個介面,用來顯示一些它的資料結構,這些資料結構對於決定諸如使用的中斷、初始化的裝置和記憶體統計資訊之類的系統引數可能很有用。這個介面是作為一個獨立但虛擬的檔案系統提供的,稱為 /proc 檔案系統。很多系統實用程式都使用這個檔案系統中存在的值來顯示系統統計資訊。例如,/proc/modules 檔案列舉系統中當前載入的模組。lsmod 命令讀取此資訊,然後將其以人們可以看懂的格式顯示出來。下面表格中指定的 mtab 檔案以同樣的方式讀取包含當前安裝的檔案系統的 /proc/mount 檔案。 /etc/mtab 這將隨著 /proc/mount 檔案的改變而不斷改變。換句話說,檔案系統被安裝和解除安裝時,改變會立即反映到此檔案中。

/etc/fstab 列舉計算機當前“可以安裝”的檔案系統。這非常重要,因為計算機引導時將執行 mount -a 命令,該命令負責安裝 fstab 的倒數第二列中帶有“1”標記的每一個檔案系統。

/etc/mtools.conf DOS 型別的檔案系統上所有操作(建立目錄、複製、格式化等等)的配置。

系統管理

/etc/group 包含有效的組名稱和指定組中包括的使用者。單一使用者如果執行多個任務,可以存在於多個組中。例如,如果一個“使用者”是“project 1”工程組的成員,同時也是管理員,那麼在 group 檔案中他的條目看起來就會是這樣的:user: * : group-id : project1

/etc/nologin 如果有 /etc/nologin 檔案存在,login(1) 將只允許 root 使用者進行訪問。它將對其它使用者顯示此檔案的內容並拒絕其登入。

etc/passwd 請參閱“man passwd”。它包含一些使用者帳號資訊,包括密碼(如果未被 shadow 程式加密過)。

/etc/rpmrc rpm 命令配置。所有的 rpm 命令列選項都可以在這個檔案中一起設定,這樣,當任何 rpm 命令在該系統中執行時,所有的選項都會全域性適用。

/etc/securetty 包含裝置名稱,由 tty 行組成(每行一個名稱,不包括前面的 /dev/),root 使用者在這裡被允許登入。

/etc/usertty

/etc/shadow 包含加密後的使用者帳號密碼資訊,還可以包括密碼時效資訊。包括的欄位有:

登入名

加密後的密碼

從 1970 年 1 月 1 日到密碼最後一次被更改的天數

距密碼可以更改之前的天數

距密碼必須更改之前的天數

密碼到期前使用者被警告的天數

密碼到期後帳戶被禁用的天數

從 1970 年 1 月 1 日到帳號被禁用的天數

/etc/shells 包含系統可用的可能的“shell”的列表。

/etc/motd 每日訊息;在管理員希望向 Linux 伺服器的所有使用者傳達某個訊息時使用。

聯網

/etc/gated.conf gated 的配置。只能被 gated 守護程式所使用。

/etc/gated.version 包含 gated 守護程式的版本號。

/etc/gateway 由 routed 守護程式可選地使用。

/etc/networks 列舉從機器所連線的網路可以訪問的網路名和網路地址。透過路由命令使用。允許使用網路名稱。

/etc/protocols 列舉當前可用的協議。請參閱 NAG(網路管理員指南,Network Administrators Guide)和聯機幫助頁。

C 介面是 getprotoent。絕不能更改。

/etc/resolv.conf 在程式請求“解析”一個 IP 地址時告訴核心應該查詢哪個名稱伺服器。

/etc/rpc 包含 RPC 指令/規則,這些指令/規則可以在 NFS 呼叫、遠端檔案系統安裝等中使用。

/etc/exports 要匯出的檔案系統(NFS)和對它的許可權。

/etc/services 將網路服務名轉換為埠號/協議。由 inetd、telnet、tcpdump 和一些其它程式讀取。有一些 C 訪問例程。

/etc/inetd.conf inetd 的配置檔案。請參閱 inetd 聯機幫助頁。包含每個網路服務的條目,inetd 必須為這些網路服務控制守護程式或其它服務。注意,服務將會執行,但在 /etc/services 中將它們註釋掉了,這樣即使這些服務在執行也將不可用。格式為:

/etc/sendmail.cf 郵件程式 sendmail 的配置檔案。比較隱晦,很難理解。

/etc/sysconfig/network 指出 NETWORKING=yes 或 no。至少由 rc.sysinit 讀取。

/etc/sysconfig/network-scripts/if* Red Hat 網路配置指令碼。

系統命令

系統命令要獨佔地控制系統,並讓一切正常工作。所有如 login(完成控制檯使用者身份驗證階段)或 bash(提供使用者和計算機之間互動)之類的程式都是系統命令。因此,和它們有關的檔案也特別重要。這一類別中有下列令使用者和管理員感興趣的檔案。 /etc/lilo.conf 包含系統的預設引導命令列引數,還有啟動時使用的不同映象。您在 LILO 引導提示的時候按 Tab 鍵就可以看到這個列表。

/etc/logrotate.conf 維護 /var/log 目錄中的日誌檔案。

/etc/identd.conf identd 是一個伺服器,它按照 RFC 1413 文件中指定的方式實現 TCP/IP 提議的標準 IDENT 使用者身份識別協議。identd 的操作原理是查詢特定 TCP/IP 連線並返回擁有此連線的程式的使用者名稱。作為選擇,它也可以返回其它資訊,而不是使用者名稱。請參閱 identd 聯機幫助頁。

/etc/ld.so.conf “動態連結程式”(Dynamic Linker)的配置。

/etc/inittab 按年代來講,這是 UNIX 中第一個配置檔案。在一臺 UNIX 機器開啟之後啟動的第一個程式是 init,它知道該啟動什麼,這是由於 inittab 的存在。在執行級別改變時,init 讀取 inittab,然後控制主程式的啟動。

/etc/termcap 一個資料庫,包含所有可能的終端型別以及這些終端的效能。

守護程式

守護程式是一種執行在非互動模式下的程式。一般來說,守護程式任務是和聯網區域有關的:它們等待連線,以便透過連線提供服務。Linux 可以使用從 Web 伺服器到 ftp 伺服器的很多守護程式。 /etc/syslogd.conf syslogd 守護程式的配置檔案。syslogd 是一種守護程式,它負責記錄(寫到磁碟)從其它程式傳送到系統的訊息。這個服務尤其常被某些守護程式所使用,這些守護程式不會有另外的方法來發出可能有問題存在的訊號或向使用者傳送訊息。

/etc/httpd.conf Web 伺服器 Apache 的配置檔案。這個檔案一般不在 /etc 中。它可能在 /usr/local/httpd/conf/ 或 /etc/httpd/conf/ 中,但是要確定它的位置,您還需要檢查特定的 Apache 安裝資訊。

/etc/conf.modules or /etc/modules.conf kerneld 的配置檔案。有意思的是,kerneld 並不是“作為守護程式的”核心。它其實是一種在需要時負責“快速”載入附加核心模組的守護程式。

使用者程式

在 Linux(和一般的 UNIX)中,有無數的“使用者”程式。最常見的一種使用者程式配置檔案是 /etc/lynx.cfg。這是著名的文字瀏覽器 lynx 的配置檔案。透過這個檔案,您可以定義代理伺服器、要使用的字符集等等。下面的程式碼樣本展示了 lynx.cfg 檔案的一部分,修改這部分程式碼可以改變 Linux 系統的代理伺服器設定。預設情況下,這些設定適用於在各自的 shell 中執行 lynx 的所有使用者,除非某個使用者透過指定 --cfg = "mylynx.cfg" 重設了預設的配置檔案。

/etc/lynx.cfg 中的代理伺服器設定

.h1 proxy

.h2 HTTP_PROXY

.h2 HTTPS_PROXY

.h2 FTP_PROXY

.h2 GOPHER_PROXY

.h2 NEWS_PROXY

.h2 NNTP_PROXY

# Lynx version 2.2 and beyond supports the use of proxy servers that can act as

# firewall gateways and caching servers. They are preferable to the older

# gateway servers. Each protocol used by Lynx can be mapped separately using

# PROTOCOL_proxy environment variables (see Lynx Users Guide). If you have

# not set them externally, you can set them at run time via this configuration file.

# They will not override external settings. The no_proxy variable can be used

# to inhibit proxying to selected regions of the Web (see below). Note that on

# VMS these proxy variables are set as process logicals rather than symbols, to

# preserve lowercasing, and will outlive the Lynx image.

#

.ex 15

http_proxy:

ftp_proxy:

#http_proxy:

#ftp_proxy:/

.h2 NO_PROXY

# The no_proxy variable can be a comma-separated list of strings defining

# no-proxy zones in the DNS domain name space. If a tail substring of the

# domain-path for a host matches one of these strings, transactions with that

# node will not be proxied.

.ex

no_proxy:demiurge.in.ibm.com, demiurge

更改配置檔案

在更改配置檔案時,如果程式不是由系統管理員或核心控制的,就要確保重新啟動過使用該配置的程式。普通使用者通常沒有啟動或停止系統程式和/或守護程式的許可權。

核心

更改核心中的配置檔案會立即影響到系統。例如,更改 passwd 檔案以增加使用者將立即使該使用者變為可用。而且任何 Linux 系統的 /proc/sys 目錄中都有一些核心可調引數。只有超級使用者可以得到對所有這些檔案的寫訪問權力;其它使用者只有只讀訪問權力。此目錄中檔案的分類的方式和 Linux 核心原始碼的分類方式一樣。此目錄中的每個檔案都代表一個核心資料結構,這些資料結構可以被動態地修改,從而改變系統效能。

注意:在更改其中任何檔案的任何值之前,您應該確保自己全面瞭解該檔案,以避免對系統造成不可修復的損害。

/proc/sys/kernel/ 目錄中的檔案 檔名 描述

threads-max 核心可執行的最大任務數。

ctrl-alt-del 如果值為 1,那麼順序按下這幾個鍵將“徹底地”重新引導系統。

sysrq 如果值為 1,Alt-SysRq 則為啟用狀態。

osrelease 顯示作業系統的發行版版本號

ostype 顯示作業系統的型別。

hostname 系統的主機名。

domainname 網路域,系統是該網路域的一部分。

modprobe 指定 modprobe 是否應該在啟動時自動執行並載入必需的模組。

守護程式和系統程式

守護程式是永遠執行在後臺的程式,它默默地執行自己的任務。常見的守護程式有 in.ftpd(ftp 伺服器守護程式)、in.telnetd(telnet 伺服器守護程式)和 syslogd(系統日誌記錄守護程式)。有些守護程式在執行時會嚴密監視配置檔案,在配置檔案改變時就會自動重新載入它。但是大多數守護程式並不會自動重新載入配置檔案。我們需要以某種方式“告訴”這些守護程式配置檔案已經被髮生了改變並應該重新載入。可以透過使用服務命令重新啟動服務來達到這個目的(在 Red Hat Linux 系統上)。

例如,如果我們更改了網路配置,就需要發出:

service network restart。

注意:這些服務最常見的是 /etc/rc.d/init.d/* 目錄中存在的指令碼,在系統被引導時由 init 啟動。所以,您也可以執行如下操作來重新啟動服務:

/etc/rc.d/init.d/ start | stop | status

start、stop 和 status 是這些指令碼接受的輸入值,用來執行操作。

使用者程式

使用者或系統程式在每次啟動時都會讀取其配置檔案。儘管如此,請記住,有些系統程式在計算機開啟時情況不一樣,它們的行為依賴於在 /etc/ 中的配置檔案中讀到的內容。所以,使用者程式第一次啟動時將從 /etc/ 目錄中存在的檔案讀取預設配置。然後,使用者可以透過使用 rc 和 .(點)檔案來定製程式,正如下面一節所示。

使用者配置檔案:.(點)檔案和 rc 檔案

我們已經看到怎樣容易地配置程式。但是如果有的人不喜歡在 /etc/ 中配置程式的方式該怎麼辦呢?“普通”使用者不能簡單地進入 /etc 然後更改配置檔案;從檔案系統的角度來看,配置檔案的所有者是 root 使用者!這就是大多數使用者程式都定義兩個配置檔案的原因:第一個是“系統”級別的,位於 /etc/;另一個屬於使用者“專用”,可以在他或她的主目錄中找到。

例如,我在我的系統中安裝了非常有用的 wget 實用程式。/etc/ 中有一個 /etc/wgetrc 檔案。在我的主目錄中,有一個名為 .wgetrc 的檔案,它描述了我定製的配置(只有在我,也就是使用者執行 wget 命令時,才會載入這個配置檔案)。其它使用者在他們自己的主目錄(/home/other)中也可以有 .wgetrc 檔案;當然,只有這些使用者執行 wget 命令時,才會讀取這個檔案。換句話說,/etc/wgetrc 檔案為 wget 提供了“預設”值,而 /home/xxx/.wgetrc 檔案列舉了某個使用者的“定製項”。重要的是這只是“一般規則”,並非所有情況都如此。例如,一個象 pine 一樣的程式,在 /etc/ 中並沒有任何檔案,它只在使用者主目錄中有一個定製配置檔案,名為 .pinerc。其它程式可能只有 /etc/ 中的預設配置檔案,而且可能不允許使用者“定製”這些配置檔案(/etc 目錄中只有少數 config. 檔案是這種情況)。

通常使用的 rc 和 .(點)檔案

檔名 描述

~/.bash_login 請參考“man bash”。如果 ~/.bash_profile 不存在,bash 則將 ~/.bash_login 作為 ~/.bash_profile 處理。

~/.bash_logout 請參考“man bash”。在退出時由 bash 登入 shell 引用。

~/.bash_profile 由 bash 登入 shell 引用 /etc/profile 之後引用。

~/.bash_history 先前執行的命令的列表。

~/.bashrc 請參考“man bash”。由 bash 非登入互動式 shell 引用(沒有其它檔案)。除非設定了 BASH_ENV 或 ENV,非互動式 shell 不引用任何檔案。

~/.emacs 啟動時由 emac 讀取。

~/.forward

如果這裡包含一個電子郵件地址,那麼所有發往 ~ 的所有者的郵件都會被轉發到這個電子郵件地址。

~/.fvwmrc ~/.fvwm2rc fvwm 和 fvwm2(基本的 X Window 管理器)的配置檔案。

~/.hushlogin 請參考“man login”。引起“無提示”登入(沒有郵件通知、上次登入資訊或者 MOD 資訊)。

~/.mail.rc 郵件程式的使用者初始化檔案。

~/.ncftp/ ncftp 程式的目錄;包含書籤、日誌、宏、首選項和跟蹤資訊。請參閱 man ncftp。ncftp 的目的是為因特網標準檔案傳輸協議(Internet standard File Transfer Protocol)提供一個強大而靈活的介面。它旨在替換系統所使用的標準的 ftp 程式。

~/.profile 請參考“man bash”。如果 ~/.bash_profile 和 ~/.bash_login 檔案不存在,bash 則將 ~/.profile 作為 ~/.bash_profile 處理,並被其它繼承 Bourn 的 shell 使用。

~/.pinerc Pine 配置

~/.muttrc Mutt 配置

~/.exrc 這個檔案可以控制 vi 的配置。

示例:set ai sm ruler

在此檔案中寫入上面一行會讓 vi 設定自動縮排、匹配括號、顯示行號和行-列這幾個選項。

~/.vimrc 預設的“Vim”配置檔案。和 .exrc 一樣。

~/.gtkrc GNOME 工具包(GNOME Toolkit)。

~/.kderc KDE 配置。

~/.netrc ftp 預設登入名和密碼。

~/.rhosts 由 r- 工具(如 rsh、rlogin 等等)使用。因為冒充主機很容易,所以安全性非常低。

必須由使用者(~/ 的所有者)或超級使用者擁有。

列出一些主機,使用者可以從這些主機訪問該帳號。

如果是符號連結則被忽略。

~/.rpmrc 請參閱“man rpm”。如果 /etc/rpmrc 不存在則由 rpm 讀取。

~/.signature 訊息文字,將自動附加在從此帳號發出的郵件末尾。

~/.twmrc twm(The Window Manager)的配置檔案。

~/.xinitrc 啟動時由 X 讀取(而不是由 xinit 指令碼讀取)。通常會啟動一些程式。

示例:exec /usr/sbin/startkde

如果該檔案中存在上面這行內容,那麼在從這個帳號發出 startx 命令時,這一行就會啟動“KDE 視窗管理器”(KDE Window Manager)。

~/.xmodmaprc 此檔案被傳送到 xmodmap 程式,而且可以被命名為任何檔案(例如 ~/.Xmodmap 和 ~/.keymap.km)。

~/.xserverrc 如果 xinit 可以找到要執行的 X,xinit 就會將該檔案作為 X 伺服器執行。

~/News/Sent-Message-IDs gnus 的預設郵件歷史檔案。

~/.Xauthority 由 xdm 程式讀和寫,以處理許可權。請參閱 X、xdm 和 xauth 聯機幫助頁。

~/.Xdefaults,

~/.Xdefaults-hostname 在主機 hostname 的啟動過程中由 X 應用程式讀取。如果找不到 -hostname 檔案,則查詢 .Xdefaults 檔案。

~/.Xmodmap 指向 .xmodmaprc;Red Hat 有使用這個名稱的 .xinitrc 檔案。

~/.Xresources 通常是傳送到 xrdb 以載入 X 資源資料庫的檔案的名稱,旨在避免應用程式需要讀取一個很長的 .Xdefaults 檔案這樣的情況。(有些情況曾經使用了 ~/.Xres。)

~/mbox

使用者的舊郵件。

參考資料

要了解更多資訊,請閱讀 Jack Wallen, Jr. 的 Linux configuration files。

在 developerWorks 上還有:

Technical FAQ for Linux users

What good is a Linux client?

Using the xinetd program for system administration

流覽 developerWorks 上的更多 Linux 參考資料。

流覽 developerWorks 上的更多開放原始碼參考資料。

關於作者

Subodh Soni 持有印度 College Surat 大學電腦科學與技術地區工程學的工程學學士學位。他為印度的 IBM Global Services(IBM Software Labs)工作;他還是 IBM Linux Technology Center 的成員之一,在那裡他致力於 Linux RAS(Reliability,Availability and Serviceability(可靠性、可用性和適用性))。他感興趣的其它領域還有作業系統內部、Linux 系統管理和疑難解答。您可以透過 subodh@in.ibm.com 與他聯絡。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-939155/,如需轉載,請註明出處,否則將追究法律責任。

相關文章