天天看點

linux系統管理者

6.1  開關機流程與多重新開機動

6.1.1 開機流程

基本的流程為:

1.加載 BIOS 的硬體資訊;

  記錄在bios裡的主機的硬體資料加載.

2.讀取 MBR 的 Kernel Loader (亦即是 lilo, grub, spfdisk 等等)開機資訊;

  硬碟的引導資料,在主引導扇區, Kernel Loader主要的功能在于選擇硬碟上的系統,讓你的硬體認識核心,以便加載核心

    3.加載 Kernel 的作業系統核心資訊;

      加載核心

4.Kernel 執行 init 程式并取得 run-level 資訊;

  取得系統登陸狀态,由/sbin/init 來加載 /etc/inittab 的資訊,獲得登陸狀态 .

  [root @test /root]# vi /etc/inittab

#   0 - halt (Do NOT set initdefault to this)  關機 

#   1 - Single user mode  單人使用(系統有問題時候的登入狀況) 

#   2 - Multiuser, without NFS (The same as 3, if you do not have networking) 多人但無網絡 

#   3 - Full multiuser mode 文字界面登入的多人系統 

#   4 - unused      系統保留 

#   5 - X11           X-Windows 圖形界面登入的多人系統 

#   6 - reboot (Do NOT set initdefault to this)  重新開機 

id:3:initdefault:

    『單人維護模式 ( run-level 為 1 )』?如果你有玩過 Windows 的話,那麼你在開機的時候如果按下 F8 時,不是會出現

一些什麼『安全模式』啦、『正常開機』啦或『 MS-DOS 模式』等等的進入 Windows 的狀态嗎?尤其是當你不正常關機的時候,

Windows 預設就會以『安全模式』來啟動 Windows 啰!Windows 的『安全模式』幾乎不加載一些複雜的子產品,讓你的 Windows

一定可以開機成功!那麼 Linux 的維護模式狀态即是使用單人模式( 就是 run_level 為 1 啦!)

    5.init 執行 /etc/rc.d/rc.sysinit 檔案;

    需要将主機的資訊給他讀進去 Linux 系統!而 Linux 系統的第一個資料内容就是 /etc/rc.d/rc.sysinit 這個檔案,這個檔

案的内容包括了==>設定預設路徑( PATH )、設定主機名稱、執行 /etc/sysconfig/network 所記錄的網絡資訊、挂載 /proc

這個儲存在記憶體當中的主機基本訊息、以及其它幾個 Linux 作業系統最基本的幾個資訊.

6.啟動核心的外挂式子產品 (/etc/modules.conf);

modules.conf有兩個作用,一是告訴OS哪些子產品開機自動加載,二是指明裝置和子產品的對應關系,比如:alias eth0

8139too,它告訴OS,裝置eth0的驅動子產品是8139too

7.init 執行 run-level 的各個批次檔( Scripts );

run-level 所需要加載的子產品并不相同,是以系統早就為不同的 run-level 設定了一些批次檔( scripts )來做這件事,

而 run-level 早就在前面的時候以 /etc/inittab 當中取得,也就是說『當你以 文字模式 ( run-level=3 ) 啟動 Linux 時,你

的系統在經過 BIOS、 MBR、 Kernel、 init、/etc/rc.d/rc.sysinit 之後,就會進入 /etc/rc.d/rc3.d 來啟動一些服務』啰!

不過,需要注意的是,在 rc3.d (或其它目錄下 rc0.d ~ rc6.d )目錄中 S 開頭的檔案為執行該服務, K 為開頭的檔案則是殺

掉該服務的意思。那麼那些數字代表的意義為何?那就是啟動的順序

8.init 執行 /etc/rc.d/rc.local 檔案;

在 Linux 系統執行完了大部分的開機程式之後,接着下來就是要執行你的 Linux 主機的個人化設定.

9.執行 /bin/login 程式;

    10.登入之後開始以 Shell 控管主機。

6.1.2:變換預設的登入模式

你在安裝的過程中選擇了文字接口登入,但是後來卻想以圖形接口登入系統,應該怎麼做?!簡單的很!就直接修改 /etc/

inittab 這個檔案的内容即可!如何做呢?!以 vi 或者是其它的文書編輯軟體,進入 /etc/inittab 這個檔案,

id:3initdefault: 裡頭的 3 改成 5 ,那麼在下次的登入時就會變成是圖形接口啰

    6.1.3:Lilo

   Lilo 的設定與安裝方面必需要分成兩個步驟,分别是設定 /etc/lilo.conf 這個設定檔,設定完畢之後,還必需要給他改寫

進去 MBR 或者是 Super block 才行!

  6.1.3.1 配置檔案/etc/lilo.conf

  基本上, lilo 是加載 Linux 核心的重要開機資料的安裝程式,他的參數設定檔案就放在 /etc/lilo.conf 裡頭,那麼我們來

看一看裡面有什麼設定參數吧,基本上他的設定參數有點像底下這樣,可以分為兩部分,一個是整體的設定方面,一個則是每一

個開機設定的核心檔案:

 

[root @test linux]# vi /etc/lilo.conf 

# 第一部份,整體的設定部分

prompt   <==強制出現 boot 的開機訊息啰! 

