理解Linux設定檔
作者 不詳 轉自http://www.exam100.com/
什麼是系統設定檔?
核心本身也可以看成是一個“程式”。為什麼核心需要設定檔?核心需要瞭解系統中使用者和組的列表,進而管理檔案許可權(即根據許可權判定特定使用者(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 並不是“作為守護進程的”核心。它其實是一種在需要時負責“快速”載入附加核心模組的守護進程。
更改設定檔
在更改設定檔時,如果程式不是由系統管理員或核心控制的,就要確保重新啟動過使用該配置的程式。普通使用者通常沒有啟動或停止系統程式和/或守護進程的許可權。
核心
更改核心中的設定檔會立即影響到系統。例如,更改 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。) |