系统的初始化和服务

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. 如果所有的开关也都开了,重启系统
  • 通过以上的工作,一般多数的问题都会解决了
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章