Compact  <==可以整合一些讀取的扇區,可以保持 map 較小,相當适合軟碟開機時使用 

delay=50 <==如果有多重開機的話,可以設定這個延遲時間,機關0.1秒 

timeout=50 <==與 delay 有類似的關系!也是 0.1 秒,如果 5 秒内沒有按鍵盤,直接以第一個 p_w_picpath 開機。 

default=linux-2.4.18 <==如果開機的過程中,出現了boot之後,使用者沒有動作,

                          則以此設定的核心開機,與底下的label需對應 

boot=/dev/hda         <==Lilo 的開機資訊寫入到 /dev/hda 這顆硬碟的 MBR 當中。 

map=/boot/map         <==用來說明 local 主機的地圖資訊啰! 

install=/boot/boot.b <==關于開機區的訊息(boot sector),不用理他沒關系! 

Linear                <==在較大容量的硬碟使用時,可以加入這一個參數試試看! 

lba32                 <==這個東西也是在大容量的硬碟使用時候會需要的參數! 

password=1234567      <==設定密碼!如果為了安全起見,可以設定您的 lilo 密碼哩! 

message=/boot/message <==那個 LILO 的訊息就是在裡面出現的啦!

# 第二部分,個别的開機設定部分,一個 p_w_picpath 或 other 均代表一個開機設定!

p_w_picpath=/boot/vmlinuz-2.4.7-10     <==核心檔案啦! 

        label=linux-2.4.7        <==請注意!label 前面以 [tab] 按鍵來作為分隔!

                                    這個字眼則是顯示在 boot 裡頭挑選項目。 

        initrd=/boot/initrd-2.4.7-10.img 

        read-only              <==開機扇區挂載為隻讀!這是預設狀況,實際在

                                    挂加載 Linux 系統時,會重新挂載成可寫! 

        root=/dev/hda1           <==挂載成 / 這個 root 目錄的磁盤! 

other=/dev/hdb1                  <==如果是『非 Linux 核心』就以 other 來設定

                                    開機的磁盤扇區! 

    label=Windows2k          <==同樣的要有 label 來表示這個開機扇區的名稱!

注意一下上面那幾個咚咚:

delay 與 timeout 的設定是 0.1 秒,是以 delay=50 表示延遲時間為 5 秒!

linear 與 lba32 通常用在 SCSI 或者是較大的硬碟,例如扇區超過 1024 磁道的硬碟,可以使用這個項目來除錯!不過,如果

是小于 8GB 的硬碟,這兩個東西有沒有設定就沒有什麼影響了!

default 需要設定成底下幾個 p_w_picpath 或者是 other 的 label 才成!這個地方最常被忘記!因為常常會記得修改 label ,但是

忘記跟着改變 default 的内容!此外,如果你想要修正開機預設的作業系統選項,在這裡改啦!

password 的用途在于安全防護方面,不過有個困擾,就是『如果你的計算機因為不正常關機(如斷電後重開)而在電源恢複的時

候重新開機時,則會卡在這個階段無法直接進入 Linux 系統』,因為你必須提供 password 才能繼續的工作呀!

boot 顯示的是開機的扇區選擇! 這裡也蠻重要的,如果你想要安裝在 MBR 裡面的話,如同上面的書寫模式,就是寫入 /dev/

hda ,後面不要加上每個 partition 的代碼!但是,如果你是想寫入 Super Block ,例如我想要寫入的是 hda5 這個 Logical

的 partition 時,那麼這裡就必需要改寫為 /dev/hda5 啰!是以,您應該隻要一看到這個 boot 後面接的内容,就會知道那個

安裝的扇區是 MBR 還是 Super Block 啰!

p_w_picpath 可以設定成多數個!如果你的 Linux 系統有多個核心檔案的時候,例如我們剛剛編譯完成的一個新的核心,然而你又不想

丢掉舊核心,就可以設定成兩個不同核心的開機系統啰

  6.1.3.1 安裝 lilo

既然設定好了,自然就是要安裝他啰!安裝的方式很簡單,直接輸入 lilo 即可!

  [root @test root]# lilo

Added linux *       <==有打星号的是『預設的開機設定檔!』

Added failsafe

Added linux-test

   6.1.4 GRUB

     6.1.4.1 設定檔 /boot/grub/menu.lst

     6.1.4.2  在 grub 裡面,有一點是比較讓人覺得不适應的,那就是他的硬碟代号與 lilo 還有 Linux 傳統的代号不一樣~他的代号主要有點像這樣:

(hd0,0)

hd 指的是 IDE 的硬碟,而裡面的 0,0 代表什麼呢?第一個 0 代表他是第一個 IDE 的 master ,而第二個 0 代表他是第一塊 partition 的代号,是以呢,這個代号就是 hda1 啦!是以,我們可以得到底下這個對應表:

  裝置 Lilo Grub

IDE1 master hda, hda1, hda2 (hd0), (hd0,0), (hd0,1)

IDE1 slave hdb, hdb1, hdb2 (hd1), (hd1,0), (hd1,1)

IDE2 master  hdc, hdc1, hdc2 (hd2), (hd2,0), (hd2,1)

IDE2 slave  hdd, hdd1, hdd2  (hd3), (hd3,0), (hd3,1)

