首頁 > 軟體

Linux系統服務詳解

2020-06-16 17:21:06

只要是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@linuxidc/root ] # ps auxw | grep inetd | grep -v grep

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

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

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的形式包含一個範圍,也可能包含一個用逗號隔開的列表。

本文永久更新連結地址http://www.linuxidc.com/Linux/2017-02/140853.htm


IT145.com E-mail:sddin#qq.com