系統的初始化和服務

linux啓動流程

1.計算機的BIOS執行POST(加電自檢)
2.BIOS爲引導加載程序(bootloader)讀取MBR
3.GRUB bootloader 加載linux內核。
4.linux內核初始化和配置硬件。
5.linux內核加載initramfs影響中的模塊。
6.linux內核啓動系統的第一個進程/bin/init
7./sbin/init獲取系統弄的第一個進程/sbin/init。
1.讀/etc/inittab
2.執行/etc/rc.d/rc.sysinit。
3.按照/etc/inittab中所定義的runlevel啓動系統。
4.執行/etc/rc.d/rc/local.

linux系統引導的順序

  • 打開計算機電源時、計算機進入BIOS

  • BIOS檢查計算機硬件設備,如CPU和內存等

  • 檢查成功之後進入MBR、即進入引導加載程序

  • MBR在啓動盤第1塊、大小爲512B、前446B程序代碼用來選擇boot partition(分區),也就是要由哪個分區裝入開機用的程序代碼。
    在這裏插入圖片描述

  • 隨後載入操作系統內核的代碼、這部分主要裝入計算機設備驅動程序

  • 並以只讀方式掛載/文件系統、即此時操作系統只能讀到根文件系統所在分區
    在這裏插入圖片描述

#使用df命令獲取/根系統(目錄)所在分區等信息
[root@dog ~]# df -h /
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        16G  7.6G  6.9G  53% /
  • 最後內核執行init程序,所以init程序的進程id爲1、即Linux操作系統第1個執行的程序
  • 可使帶有-C選項的ps命令列出命令名爲init的進程狀態
#使用帶-C選項的ps命令列出有關名爲init命令的進程狀態。ps是 process status(進程狀態的縮寫)。-C選項中的C是Command(命令)的第一個字母
這一選項之後要緊跟一個命令名。
顯示結果清楚的表明init這一命令的進程ID(PID)爲1。
[root@dog ~]# ps -C init
  PID TTY          TIME CMD
    1 ?        00:00:01 init

#使用帶有-p選項的ps命令列出PID的進程狀態,其中,-p選項中的p是process(進程)的第一個字母,之後要緊跟一個PID。
從結果可以看出與上述命令的輸出的結果是一樣的
[root@dog ~]# ps -p 1
  PID TTY          TIME CMD
    1 ?        00:00:01 init

另外init程序還會根據run level運行下圖中的一些程序。
在這裏插入圖片描述

BIOS的初始化和引導加載程序

BIOS的初始化

  • BIOS是Basic Input/Output System(基本輸入/輸出系統)的縮寫
  • BIOS是硬件與軟件之間的接口、而且是非常基本的接口
  • BIOS提供了一組基本的操作系統使用的指令、系統啓動的成功與否依賴於BIOS
  • BIOS爲外圍設備提供了最低級別的接口和控制

BIOS初始化的一些工作

  • BIOS的初始化主要有以下3項工作:
    1. 檢測計算機硬件和外圍設備,當BIOS一啓動就做自我檢測工作、也叫加電自檢以檢測計算機上硬件和外圍設備,如CPU等
    2. 選擇由哪一個設備來開機
    3. 在選擇了使用哪個設備開機後,就會讀取開機設備的第1個塊(其實就是 MBR)中的內容並執行這段代碼
  • 到此爲止,BIOS也就完成了它的使命
  • 接下來進入系統引導的第二階段

引導加載程序的操作

  • boot loader即可安裝在啓動硬盤的MBR中,也可安裝在開機硬盤的一個分區上
  • 有時也可能將boot loader安裝在一個硬盤的某個分區上、原因可能是MBR區已經被其他程序佔用,如被SPFDisk開機管理程序所佔用
    在這裏插入圖片描述

用MBR啓動Linux操作系統

  • 開機時BIOS讀入MBR前446B的程序代碼:
  • 隨後載入第二階段代碼並進入GRUB開機選單
  • GRUB開機選單中列出可啓動的所有操作系統
    在這裏插入圖片描述