來談談這兩種安裝的方式:基本上的動作就是:

使用 root [磁盤代号] 選擇開機根目錄 / 所在磁盤代号;

使用 setup [磁盤代号] 選擇 MBR 或 Super block 直接安裝進去!

使用 quit 就可以離開 grub 了

6.2 套件管理RPM與Tarball

   ·RPM

  目前使用最廣泛的套件管理程式之一,利用資料庫管理的方式來進行套件的安裝,具有相當容易的操作介

面,而且套件查詢驗證的功能相當強大,不過麻煩的地方在于他的屬性相依的問題;

  ·Tarball

  直接以原始碼( source code )經過編譯後,進行安裝。在安裝上面具有較大的靈活度,可以随時更改使用

者喜好的參數。但是需要其他的套件協助,例如 gcc compiler, kernel-header, make 套件等等,并且在反安

裝上面具有一定程度的困難度;

  6.2.1 RPM

  6.2.1.1 RPM及srpm簡介

    RPM 全名是『 RedHat Package Manager 』簡稱則為 RPM,是以一種資料庫記錄的方式來将你所需要的套件

安裝到你的 Linux 主機的一套管理程式

    還有 SRPM 這個東西! SRPM 是什麼呢?他也是一種 RPM 啦!但是由于裡面連同當初編譯之前的原始碼都

在裡頭,是以可以進行重新編譯的動作。通常 SRPM 的附檔名是 ****.src.rpm 這一種檔案格式。由于 SRPM

包含了原始碼及參數設定檔案,是以在安裝之前則必須重新的編譯建立起包裝的資訊檔案套件才行!當然啰,

如果在編譯的過程中發生了問題,也可以藉由裡頭的原始碼更動來修正問題的所在呢!是以說, RPM 與 SRPM

最大的差異就是在于有沒有包含原始碼的程式啦!

    rpm和srpm的格式:  

    xxxxxxxxx.rpm  <==RPM 的格式,已經經過編譯且包裝完成的 rpm 檔案;

    xxxxx.src.rpm  <==SRPM的格式,包含未編譯的原始碼資訊。

那麼我們怎麼知道這個套件的版本、适用的平台、打包的次數呢?呵呵!隻要透過檔名就可以知道了!例如

rp-pppoe-3.1-5.i386.rpm 這的檔案的意義為:

 rp-pppoe -  3.1    -   5  .   i386    .rpm

 套件名稱   套件的版本資訊   釋出的次數   适合的硬體平台  附檔案名 

 适合的 硬體平台:

這是個很好玩的地方,由于 RPM 可以适用在不同的操作平台上,但是由于不同的平台設定的參數還是有所差異

性!并且,我們可以針對比較高階的 CPU 來進行最佳化參數的設定,是以就有所謂的 i386, i586, i686 與

noarch 等的檔案名稱出現了!

    i386 幾乎适用于所有的 x86 平台,不論是舊的 pentum 或者是新的 pentum-IV 與 K7 系列的 CPU等等,

都可以正常的工作!那個 i 指的是 Intel 相容的 CPU 的意思,至于 386 不用說,就是 CPU 的等級啦!

i586 就是 586 等級的計算機,那是哪些呢?包括 pentum 第一代 MMX CPU, AMD 的 K5, K6 系列 CPU

( socket 7 插腳 ) 等等的 CPU 都算是這個等級;

   i686 在 pentun II 以後的 Intel 系列 CPU ,及 K7 以後等級的 CPU 都屬于這個 686 等級!

noarch 就是沒有任何硬體等級上的限制。

需要額外說明的是, i386 的檔案可以在任何的機器上面安裝,不論是 586 或者是 686 的機器,但是 i686

則不一定可以使用于 386 或者是 586 的硬體上面,這是因為 i686 的 RPM 檔案在編譯的時候,主要是針對

686 硬體等級的 CPU 來進行最佳化編譯,而 386/586 等級的硬體可能由于無法支援該最佳化參數,是以無法

使用呢!另外,在 686 的機器上使用 i686 的檔案會比使用 i386 的檔案,效能可能比較好一些!無論如何,

使用 i386 應該就是比較沒有問題的啦

   6.2.1.2  RPM的相關指令:

   1.安裝

   [root@test root]# rpm -ivh rp-pppoe-3.1-5.i386.rpm

Preparing...     ####################################### [100%]

   1:rp-pppoe    ####################################### [100%]

# -i :install 的意思

# -v :察看更細部的安裝資訊畫面

# -h :以安裝資訊列顯示安裝進度,例如上面的 # 字元号!

# 如果要安裝兩個以上的套件時,可以這樣:

[root@test root]# rpm -ivh a.i386.rpm b.i386.rpm *.rpm

# 後面可以接多個套件!

   2.更新

   使用 RPM 來更新真是太簡單了!就以 -Uvh 或 -Fvh 來更新即可( 注:vh 的功能仍是在于顯示細部資訊與

安裝進度而已 )!不過,這兩種更新方式是不太一樣的:

  -Uvh 後面接的套件即使沒有安裝過,則系統将予以直接安裝;若後面接的套件有安裝過舊版,則系統自動

