分類和使用
Subodh Soni(
[email protected])
IBM 軟件工程師
本文說明了 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 一個數據庫,包含所有可能的終端類型以及這些終端的性能。
守護進程
守護進程是一種運行在非交互模式下的程序。一般來說,守護
/etc/termcap 一個數據庫,包含所有可能的終端類型以及這些終端的性能。
守護進程
守護進程是一種運行在非交互模式下的程序。一般來說,守護