用MBR啓動Linux操作系統

  • 選擇最上面的RHEL操作系統
  • 隨後GRUB就會選擇Red Hat Enterprise Linux 4操作系統的內核(Kernel)開機
    在這裏插入圖片描述

用MBR啓動Windows 系統

  • 開機時BIOS讀入MBR前446B的程序代碼
  • 隨後載入第二階段代碼並進入GRUB開機選單
  • 選擇Windows 、GRUB選擇Windows Server 2003操作系統內核(Kernel)開機
    在這裏插入圖片描述

MBR被其他程序佔用

  • 開機時進入MBR,但MBR被佔,所以到/boot分區的引導塊載入boot loader第一階段代碼
  • 隨後載入第二階段代碼進入GRUB開機選單
  • 如果選擇Linux系統開機,GRUB就選擇RHEL操作系統內核(Kernel)開機
  • 在這裏插入圖片描述

GRUB程序

GRUB的全稱是Grand Unified Bootloder(多重操作系統啓動管理器)。

  • 從MBR載入boot loader開始到系統執行init程序之間所有操作都是由GRUB所負責
  • 如按任意鍵會出現開機選單、同時還可在該畫面左上角看到GRUB的版本號

在這裏插入圖片描述

GRUB的特性

  • GRUB是Grand Unified Bootloader的縮寫,該多重開機管理程序具有如下的一些特性:

    1. 爲命令行界面並可在開機提示符下輸入GRUB命令
    2. 可使用多種文件系統開機、包括ext2/ext3
    3. 支持使用MD5加密技術以保護GRUB的密碼
    4. GRUB設置存放在/boot/grub/grub.conf文件中
    5. 變更/boot/grub/grub.conf文件中內容會立即生效
    6. 如硬盤上的MBR損壞了,可用/sbin/grub-install命令重新將boot loader安裝到MBR中
  • 當出現GRUB開機選單後,按c鍵進入GRUB命令行界面,隨後可輸入GRUB的命令

/boot/grub/grub.conf文件

  • /boot/grub/grub.conf是一個ASCII碼文件
  • 在該文件中所有以#開頭的都是註釋
  • 以下配置表示:該系統有一個/boot分區,所有的內核和初始化程序的路徑都指向/boot/,根分區對應於(hd0,0)、內核存在/dev/sda2分區、啓動盤是/dev/sda盤

# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/sda2
# initrd /initrd-version.img
#boot=/dev/sda

  • 該文件以title行爲分界、分上下兩部分,上面的(第一)部分是基本設定,下面的(第二)部分是區分多個操作系統的開機設定
  • 在這裏插入圖片描述

grub.conf文件基本設定

  • 在第1部分基本設定中如設置爲default=0,指默認以第1組操作系統開機
  • 如果有兩組操作系統的設定,且如果設置爲default=1,則默認以第2組操作系統開機

在這裏插入圖片描述

  • timeout=5表示進入grub頁面之後,默認要求用戶在5s內選擇哪個操作系統開機
  • grub頁面上時鐘會一秒一秒地遞減、如5s內沒應答,按default值啓動開機操作系統,timeout值可修改
  • splashimage的設定是指開機時使用的背景圖案
  • hd0,0的含義:hd0爲第1個硬盤、逗號後的0表示該硬盤的第1個分區。
  • 在該系統中/boot分區對應於/dev/sda1、第1個硬盤的第1個分區、即hd0,0就對應着/boot分區
  • hiddenmenu的設定是隱藏grub開機選單。如用了hiddenmenu,那麼在開機時看不到開機選單。要按下任意鍵之後,才能出現grub開機選單

grub.conf文件第2部分設定

  • 該部分第1行是標題、設置開機時開機選單中顯示的標題
  • 接下來root (hd0,0)設置了grub使用的文件所在目錄、其實(hd0,0)同樣對應着/boot目錄