更新至新版;

   -Fvh 如果後面接的套件并未安裝到您的 Linux 系統上,則該套件不會被安裝;亦即隻有安裝至您 Linux

系統内的套件會被『更新』!

  3.查詢

   a. 從系統查詢(由 /var/lib/rpm 資料庫取得的資料)

[root @test /root]# rpm -q rp-pppoe                 <==僅列出 rp-pppoe 這個套件的版本;

[root @test /root]# rpm -qa                     <==列出所有安裝過的套件與版本;

[root @test /root]# rpm -qi rp-pppoe            <==列出 rp-pppoe 這個套件的詳細資訊

[root @test /root]# rpm -ql rp-pppoe            <==列出 rp-pppoe 這個套件安裝的檔案與路徑;

[root @test /root]# rpm -qf /etc/rc.d/init.d/pppoe  <==查詢 pppoe 這個檔案屬于哪一個套件?

   b. 由檔案查詢檔案的内容

[root @test /root]# rpm -qpi rp-pppoe-2.6-5.src.rpm  <==查詢這個套件的詳細資訊;

[root @test /root]# rpm -qpl rp-pppoe-2.6-5.src.rpm  <== 查詢這個套件裡面有多少檔案

  4.驗證

[root @test /root]# rpm -V rp-pppoe <==單純檢查 rp-pppoe 這個已安裝套件的檔案内容與原先是否相同

[root @test /root]# rpm -Va           <==檢查所有的 /var/lib/rpm 底下的資料庫與 Linux 系統下是否相同的檔案

 5.反安裝與重建資料庫

 [root @test /root]# rpm -e re-pppoe  <==解安裝 rp-pppoe 

 [root @test /root]# rpm --rebuilddb  <==重建資料庫

 6.2.2 Tarball

 6.2.2.1 Tarball簡介

  其實tarball 就是以 *.tar.gz 壓縮之後的 binary 原始檔案.

  常我們會給您這樣的建議:

最好将 tarball 的原始資料解壓縮到 /usr/local/src 當中;

安裝時,最好安裝到 /usr/local 這個預設路徑下;

考慮未來的反安裝步驟,最好将每個套件單獨的安裝在 /usr/local 底下,例如安裝 rp-pppoe-2.6.tar.gz

時,則可以指定該套件需要安裝于 /usr/local/rp-pppoe 當中,如此一來,如果該套件會将所有的資料都寫入

/usr/local/rp-pppoe 當中,是以,未來如果要移除該套件,隻要将該目錄删除即可視為成功的移除了!

不過單獨安裝某個套件在某一特定路徑下的作法,會導緻當有 man page 的時候,使用預設的 MANPATH 會找不

到相關的說明檔案内容。這個時候就必須要将 man page 的路徑加到 /etc/man.config 檔案中了!否則使用

man 也查詢不到指令的使用方法的。以上面的例子為例,如果是安裝了 /usr/local/rp-pppoe 當中,通常 man

page 會放在 /usr/local/rp-pppoe/man 當中,是以,您就必需要在 /etc/man.config 裡面差不多 40~50 行

左右的地方,加入底下這一行:

MANPATH /usr/local/rp-pppoe/man

這樣就可以使用 man 來查詢資料啰!

 6.2.2.2 TarBall 安裝需要的套件

  1.kernel sources files: /usr/src/linux目錄下的檔案,該目錄是需要安裝或編譯過核心才會存在的目錄

  2.make及autoconfig等套件:需要安裝,使參數配置檔案(通常就是Makefile檔案)順利執行

  3.gcc或cc等編譯軟體:如果沒有編譯軟體,自然也就無法将源代碼編譯成可執行檔案,是以至少要有一種編

譯器,在liunx下,通常使用gcc套件.注意,gcc和上面的make等套件都在安裝linux時的軟體開發包裡.

 6.2.2.3 TarBall 安裝的基本步驟

 1.将Tarball在/usr/local/src中解壓縮

 2.在軟體解壓縮的路徑下建立Makefile參數配置檔案;

 3.以make這個程式并使用該目錄下的Makefile作為它的參數配置檔案,進行make(編譯或其它)動作

 4.以make這個程式,并以Makefile參數配置檔案依據install項的指定将其安裝到正确的路徑.

 Tarball軟體的安裝指令輸入方式:

 1. ./configure  :這個步驟就是建立Makefile檔案,即參數配置檔案,這個步驟的相關資訊應該參考該目錄下

的README或INSTALL相關的檔案

 2. make clean   : make會讀取Makefile中關于clean的工作。這個步驟不一定會有,但最好是有,因為在進

行編譯的時候,會産生一些*.o檔案,例如有個abc.c的源代碼,經過編譯後會變成abc.o檔案,我們稱這個檔案

為目标檔案。這些檔案如果之前己經過編譯并保留下來的話,那麼這次再編譯的時候就不會編譯該檔案(即這次

不會重新編譯,還是會采用上次*.o的檔案),但由于我們可能己經修改了部分參數,是以該檔案的編譯結果事

實上應該會有所不同。故為了避免這樣的結果,是以通常需要執行這個步驟

 3. make       :make會依據Makefile中的預設工作進行編譯的行為,使用make就是要将源代碼編譯為可執行文

