歡迎您光臨本站 註冊首頁

理解Linux配置文件

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  分類和使用
Subodh Soni([email protected]
IBM 軟體工程師
2001 年 12 月

本文說明了 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:http://proxy3.in.ibm.com:80/
ftp_proxy:http://proxy3.in.ibm.com:80/
#http_proxy:http://penguin.in.ibm.com:8080
#ftp_proxy:http://penguin.in.ibm.com:8080/

.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 系統管理和疑難解答。您可以通過 [email protected] 與他聯繫。



時間:2002-03-31 20:10來源: 作者:otto責任編輯:admin

[火星人 ] 理解Linux配置文件已經有453次圍觀

http://coctec.com/docs/linux/show-post-69693.html