在這裏插入圖片描述

  • 接着設定內核存放位置,由於在上一行設定了(hd0,0),所以內核就存放在(hd0,0)裏、即/boot目錄

  • 接下來,ro root=LABEL=/設定/這個根目錄的位置。其中,ro爲只讀(read only)、即整個ro root=LABEL=/的含義是以只讀方式掛載根(/)目錄
    在這裏插入圖片描述

  • rhgb是Red Hat Graphical Boot的縮寫、其含義是開機時以圖形畫面取代傳統的命令行界面

  • 如果想在開機時使用傳統的顯示方式——將開機過程以文字方式全部列在屏幕上,只需刪除rhgb

  • 最後一行是將initrd映像文件裝入內存中,initrd映像文件存放一些啓動程序

在這裏插入圖片描述

[root@dog ~]# file /boot/grub/stage1
/boot/grub/stage1: x86 boot sector; GRand Unified Bootloader, stage1 version 0x3, GRUB version 0.94, code offset 0x48
[root@dog ~]# cd /boot/grub
[root@dog grub]# ls *stage1*
e2fs_stage1_5  iso9660_stage1_5  reiserfs_stage1_5  vstafs_stage1_5
fat_stage1_5   jfs_stage1_5      stage1             xfs_stage1_5
ffs_stage1_5   minix_stage1_5    ufs2_stage1_5
[root@dog grub]# cd -
/root
[root@dog ~]# file /boot/grub/stage2
/boot/grub/stage2: GRand Unified Bootloader stage2 version 3.2, installed partition 65535, identifier 0x0, GRUB version 0.97, configuration file (hd0,0)/grub/grub.conf
[root@dog ~]# cd /boot/grub
[root@dog grub]# ls -l gr*
-rw-------. 1 root root 1493 5月  16 08:10 grub.conf
[root@dog grub]# file grub.conf
grub.conf: ASCII text
[root@dog grub]# more grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/sda3
#          initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=1
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Oracle Linux Server Red Hat Compatible Kernel (2.6.32-754.29.2.el6.x86_64)
    root (hd0,0)
    kernel /vmlinuz-2.6.32-754.29.2.el6.x86_64 ro root=UUID=eaff7b39-53a1-4e
e8-8556-a84550747a0d rd_NO_LUKS  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_MD crashkerne
l=auto LANG=zh_CN.UTF-8 rd_NO_LVM rd_NO_DM rhgb quiet
    initrd /initramfs-2.6.32-754.29.2.el6.x86_64.img
title Oracle Linux Server Unbreakable Enterprise Kernel (3.8.13-44.1.1.el6uek.x8
6_64)
    root (hd0,0)
    kernel /vmlinuz-3.8.13-44.1.1.el6uek.x86_64 ro root=UUID=eaff7b39-53a1-4
ee8-8556-a84550747a0d rd_NO_LUKS  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_MD crashkern
el=auto LANG=zh_CN.UTF-8 rd_NO_LVM rd_NO_DM rhgb quiet
    initrd /initramfs-3.8.13-44.1.1.el6uek.x86_64.img
title Oracle Linux Server Red Hat Compatible Kernel (2.6.32-504.el6.x86_64)
    root (hd0,0)
    kernel /vmlinuz-2.6.32-504.el6.x86_64 ro root=UUID=eaff7b39-53a1-4ee8-85
56-a84550747a0d rd_NO_LUKS  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_MD crashkernel=aut
o LANG=zh_CN.UTF-8 rd_NO_LVM rd_NO_DM rhgb quiet
    initrd /initramfs-2.6.32-504.el6.x86_64.img
[root@dog grub]#
[root@dog grub]#
[root@dog grub]# more grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/sda3
#          initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=1
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Oracle Linux Server Red Hat Compatible Kernel (2.6.32-754.29.2.el6.x86_64)
    root (hd0,0)
    kernel /vmlinuz-2.6.32-754.29.2.el6.x86_64 ro root=UUID=eaff7b39-53a1-4e
e8-8556-a84550747a0d rd_NO_LUKS  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_MD crashkerne
l=auto LANG=zh_CN.UTF-8 rd_NO_LVM rd_NO_DM rhgb quiet
    initrd /initramfs-2.6.32-754.29.2.el6.x86_64.img
title Oracle Linux Server Unbreakable Enterprise Kernel (3.8.13-44.1.1.el6uek.x8
6_64)
    root (hd0,0)
    kernel /vmlinuz-3.8.13-44.1.1.el6uek.x86_64 ro root=UUID=eaff7b39-53a1-4