件,而這個可執行檔案會放置在目前所在目錄下,尚未被安裝到預定目錄中。

 4.make install: 通常這是最後的安裝步驟,make會依據Makefile檔案中關于install的項将上一步驟編譯完

成的資料安裝到預定目錄中,就完成安裝了。

 5.特别注意,上面的步驟是一步一步進行的,其中隻要一個步驟無法成功,後續步驟就沒有辦法進行,是以,

要確定每一個步驟都是成功的。

 6.2.2.4  TarBall的移除與更新

     Tarball的移除難度跟當初設定參數檔案時的安裝目錄與這個套件本身要求的放置目錄有關.通常一個套件

在安裝時會将它的内容分到四個目錄中存放,分别是:etc(代有設定),lib(代表函數),man(代表線上說明文檔),

bin(代表執行檔案).

     以apache為例,如果在安裝時使用預設值,在這些檔案相應的會存放在/etc/httpd,/usr/lib,/usr/bin,/

usr/share/man中,這時在移除時就有會有困難了.但是如果在安裝時指定了路徑,如/usr/local/apache,則相應

的存放目錄為:/usr/local/apache/etc,/usr/local/apache/lib,/usr/local/apache/man,/usr/local/apache/

bin.這時在移除時,隻要删除/usr/local/apache就可以了.

 6.2.3  選擇RPM還是Tarball

1.優先選擇RPM

如果版本支援RPM安裝并且沒有嚴重的相依屬性問題時,選擇RPM安裝是一個比較好的選擇.此外,當一個套件經過

大幅修改,通常舊的RPM與新的RPM之間幾乎無法完全相容,更新或移除過程就很麻煩。

2.簡易方法

使用Tarball可以自行編譯并且安裝在不同的路徑,隻要在啟動時啟動适當的版本,不同版本的套件可以同時存

在于一個系統中,而且可以通過選擇啟動檔案來啟動不同的版本。

6.3 核心編譯與多重新開機動(這一章很難用上,暫時學個大概)

6.3.1 什麼是核心

  linux Distribution

  kernel

  linux核心放在什麼地方

6.3.2 為什麼更新核心

    核心的編譯重點在于『你要你的 Linux 作什麼?』,是啦!如果沒有必要的工作,就幹脆不要加在你的核

心當中了!這樣才能讓你的 Linux 跑得更穩、更順暢!這也是為什麼我們要編譯核心的最主要原因了!,核心

編譯的最主要目地是想讓系統更加穩定.

6.3.3 核心的版本與何處下載下傳最新核心

6.3.3.1 核心的版本

    [root@linux ~]# uname -r

    2.6.13-1.1532_FC4

    [主版本].[次版本].[釋出版本(release)]-[修改版本]

    整個版本的定義當中,最需要注意的是前兩個,亦即主版本與次版本。 相同的[主][次]版本,代表他使用

的函式庫是差不多的,是以,可以直接更新到較高的[釋出版本]上。 值得注意的是,由于核心功能的增加速度

實在太快了,一般商業使用者與一般使用者, 根本不需要很多的測試中的功能,是以,[主][次]版本中,依據

[次版本]的奇偶數, 又分為底下兩種版本:

    如果[次版本]是奇數的話,例如 2.3, 2.5 等等,那表示他是一個『 測試性質功能的核心版本 』, 這種

核心通常是在推出穩定版本的核心之前,用來給 developer ( 核心維護更新測試者!) 測試用的!雖然功能較

為強大,但是由于是屬于測試性質,是以可能會有些許的 bugs 也說不定;

    如果[次版本]是偶數的話,例如 2.4, 2.6 等等,那表示他是一個經過測試之後才釋出的 『穩定核心版

本,這種核心較為穩定不容易出錯, 比較适合一般個人或者是商業使用!

     這裡還是要再提一遍!就是『 2.4 與 2.6 是兩個具有相當大差異的核心版本, 兩者之間使用到的函式

庫基本上已經不相同了,是以在更新之前,如果您的核心原本是 2.4.xx 版,那麼就更新到 2.4.xx 版本的最

新版,不要由 2.4.xx 直接更新到 2.6.xx 版.

6.3.3.2 核心下載下傳 的 地點

6.3.4  開始設定核心的内容

6.4 基本的系統設定指令

6.4.1 基本的系統設定工具

   1. Mandrake :drakconf

   2. Red Hat  :setup,修改/etc/sysconfig目錄中的檔案

6.4.2 系統啟動服務工具

6.4.2.1.service

   service指令用于管理Linux作業系統系統中服務的指令,讓該項服務立即啟動

   service [service name ][start|stop|restart]

1. 聲明:這個指令不是在所有的linux發行版本中都有。主要是在redhat、fedora、mandriva和centos中。

此指令位于/sbin目錄下,用file指令檢視此指令會發現它是一個腳本指令。

3. 分析腳本可知此指令的作用是去/etc/init.d目錄下尋找相應的服務,進行開啟和關閉等操作。

4. 開啟httpd伺服器:service httpd start

start可以換成restart表示重新啟動,stop表示關閉,reload表示重新載入配置。

5. 關閉mysql伺服器:service mysqld stop

