歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux基礎知識

基礎知識 - linux系統服務

linux系統服務
2004-04-23 15:18 pm
來自:Linux文檔
現載:Www.8s8s.coM
地址:無名

只要是linux系統,不管使用的發行版本、網絡配置以及系統全局設計有什麼不同,都有如下幾個核心系統服務:init、inetd、syslogd和cron。這些服務提供的功能比較簡單,但同時它們也是其他操作的基礎。如果沒有它們,Linux就不會有現在的威力。

本文將對每一個核心系統服務、相應的配置文件以及推薦的應用方式(如果有的話)逐個進行介紹。我們強烈推薦:務必要花上一些時間熟悉這些服務的實現原理。通過使用這些服務,人們已經設計出了許多富有創意的問題解決方案。

init服務

init進程是所有進程的發起者和控制者。因為在任何基於Unix的系統(比如linux)中,它都是第一個運行的進程,所以init進程的編號(Process ID,PID)永遠是1。如果init出現了問題,系統的其余部分也就隨之而垮掉了。

init進程有兩個作用。第一個作用是扮演終結父進程的角色。因為init進程永遠不會被終止,所以系統總是可以確信它的存在,並在必要的時候以它為參照。如果某個進程在它衍生出來的全部子進程結束之前被終止,就會出現必須以init為參照的情況。此時那些失去了父進程的子進程就都會以init作為它們的父進程。快速執行一下ps -af 命令,可以列出許多父進程ID(Parent Process ID,PPID)為1的進程來。

init的第二個角色是在進入某個特定的運行級別(Runlevel)時運行相應的程序,以此對各種運行級別進行管理。它的這個作用是由/etc/inittab文件定義的。

1. /etc/inittab文件

/etc/inittab文件中包括了所有init啟動運行級別所必須的信息。這個文件中的每一行語句的格式如下所示:

id : runlevels: action : process

注意:以#開始的語句是注釋語句。看看你自己的/etc/inittab文件就可以發現其中充斥了大量的注釋語句。如果確實需要對/etc/inittab文件進行什麼改動(一般不會出現這種情況的),記住加上一些注釋語句,解釋為什麼要做那些修改。

2. Telinit命令

通知init在什麼時候切換系統運行級別的神秘力量實際上就是Telinit命令。這個命令有兩個命令行參數:一個參數用來通知init准備切換過去的運行級別;另外一個是-tsec,其中的sec是在通知init之前需要等待的、以秒計算的時間。

注意:init是否真的切換運行級別是由它自己決定的。很明顯,它經常切換,否則這個命令就不會那麼有用了。在大多數Unix操作系統的具體實現(包括linux)中,Telinit命令實際上只是一個對init程序的符號鏈接。基於此,許多人更喜歡使用init直接切換到他們想去的運行級別而不是使用Telinit。就個人而言,我發現使用Telinit切換運行級別更便於理解和記憶。

inetd進程

inetd程序是一個守護進程。您可能已經知道守護進程是一些特殊的程序:它們在被啟動之後,自願放棄對調用自己終端的控制權。守護進程與系統其余部分的接口只有依靠進程間通信(Interprocess Communication,IPC)通道、或者依靠向系統全局性日志文件(Log File)才能發送數據項。

inetd的角色是作為Telnet和FTP等與網絡服務器相關的進程的“超級服務器”。這是一個簡單的道理:並不是全部的服務器進程(包括那些接受新的Telnet和FTP連接的進程)都會如此頻繁地被調用,以至於必須要有一個程序隨時運行在內存中。因此為了避免出現可能有幾十種服務都運行在內存中准備被使用的情況,它們都列在inetd的配置文件/etc/inetd.conf中。而代替它們的是inetd監聽著進入的連接。這樣只需要有一個進程在內存中就可以了。

inetd的另外一個優點是程序員並不想把需要網絡連接的進程都編寫到系統中去。inetd程序將處理網絡代碼,並把進入的網絡數據流作為各個進程的標准輸入(Standard-In,即Stdin)傳遞到其中。這些進程的輸出(Stdout)將會被送回連接到該進程的主機去。

注意:除非你正在進行編程,否則是不需要連接到inetd的Stdin/Stdout功能上。從另一方面來說,如果有人打算編寫一個簡單的命令腳本程序並讓它出現在網絡中,就值得深入研究這個極為強大的功能。

1.etc/inetd.conf文件

etc/inetd.conf文件是inetd的配置文件。它的結構很簡單:每一行語句代表一種服務。服務定義語句的格式如下所示:

srvce_name sock_type protocol [no]wait user srvr_prog srvr_prog_args

2.安全性與inetd.conf文件

你將會發現在大多數的linux安裝中,許多服務在缺省的情況下是打開的。如果你的系統將向因特網開放(包括通過撥號點對點協議被連通),你想做的第一件事就會是把一切都關閉!決不要假設因為你的系統沒有對公眾進行宣傳,別人就不會找到它。從相反的方向看,尋找存在安全性攻擊隱患系統的工具軟件是既容易找到又容易使用的。