ee8-8556-a84550747a0d rd_NO_LUKS  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_MD crashkern
el=auto LANG=zh_CN.UTF-8 rd_NO_LVM rd_NO_DM rhgb quiet
    initrd /initramfs-3.8.13-44.1.1.el6uek.x86_64.img
title Oracle Linux Server Red Hat Compatible Kernel (2.6.32-504.el6.x86_64)
    root (hd0,0)
    kernel /vmlinuz-2.6.32-504.el6.x86_64 ro root=UUID=eaff7b39-53a1-4ee8-85
56-a84550747a0d rd_NO_LUKS  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_MD crashkernel=aut
o LANG=zh_CN.UTF-8 rd_NO_LVM rd_NO_DM rhgb quiet
    initrd /initramfs-2.6.32-504.el6.x86_64.img
[root@dog grub]#
[root@dog grub]# vi  grub.conf
[root@dog grub]# ls  -l sp*
-rw-r--r--. 1 root root 1341 4月  28 2016 splash.xpm.gz
[root@dog grub]# cd -
/root
[root@dog ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        16G  7.3G  7.1G  51% /
tmpfs           499M  232K  498M   1% /dev/shm
/dev/sda1       488M   87M  377M  19% /boot
/dev/sr0        3.6G  3.6G     0 100% /media/OL6.6 x86_64 Disc 1 20141018
[root@dog ~]# ls -l /boot/in*
-rw-------. 1 root root 21083075 5月  16 08:10 /boot/initramfs-2.6.32-504.el6.x86_64.img
-rw-------. 1 root root 22944926 5月  16 08:10 /boot/initramfs-2.6.32-754.29.2.el6.x86_64.img
-rw-------. 1 root root 23225053 3月  24 12:13 /boot/initramfs-3.8.13-44.1.1.el6uek.x86_64.img

內核的初始化和init的初始化

內核的初始化

  • 內核在開機階段要做的主要操作如下:

    1. 發現(監測)計算機上有哪些設備
    2. 將這些設備的驅動程序初始化並載入到內核中
    3. 以只讀方式掛載根目錄文件系統
    4. 內核將載入Linux系統的第1個進程、即init進程
  • 接下來就由init進程接管系統、init進程(程序)首先要讀取/etc/inittab文件中的設定、並根據這些設定配置系統以完成系統的初始化

init的初始化

  • init進程初始化時要做的工作如下:
    1. 決定預設系統使用哪個run level (常用的有1 單用戶模式,3 完全的多用戶模式,5 它是X11,也就是XWindows模式)
      最後一行可以看到默認使用的是5,也就是使用X11(圖形界面)來啓動系統
      在這裏插入圖片描述
    2. init執行一些系統初始化腳本以初始化操作系統 (init會執行/etc/rc.d目錄中的rc.sysinit程序來初始化系統)

在這裏插入圖片描述
3. init根據run level設置執行對應目錄中程序以決定要啓動哪些服務
如果默認設定爲5,那麼就會將5這個參數傳給/etc/rc.d目錄中的rc這個程序,如下圖所示
在這裏插入圖片描述
在這裏插入圖片描述

  1. 設定某些組合鍵(如Ctrl+Alt+Delete鍵是,系統會執行shutdown命令)

  2. 定義UPS不間斷電源系統、即當電源出現問題時或電源恢復時要執行哪些程序

  3. 產生6個虛擬終端控制檯、即tty1~tty6

[root@dog ~]# more /etc/inittab
# inittab is only used by upstart for the default runlevel.
#
# ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# System initialization is started by /etc/init/rcS.conf
#
# Individual runlevels are started by /etc/init/rc.conf
#
# Ctrl-Alt-Delete is handled by /etc/init/control-alt-delete.conf
#
# Terminal gettys are handled by /etc/init/tty.conf and /etc/init/serial.conf,
# with configuration in /etc/sysconfig/init.
#
# For information on how to write upstart event handlers, or how
# upstart works, see init(5), init(8), and initctl(8).
#
# Default runlevel. The runlevels used are:
#   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
#   6 - reboot (Do NOT set initdefault to this)
#
id:5:initdefault:
[root@dog ~]# ls -l /etc/rc.d
總用量 64
drwxr-xr-x. 2 root root  4096 5月  16 08:13 init.d
-rwxr-xr-x. 1 root root  2617 5月  24 2019 rc
drwxr-xr-x. 2 root root  4096 5月  16 08:14 rc0.d
drwxr-xr-x. 2 root root  4096 5月  16 08:14 rc1.d
drwxr-xr-x. 2 root root  4096 5月  16 23:20 rc2.d
drwxr-xr-x. 2 root root  4096 5月  16 23:20 rc3.d
drwxr-xr-x. 2 root root  4096 5月  16 23:20 rc4.d
drwxr-xr-x. 2 root root  4096 5月  16 23:20 rc5.d
drwxr-xr-x. 2 root root  4096 5月  16 08:14 rc6.d
-rwxr-xr-x. 1 root root   220 5月  24 2019 rc.local
-rwxr-xr-x. 1 root root 20566 5月  24 2019 rc.sysinit

run levels(運行級別)

  • Linux系統中所有的運行級別以及每一個運行級別的功能如下:

在這裏插入圖片描述

run level 1、S和emergency都是單用戶模式、主要差別:

1. run level 1,執行init -> /etc/rc.sysinit -> /etc/rc1.d/*
2. run level S,執行init -> /etc/rc.sysinit
3. run level emergency,只執行/etc/rc.sysinit腳本中某些必要的程序

選擇使用哪一種run level

  • Linux使用哪個run level由init進程定義,可使用如下3種方式選擇使用哪一種run level:
    1. 開機時使用的run level預設在/etc/inittab文件中
    2. 從boot loader傳一個參數給Linux系統內核
    3. 在開機進入Linux系統後用init c命令進入指定的run level、c是run level 0~6、S及emergency
#用runlevel命令列出目前以及之前的run level
[root@dog ~]# runlevel
N 5

#使用init 3命令使系統的run level變爲3
[root@dog ~]# init 3

/etc/rc.d/rc.sysinit的工作

  • /etc/rc.d/rc.sysinit腳本要做的主要工作:
  1. 啓動熱插拔設備(udev),如USB設備、並且啓用SELinux
  2. 將內核(Kernel)的參數設定在/etc/sysctl.conf文件中
  3. 載入keymaps的設定、即定義鍵盤
  4. 啓用交換(分)區這個虛擬內存區
  5. 設定主機名、主機名在/etc/sysconfig/network文件中設定
  6. 檢查root文件系統、如沒問題重新掛載成可讀可寫狀態
  7. 啓用RAID磁盤陣列和LVM設備
  8. 啓用磁盤配額功能、即限制用戶最多可用多少磁盤空間
  9. 檢查並掛載其他的文件系統
    清除開機時用的臨時文件以及一些已經無用的目錄和文件

執行/etc/rc.d/rc*.d目錄中腳本

  • 根據run level設置決定執行/etc/rc.d目錄中所對應rc?.d子目錄中程序、以決定要停用和啓用哪些服務
  • 若系統默認run level是5,init進程會將5這個參數傳給/etc/rc.d/rc程序
  • 隨後程序/etc/rc.d/rc加上參數5會執行/etc/rc.d/rc5.d目錄中所有腳本來停用和啓用相關的服務
    在這裏插入圖片描述

守護進程

  • 守護進程是一個在後臺運行的一個程序、其主要功能是提供一些系統的服務
  • 所有在/etc/rc.d/init.d目錄中的程序全部都是在後臺運行的提供系統服務的程序,如httpd和vsftpd等
  • 在後臺運行的一個守護進程時刻等待一個請求
  • 當這個守護進程收到一個請求時,通常它會爲這個請求再生成一個子進程來專門爲這個請求服務,而原來那個守護進程(父進程)繼續等待下一個請求

守護進程的分類

  • 守護進程分成兩種類型:

    1. 獨立(Standalone)守護進程
    2. 臨時(Transient)守護進程,由超級守護進程(super daemon)控制的守護進程
  • 獨立守護進程工作方式:用戶或程序提出需求時,獨立守護進程會爲用戶或程序提供所需的服務

  • 臨時守護進程工作方式:用戶或程序提出需求時會向xinetd要求服務,隨後xinetd再調用相應臨時守護進程,最後再由該臨時守護進程爲用戶或程序提供所需服務

在這裏插入圖片描述

System V 腳本的特性

  • run level就是要定義計算機開機時啓動哪些服務
  • 每個run level都有它相對應的目錄、在/etc/rc.d目錄中可看到rc0.d~rc6.d的目錄,而這些目錄就是run level 0~6所對應的目錄。
  • 用來初始化系統的System V的腳本(程序)存放在/etc/rc.d/init.d目錄中
  • 每個run level所對應目錄中都存放了一些連接、而這些連接就是指向init.d目錄中的腳本
  • 每個連接都帶有start或stop參數、根據run level對應目錄中的連接就可設定系統啓動後提供哪些服務

System V服務的管理

  • System V的守護進程腳本(程序)有一個特性、即start和stop都使用一個腳本,只是在腳本(程序)後面加上不同的參數而已
  • 除了start和stop參數之外,在運行System V的腳本時還可以使用的一個參數就是status,即確定這個System V服務(進程)的狀態
[root@dog ~]# /etc/init.d/vsftpd status
vsftpd is stopped
[root@dog ~]# /etc/init.d/vsftpd start
Starting vsftpd for vsftpd:   OK  ]

/etc/rc.d/rc.local腳本

  • init進程在執行完run level所對應目錄中的連接後,就會執行/etc/rc.d/rc.local程序
  • 可使ls命令列出所有run level對應目錄中以local結尾的全部內容
[root@dog ~]# ls -l /etc/rc*.d/*local
lrwxrwxrwx  1 root root  11 Oct  8 17:40 /etc/rc2.d/S99local -> ../rc.local
lrwxrwxrwx  1 root root  11 Oct  8 17:40 /etc/rc3.d/S99local -> ../rc.local
lrwxrwxrwx  1 root root  11 Oct  8 17:40 /etc/rc4.d/S99local -> ../rc.local
lrwxrwxrwx  1 root root  11 Oct  8 17:40 /etc/rc5.d/S99local -> ../rc.local
-rwxr-xr-x  1 root root 220 Jun 24  2003 /etc/rc.d/rc.local

虛擬控制檯

  • init進程初始化系統的第4步爲執行/sbin/mingetty程序以啓動6個虛擬終端控制檯(virtual console)
  • virtual consoles具有如下幾點特性:
    1. 所有virtual consoles都是在/etc/inittab文件中定義
    2. 通過按Ctrl+Alt+F鍵使用或切換virtual console
    3. virtual console n所對應設備文件爲/dev/ttyn、n是自然數
    4. /dev/tty0代表目前使用的virtual console
    5. RHEL默認以下3種類型的virtual console設定:
      1. 總共定義了12個virtual consoles
      2. 只有1~6的virtual console可以登錄
      3. 如果使用X server,則使用virtual console 7、即tty7登錄

##管理和維護服務

  • 控制或啓動Linux操作系統服務的工具分爲兩大類:

    1. 控制Linux開機時默認自動啓動哪些服務的工具
    2. 開機之後手動地控制服務的停止和啓動的工具
  • 在第1種類型中有以下3個工具:

    1. Ntsysv:一個基於控制檯(終端)的交互類型工具,可在虛擬終端(命令行終端)上使用。默認只更改當前run level的服務設置,但通過使用–level選項可修改其他run level的服務設置
    2. Chkconfig:一個可在多數Linux系統上快速使用的命令行工具。在 chkconfig命令中使用–list參數而沒有服務名顯示所有System V 腳本在每一run level上啓動與停止列表
    3. system-config-service:一個圖形界面工具、只能在X Windows中執行
  • 在第2類工具中Linux系統也提供了以下3個工具手動控制服務的停止和啓動、即立即控制(改變)服務的運行狀態:

    1. Service:立即啓動和停用獨立類型的服務
    2. Chkconfig:立即啓動和停用xinetd進程所管理的服務
    3. system-config-service:一個圖形界面工具、只能在X Windows、即Linux系統圖形界面中使用
[root@dog ~]# service vsftpd status
vsftpd 已停
[root@dog ~]# service vsftpd rastart
Usage: /etc/init.d/vsftpd {start|stop|restart|try-restart|force-reload|status}
[root@dog ~]# service vsftpd restart
關閉 vsftpd:                                              [失敗]
爲 vsftpd 啓動 vsftpd:                                    [確定]
[root@dog ~]# service vsftpd status
vsftpd (pid 9649) 正在運行...
[root@dog ~]# chkconfig --list
NetworkManager     0:關閉    1:關閉    2:啓用    3:啓用    4:啓用    5:啓用    6:關閉
abrt-ccpp          0:關閉    1:關閉    2:關閉    3:啓用    4:關閉    5:啓用    6:關閉
abrtd              0:關閉    1:關閉    2:關閉    3:啓用    4:關閉    5:啓用    6:關閉
acpid              0:關閉    1:關閉    2:啓用    3:啓用    4:啓用    5:啓用    6:關閉
atd                0:關閉    1:關閉    2:關閉    3:啓用    4:啓用    5:啓用    6:關閉
......
基於 xinetd 的服務:
    chargen-dgram:     關閉
    chargen-stream:    關閉
    daytime-dgram:     關閉
    daytime-stream:    關閉
    discard-dgram:     關閉
    discard-stream:    關閉
  ......
[root@dog ~]# ls -l /etc/rc*.d/*sshd
lrwxrwxrwx. 1 root root 14 3月  24 12:08 /etc/rc0.d/K25sshd -> ../init.d/sshd
lrwxrwxrwx. 1 root root 14 3月  24 12:08 /etc/rc1.d/K25sshd -> ../init.d/sshd
lrwxrwxrwx. 1 root root 14 3月  24 12:08 /etc/rc2.d/S55sshd -> ../init.d/sshd
lrwxrwxrwx. 1 root root 14 3月  24 12:08 /etc/rc3.d/S55sshd -> ../init.d/sshd
lrwxrwxrwx. 1 root root 14 3月  24 12:08 /etc/rc4.d/S55sshd -> ../init.d/sshd
lrwxrwxrwx. 1 root root 14 3月  24 12:08 /etc/rc5.d/S55sshd -> ../init.d/sshd
lrwxrwxrwx. 1 root root 14 3月  24 12:08 /etc/rc6.d/K25sshd -> ../init.d/sshd
[root@dog ~]# chkconfig --list sshd
sshd               0:關閉    1:關閉    2:啓用    3:啓用    4:啓用    5:啓用    6:關閉
[root@dog ~]# chkconfig sshd --level 234 off
[root@dog ~]# chkconfig --list sshd
sshd               0:關閉    1:關閉    2:關閉    3:關閉    4:關閉    5:啓用    6:關閉
[root@dog ~]# ls -l /etc/rc*.d/*sshd
lrwxrwxrwx. 1 root root 14 3月  24 12:08 /etc/rc0.d/K25sshd -> ../init.d/sshd
lrwxrwxrwx. 1 root root 14 3月  24 12:08 /etc/rc1.d/K25sshd -> ../init.d/sshd
lrwxrwxrwx. 1 root root 14 5月  27 22:29 /etc/rc2.d/K25sshd -> ../init.d/sshd
lrwxrwxrwx. 1 root root 14 5月  27 22:29 /etc/rc3.d/K25sshd -> ../init.d/sshd
lrwxrwxrwx. 1 root root 14 5月  27 22:29 /etc/rc4.d/K25sshd -> ../init.d/sshd
lrwxrwxrwx. 1 root root 14 3月  24 12:08 /etc/rc5.d/S55sshd -> ../init.d/sshd
lrwxrwxrwx. 1 root root 14 3月  24 12:08 /etc/rc6.d/K25sshd -> ../init.d/sshd
[root@dog ~]# chkconfig sshd --level 234 on
[root@dog ~]# chkconfig sshd --list
sshd               0:關閉    1:關閉    2:啓用    3:啓用    4:啓用    5:啓用    6:關閉
[root@dog ~]# service sshd status
openssh-daemon (pid  2450) 正在運行...
[root@dog ~]# service sshd stop
停止 sshd:                                                [確定]
[root@dog ~]# service sshd status
openssh-daemon 已停
[root@dog ~]# service sshd start
正在啓動 sshd:                                            [確定]
[root@dog ~]# /etc/init.d/sshd stop
停止 sshd:                                                [確定]
[root@dog ~]# /etc/init.d/sshd start
正在啓動 sshd:                                            [確定]
[root@dog ~]# /etc/init.d/sshd reload
重新載入 sshd:                                            [確定]
[root@dog ~]# /etc/init.d/sshd restart
停止 sshd:                                                [確定]
正在啓動 sshd:                                            [確定]
[root@dog ~]# /etc/init.d/sshd status
openssh-daemon (pid  11218) 正在運行...
[root@dog ~]# chkconfig telnet -- list
chkconfig 版本 1.3.49.5 - 版權 (C) 1997-2000 Red Hat, Inc.
在 GNU 公共許可的條款下,本軟件可以被自由發行。


用法:   chkconfig [--list] [--type <type>] [name]
         chkconfig --add <name>
         chkconfig --del <name>
         chkconfig --override <name>
         chkconfig [--level <levels>] [--type <type>] <name> <on|off|reset|resetpriorities>
[root@dog ~]# chkconfig telnet --list
telnet             啓用
[root@dog ~]# chkconfig telnet off
[root@dog ~]# chkconfig telnet --list
telnet             關閉
[root@dog ~]# chkconfig telnet on
[root@dog ~]# chkconfig telnet --list
telnet             啓用

關閉系統

  • Oracle Linux系統提供以下4個關閉系統的命令:
    1. shutdown -h now:h是halt的第1個字母、now是時間表示立即關閉系統、也可輸入其他的時間
    2. halt:與shutdown相同,但是支持不同的參數,如-n參數表示在關機之前不做同步的操作,這樣關機的速度會快但可能會丟失數據
    3. poweroff:關閉系統同時也關閉計算機的電源
    4. init 0:就是進入run level 0做關機的操作
  • 使用以上任何命令關機之前,系統自動運行sync命令同步系統。sync命令的功能是強制將內存中已經變化的數據塊和超級數據塊寫回到硬盤中,這樣就可以避免數據的丟失

shutdown命令

  • 所有關機命令中shutdown功能最豐富、它有許多選項可選擇、利用–help可查看這些選項的用法。-k參數可能比較有用、使用這個參數時,shutdown命令並不真正關機而只是發一條警示信息
[root@dog ~]# shutdown -k now "Dog super server will shutdown at 23:30"
Broadcast message from root (pts/1) (Thu Mar 18 21:19:47 2010):
Dog super server will shutdown at 23:30                
The system is going down to maintenance mode NOW!  
Shutdown cancelled.    

重啓系統

  • Oracle Linux系統中提供了以下4個重新啓動Linux系統(也稱爲重新開機)的命令:
    1. shutdown -r now:r是reboot的第1個字母、即在shutdown之後,立即重新啓動(reboot)系統
    2. reboot:重新啓動系統
    3. init 6:進入run level 6做重新開機的操作
    4. 在虛擬終端(控制檯)上按Ctrl+Alt+Delete鍵
  • 許多UNIX和Linux的專業人員更喜歡init 6重啓系統就像喜歡init 0關機一樣,因爲看上去非常專業

解決問題的靈丹妙藥

  • 作爲操作系統管理員、當系統出現問題時千萬不要緊張,以下就是必須牢記的解決問題的靈丹妙藥:
    1. 檢查所有的連線是否都連好了
    2. 如果連線沒有問題,檢查所有的開關是否都開了
    3. 如果所有的開關也都開了,重啓系統
  • 通過以上的工作,一般多數的問題都會解決了
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章