6.4.2.2 .chkconfig(注意這裡的name是必須存在于/etc/rc.d/init.d目錄下的)

chkconfig --list [name]                        -----列出run-level情況下該套件是否被開機啟動

chkconfig --add name                        ----------增加一個service_name在開機時啟動       

chkconfig --del name                        --------删除一個開機啟動服務

chkconfig [--level levels] name    [on|off|reset]           ----改變指定服務的的啟動資訊

chkconfig [--level levels] name

eg:決定在運作級 2 禁止crond,

# chkconfig --level 2 crond off

(root執行)會在運作級 2 關掉 crond。

運作級檔案

每個被chkconfig 管理的服務需要在對應的init.d 下的腳本加上兩行或者更多行的注釋。

第一行告訴 chkconfig 預設啟動的運作級以及啟動和停止的優先級。如果某服務預設不在任何運作級啟動,那

麼使用 - 代替運作級。

第二行對服務進行描述,可以用\ 跨行注釋。

例如,random.init 包含三行:

# chkconfig: 2345 20 80

# description: Saves and restores system entropy pool for \

# higher quality random number generation.

表明 random 腳本應該在運作級 2, 3, 4, 5 啟動,啟動優先權為20,停止優先權為 80。

 6.4.3 檢驗軟體正确性:md5sum

 6.4.4 核心子產品的管理

6.5 認識系統服務

6.5.1 什麼是daemon 

   作業系統的背景程序,通常具有root安全級别許可權。守護程式通常隐藏在背景,直至被某個事件(例如特

定的時間或日期、時間間隔、收到電子郵件等)觸發後它才會進入活動狀态。

   daemons 目前有兩種基本的模式,分别是 stand_alone 與 super daemon 兩種方式: 

   stand_alone : 就字面上的意思來說,stand alone 就是『獨立的啟動』的意思,也就是說,該 daemon

啟動之後,就直接常駐在記憶體當中啰!他雖然會一直的占用系統的資源,但最大的優點就是,他會一直啟動的

啦!是以當有要求來的時候,他就會很快速的響應啰!常常用在這一種 daemon 的網絡服務如常見的 httpd

   super daemon : 相對于 stand alone 的執行方式,這一種服務的啟動方式則是藉由統一的一個 daemon

來負責喚起該服務!這一個統一負責的 daemon 就是 inet 這支服務啦!不過,在後來的 Linux 發展套件中,

則是使用 xinet 這個設定.

6.5.1.2 /etc/services

    在 Linux 系統裡面有個檔案在說明哪個視窗與服務的  ( services and ports ) 對應!呵呵!那就是鼎

鼎大名的 /etc/services 這個檔案.

6.5.1.3命名規則

    服務的名稱被建立之後,被挂上 Linux 使用時,通常在服務的名稱之後會加上一個 d ,例如例行性指令的建立的 at, 與 cron 這兩個服務,通常會被稱為 atd 與 crond,這個 d 代表的就是 daemon 的意思

6.5.2 系統的Daemons啟動檔案放在哪裡

  stand alone : 這個放置在 /etc/rc.d/init.d/ 這個目錄裡面,幾乎所有的 RPM 安裝的套件之啟動項目都

在這裡啦!

  super daemon : 這個工作的那一支服務其實就是 xinet 或者是 inet 啦!請注意, xinet 也是一個

daemon 呢!他是 stand alone 啟動的,也就是他會一直在監聽大家的需求,是以 xinet 的啟動 scripts 寫

在 /etc/rc.d/init.d/xinetd 這個 scripts 裡面啰!但是挂在這個 daemon 裡頭的服務之設定項目呢?嗯!

就是寫在 /etc/xinetd.conf 與 /etc/xinetd.d/ 這個目錄裡面的任何檔案!

6.5.3 解析xinetd.conf

    一般,在/etc/rc.d/init.d中的腳本都是相應的RPM提供的.可以由這個super daemon來管理我們的服務.

 預設的/etc/xinetd.conf檔案的内容:

[root@rtest ~]# more /etc/xinetd.conf

#

# Simple configuration file for xinetd

# Some defaults, and include /etc/xinetd.d/

defaults

{

        instances               = 60

        log_type                = SYSLOG authpriv

        log_on_success          = HOST PID

        log_on_failure          = HOST

        cps                     = 25 30

}

includedir /etc/xinetd.d

如果沒有指定services(defaults),那麼就用{}中的設定來執行

includedir /etc/xinetd.d 這行表示,在/etc/xinetd.d裡的所有檔案都放入xinetd.conf中,這樣一來,我們可

以一個一個設定不同的項,而不需要将所有的服務都寫在xinetd.conf中.即每個服務有一個設定好的配置檔案.

參看下面的目錄下的檔案.

[root@test ~]# cd /etc/xinetd.d

[root@test xinetd.d]# ll

總用量 120

-rw-r--r--  1 root root 560 10月 19 23:26 chargen

-rw-r--r--  1 root root 580 10月 19 23:26 chargen-udp

-rw-r--r--  1 root root 239 10月 19 23:26 cups-lpd

-rw-r--r--  1 root root 417 10月 19 23:26 daytime

-rw-r--r--  1 root root 437 10月 19 23:26 daytime-udp