關閉服務的第一個步驟是把etc/inetd.conf文件裡所有用不著的服務性說明語句都改為注釋語句。

一般來說,你會發現下面的方法更容易使用:先把全部東西都改為注釋語句(徹底關閉網絡服務),再有選擇地打開需要的服務。

在完成對etc/inetd.conf文件的修改之後,需要向守護進程報告其配置文件已經被修改了。這是通過向該守護進程發送HUP信號來實現的。先使用下面的命令找出inetd.conf對應的進程ID:

[ root@ford /root ] # ps auxw | grep inetd | grep -v grep

這個命令的輸出類似於下面的內容:

root 359 0.0 0.1 1232 168 ? S Jun21 0 : 00 inetd

輸出中的第二列告訴我們進程ID號(這裡就是359)。為了發送HUP信號,我們需要使用Kill命令(把這個程序叫做Kill多少有些誤導。實際上,它只是向進程發送信號而已。缺省的情況下,它會發出請求某個程序終止運行的信號)。

下面是使用Kill命令發送HUP信號的方法:

$ kil -1 359

應該把上面命令中的359換成從你的系統上得到的進程編號。

syslogd守護進程

在同一時間會發生許許多多的事情,而在終端窗口中斷開連接的網絡服務就更是如此了。因此,提供一個記錄特殊事件和消息的標准機制就非常有必要了。linux使用syslogd守護進程來提供這個服務。

syslogd守護進程提供了一個對系統活動和消息進行記錄的標准方法。許多其他種類的Unix操作系統也使用了兼容的守護進程。這就提供了一個在網絡中跨平台記錄的方法。在大型的網絡環境裡,這更具有價值。因為在那樣的環境裡,集中收集各種記錄數據以獲得系統運轉的准確情況是很有必要的。你可以把這種記錄功能子系統比作Windows NT的SystemLogger。

syslogd保存數據用的記錄文件都是簡明的文本文件,一般都存放在/var/log子目錄中。每個數據項構成一行,包括日期、時間、主機名、進程名、進程的PID,以及來自該進程的消息。標准C函數庫中的一個全局性的函數提供了生成記錄消息的簡單機制。如果不喜歡編寫程序代碼,但是又想在記錄文件中生成數據項,可以選擇使用Logger命令。可以想象,像syslogd這樣重要的工具應該是作為開機引導命令腳本程序的一部分來啟動的。你准備在服務器環境中使用的任何一個linux發行版本都已經為你設置好了。

1.調用syslogd

如果需要手動啟動syslogd,或者需要修改開機引導時啟動它的命令腳本程序,你就必須注意syslogd的命令行參數,請大家參看有關書籍,這裡不做詳細介紹。

2./etc/syslog.conf文件

/etc/syslog.conf文件包含了syslogd需要運行的配置信息。這個文件的格式有些不尋常,但是現有的缺省配置文件將足以滿足使用需要了,除非你需要在特定的文件中查找特定的信息,或者需要把這些信息發送到遠程記錄計算機去。

● 記錄信息分類

在我們掌握/etc/syslog.conf文件格式本身之前,需要先了解記錄消息是如何分類的。每個消息都有一個功能值(Facility)和一個優先權值(Priority)。功能值告訴我們這條消息是由哪個子系統產生的,而優先權值則告訴我們這個消息有多重要。這兩個值由句號分隔而且都有等價的字符串,從而容易記憶。

● /etc/syslog.conf文件的格式

下面是配置文件裡各語句的格式:

facility/priority combinations separated by commas file
/process/host to log to

舉例如下:

kern.info /ver/log/kerned

syslogd還可以靈活地把記錄消息發送到多種不同的保存目的地去。它可以把消息保存為文件、把消息發送到FIFO隊列、發送到一組用戶、或者(在大型站點集中記錄消息的情況下)發送到一個中心記錄主機中。為了區分這些目的地,在目的地入口使用了下面的規則:

◆ 如果保存目的地的開始字符是斜槓字符(/),消息將發送到某個文件。

◆ 如果保存目的地的開始字符是垂直字符(|),消息將發送到某個FIFO隊列。

◆ 如果保存目的地的開始字符是“@”字符,消息將發送到某個主機。

cron進程
cron進程為用戶提供一種可以計劃在一定時間間隔後自動執行任務的功能。cron通常還會負責at隊列中作業的啟動。
該進程從crontab文件中得到信息,對於每個用戶都會有一個獨立的crontab文件。
運行crontab -l命令,就可以查看已排列的命令列表。
如果要更改cron信息,必須創建一個crontab文件。crontab有固定的格式,有效行包括六個區域,即:
分鐘(0-59),小時(0-23),日(1-31),月(1-12),星期(0-7,0和7都代表周日),命令(要運行的任務)
每個區域都可能帶一個星號,表示整個區間,每個區域也可以使用x-y的形式包含一個范圍,也可能包含一個用逗號隔開的列表。

Copyright © Linux教程網 All Rights Reserved