-rw-r--r--  1 root root 339 10月 19 23:26 echo

-rw-r--r--  1 root root 358 10月 19 23:26 echo-udp

-rw-r--r--  1 root root 322 10月 19 23:26 eklogin

-rw-r--r--  1 root root 325 10月 19 23:26 gssftp

-rw-r--r--  1 root root 309 10月 19 23:26 klogin

-rw-r--r--  1 root root 322 10月 19 23:26 krb5-telnet

-rw-r--r--  1 root root 307 10月 19 23:26 kshell

-rw-r--r--  1 root root 317 10月 19 23:26 rsync

-rw-r--r--  1 root root 495 10月 19 23:26 time

-rw-r--r--  1 root root 515 10月 19 23:26 time-udp

[root@test xinetd.d]# more echo

# default: off

# description: An xinetd internal service which echo's characters back to clients. \

# This is the tcp version.

service echo

        disable         = yes

        type            = INTERNAL

        id              = echo-stream

        socket_type     = stream

        protocol        = tcp

        user            = root

        wait            = no

}              

這裡表示的就是echo這個服務運作時的一些屬性.

6.5.4 TCP_Wrappers:/etc/hosts.allow與/etc/hosts.deny

除了xinetd外,還有一個方法限制利用某些服務進入linux主機,即/etc/hosts.allow與/etc/hosts.deny.

這兩個配置檔案的格式如下:

  #服務程序名:主機清單:當規則比對時可選的指令操作

  server_name:hosts-list[:command]

  /etc/hosts.allow控制可以通路本機的IP位址,/etc/hosts.deny控制禁止通路本機的IP.如果兩個檔案的

配置有沖突,以/etc/hosts.allow為準

    ALL:127.0.0.1 #允許本機通路本機所有服務程序

  smbd:192.168.0.0/255.255.255.0 #允許192.168.0.網段的IP通路smbd服務

  ALL關鍵字比對所有情況,EXCEPT比對除了某些項之外的情況

6.5.5 系統開啟的服務

6.5.5.1 netstat

       netstat指令的功能是顯示網絡連接配接、路由表和網絡接口資訊,可以讓使用者得知目前都有哪些網絡連接配接正在運作。

 該指令的一般格式為:

   netstat [選項]

   指令中各選項的含義如下:

   -a 顯示所有socket,包括正在監聽的。

    -c 每隔1秒就重新顯示一遍,直到使用者中斷它。

    -i 顯示所有網絡接口的資訊,格式同“ifconfig -e”。

   -n 以網絡IP位址代替名稱,顯示出網絡連接配接情形。

   -r 顯示核心路由表,格式同“route -e”。

    -t 顯示TCP協定的連接配接情況

    -u 顯示UDP協定的連接配接情況。

  -v 顯示正在進行的工作。

6.5.5.2 chkconfig

6.5.5.3 各個服務的簡單說明.

6.6 分析登陸檔案

6.6.1 什麼是登陸檔案,為什麼要分析登陸檔案

     登陸檔案就是記錄系統活動記錄的幾個檔案,例如:何時、何地(來源 IP )、何人( login

name )、做了什麼動作,另外就是系統在什麼時候做了什麼樣的行為時,發生了什麼樣的事件等等

      常見的登陸檔案:

      1./var/log/secure  記錄登入系統存取資料的檔案

      2./var/log/wtmp  記錄登入者的訊息資料,由于本檔案已經被編碼過,是以必須使用 last 這個指令

來取出檔案的内容

      3./var/log/messages  這個檔案相當的重要,幾乎系統發生的錯誤訊息(或者是重要的資訊)都會記

錄在這個檔案中

      4./var/log/boot.log   記錄開機或者是一些服務啟動的時候,所顯示的啟動或關閉訊息;

      5./var/log/maillog    紀錄郵件存取或往來( sendmail 與 pop3 )的使用者記錄

      6./var/log/cron       這個是用來記錄 crontab 這個例行性服務的内容的

      7./var/log/httpd, /var/log/news, /var/log/mysqld.log, /var/log/samba, /var/log/procmail.log

分别是幾個不同的網絡服務的記錄檔案

6.6.2 linux登陸檔案的規劃

      針對 log 檔案來設計的服務有這兩支:

      syslogd:進行系統或者是網絡服務的登入檔案記錄工作;

      logrotate:将舊的資料更名,并且建立新的登入檔案,以保持登入檔案的『新鮮』,并視設定将最舊的

登入檔案删除。

6.6.2.1 syslog

    linux預設使用syslog程式來記錄系統的登陸資料.它能接受通路系統的日志資訊并且根據

/etc/syslog.conf 配置檔案中的指令處理這些資訊.

使用下列的句法來說明:

<服務名稱.資訊等級>   <存放或顯示的地點>

.服務名稱:例如像mail,http,cron等服務名稱

.資訊等級:emerg 或 panic 該系統不可用

 alert 需要立即被修改的條件

 crit 阻止某些工具或子系統功能實作的錯誤條件

 err 阻止工具或某些子系統部分功能實作的錯誤條件

 warning 預警資訊

 notice 具有重要性的普通條件

 info 提供資訊的消息

 debug 不包含函數條件或問題的其他資訊

 none 沒有重要級(即不記錄到檔案),通常用于排錯

 * 所有級别,除了none

  與每個功能對應的優先級是按一定順序排列的,emerg 是最進階,其次是 alert,依次類推。

.存放地點:通常使用的都是記錄檔案.但是也可以輸出到裝置。

注意:當我們的等級使用info時,任何大于info等級的(含info等級)之上的資訊都會被記到後面的檔案中.

eg:

1.  mail.info   /var/log/maillog

将mail的相關資料寫到var/log/maillog中.

2. syslog允許人們使用三種限定符對優先級進行修飾:星号(*)、等号(=)和歎号(!)。

    星号 (*)的含義是“把本項服務生成的所有日志消息都發送到操作動作指定的地點”。就像它在規則表

達式裡的作用一樣,星号代表“任何東西”。在前面給出的例子 裡,“mail.*”将把所有優先級的消息都發送

到操作動作指定的/var/log/mail檔案裡。使用“*”限定符與使用“debug”優先級的效果 完全一樣,後者也

将把所有類型的消息發送到指定地點。

    等号(=)的含義是“隻把本項服務生成的本優先級的日志消息都發送到操作動作指定的地點”。比如說,

可以用“=”限定符隻發送調試消息而不發送其他更緊急的消息(這将為應用程式減輕很多負擔)。當你隻需要

發送特定優先級别的消息時,就要使用等号限定符。

    就像它在程式設計時的用法一樣,等号意味着等于且僅等于。歎号(!)的含義是“把本項服務生成的所有日志

消息都發送到操作動作指定的地點,但本優先級的消息不 包括在内”。比如說,這條syslog配置行将把除info

優先級以外的所有消息發送到/var/log/mail檔案裡:

   mail.*;mail.!info/var/log/mail

    在這個例子裡,“mail.*”将發送所有的消息,但“mail.!info”卻把info優先級的消息排除在外。就像它在程式設計時的用法一樣,歎号意味着“非”。

   mail.*   /var/log/mail

   mail.=warn  /var/log/message

     在這個例子裡,“mail.*”将發送所有的消息,但“mail.=warn”卻把mail中的warn的消息單獨記錄在

/var/log/message中。

6.6.2.2 登陸檔案的安全設定

    可以将syslog記錄的檔案利用chattr設定a屬性,這樣使這個檔案隻能新增而無法删除.

6.6.2.3 登陸檔案的輪替 :logrotate

    登陸檔案的輪替是在規定的時間到了後,進行日志檔案的輪替行為.即這個logrotate程式是挂在cron下進

行的.

    logrotate程式的參數配置檔案:/etc/logrotate.conf  /etc/logrotate.d 

    logrotate周期性地旋轉日志檔案,可以周期性地把每個日志檔案重命名成一個備份名字,然後讓它的守護

程序開始使用一個日志檔案的新的拷貝。這就是為什麼在/var/log/下看到許多諸如maillog、maillog.1、

maillog.2、boot.log.1、boot.log.2之類的檔案名。它由一個配置檔案驅動,該檔案是/etc/logroatate.

conf,

     Red Hat Linux 預設安裝的檔案内容是:

# see "man logrotate" for details

# rotate log files weekly

weekly

# keep 4 weeks worth of backlogs

rotate 4

# send errors to root

errors root

# create new (empty) log files after rotating old ones

create

# uncomment this if you want your log files compressed

#compress

1

# RPM packages drop log rotation information into this directory

include /etc/logrotate.d

# no packages own lastlog or wtmp --we'll rotate them here

/var/log/wtmp {

monthly

create 0664 root utmp

rotate 1

/var/log/lastlog {

# system-specific logs may be configured here

預設的配置一般放在logrotate.conf 檔案的最開始處,影響整個系統。在本例中就是前面12行。

第三行

weekly 指定所有的日志檔案每周轉儲一次。

第五行

rotate 4 指定轉儲檔案的保留 4份。

第七行

errors root 指定錯誤資訊發送給root。

第九行

create 指定 logrotate 自動建立新的日志檔案,新的日志檔案具有和原來的檔案一樣的權限。

第11行 #compress 指定不壓縮轉儲檔案,如果需要壓縮,去掉注釋就可以了。

三、使用include 選項讀取其他配置檔案

include 選項允許系統管理者把分散到幾個檔案的轉儲資訊,集中到一個

主要的配置檔案。當 logrotate 從logrotate.conf 讀到include 選項時,會從指定檔案讀入配置資訊,就好像他們已經在/etc/logrotate.conf 中一樣。

第13行 include /etc/logrotate.d 告訴 logrotate 讀入存放在/etc/logrotate.d 目錄中的日志轉儲參數,當系統中安裝了RPM 軟體包時,使用include 選項十分有用。RPM 軟體包的日志轉儲參數一般存放在/etc/logrotate.d 目錄。

include 選項十分重要,一些應用把日志轉儲參數存放在 /etc/logrotate.d 。

典型的應用有:apache, linuxconf, samba, cron 以及syslog。

這樣,系統管理者隻要管理一個 /etc/logrotate.conf 檔案就可以實作日志的轉存.

6.6.3 登陸檔案分析 :dmesg;last

繼續閱讀