Linux启动引导程序
1、掌握linux启动过程
2、掌握grub的配置文件
3、掌握linux内核模块的管理
4、掌握linux服务分类和作用
一、Typore过程
1.1 CentOS6启动过程
centos6启动流程大致分为以下这些步骤:
1.加电自检,得到BIOS的硬件信息,获取第一个启动设备
2.读取第一个启动设备MBR的引导加载程序(grub)的启动信息-主引导记录,446+16x4+2主分区=512字节,
Windows:ntloader
linux:bootloader
3.加载核心操作系统的核心信息,核心开始解压缩,并尝试驱动所有的硬件设备
4.运行init程序
5.运行系统初始化脚本 /etc/rc.d/rc.sysinit
6.启动核心的外挂模块
7.init执行运行各个批处理文件
8.init执行/etc/rc.d/rc.local
9.执行/bin/login程序,等待用户登录
10.登陆之后,打印登陆提示符,并开始shell控制主机
下面我们来分别解释下每一步的具体细节
1.加电自检

当我们按下电源键后,rom芯片中的CMOS程序开始执行并检测CPU,内存等设备是否存在并正常运行,CMOS中的程序叫做 ,可以设置硬盘接口,网卡声卡开关之类的简单设置。一般PC主机板上会有一个纽扣电池,它的主要作用就是给BIOS供电,当系统由于突然停电或者其其他原因意外断电的时候,这个纽扣电池可以保证主板在断电后BIOS的一些基本设置不会被重置
2.读取MBR的启动信息
计算机不是人类,他的所有操作都是认为的事先设定好的,所以当启动计算机的时候,它并不知道系统放在哪里,我们需要告诉它,怎么告诉它呢,就是用程序引导它,这个程序叫做bootloader,不同的操作系统的bootloader是不同的,windos使用的bootloader是ntloader,只能对windos系统进行引导,而在linux中的bootloader叫做GRUB,它不仅可以对linux进行引导,也可以对windos进行引导,所以在装windos和linux双系统的电脑的时候,要先装windos再装linux。
MBR记录一般在磁盘0磁道0,1扇区,一共512个字节,前446个字节是Bootloder,后64个字节是存放分区信息的,一共四个分区,每个分区占用16个字节,最后两个字节是分区结束信息,一般是55AA.所以,当加点自检完成后,会启动bootloader也就是grub程序,他会引导计算机到磁盘的第一个扇区并加载MBR记录,然后按照MBR记录启动系统。
# GRUB 功能:
1. 加载操作系统的内核;
2. 拥有一个可以让用户选择的的菜单,来选择到底启动哪个系统;
3. 可以调用其他的启动引导程序,来实现多系统引导。
按照启动流程,BIOS 在自检完成后,会到第一个启动设备的 MBR 中读取 GRUB。在 MBR 中用来放置启动引导程序的空间只有 446 Byte,那么 GRUB 可以放到这里吗?答案是空间不够,GRUB 的功能非常强大,MBR 空间是不够使用的。那么 Linux 的解决办法是把 GRUB 的程序分成了三个阶段来执行。
# Stage 1:执行GRUB主程序
第一阶段是用来执行 GRUB 主程序的,这个主程序必须放在启动区中(也就是 MBR 或者引导扇区中)。但是 MBR 太小了,所以只能安装 GRUB 的最小的主程序,而不能安装 GRUB 的相关配置文件。这个主程序主要是用来启动 Stage 1.5 和 Stage 2 的。
# Stage 1.5:识别不同的文件系统
Stage 2 比较大,只能放在文件系统中(分区),但是 Stage 1 不能识别不同的文件系统,所以不能直接加载 Stage 2。这时需要先加载 Stage 1.5,由 Stage 1.5 来加载不同文件系统中的 Stage 2。
还有一个问题,难道 Stage 1.5 不是放在文件系统中的吗?如果是,那么 Stage 1 同样不能找到 Stage 1.5。其实,Stage 1.5 还真没有放在文件系统中,而是在安装 GRUB 时,直接安装到紧跟 MBR 之后的 32KB 的空间中,这段硬盘空间是空白无用的,而且是没有文件系统的,所以 Stage 1 可以直接读取 Stage 1.5。读取了 Stage 1.5 就能识别不同的文件系统,才能加载 Stage 2。
# Stage 2:加载GRUB的配置文件
Stage 2 阶段主要就是加载 GRUB 的配置文件 /boot/grub/grub.conf,然后根据配置文件中的定义,加载内核和虚拟文件系统。接下来内核就可以接管启动过程,继续自检与加载硬件模块了。
grub.conf的文件
default=1 # 默认启动的内核title, 0 表示是1个
timeout=5 # 默认等待时间
splashimage=(hd0,0)/grub/splash.xpm.gz # 指定菜单的背景图片的路径。为xpm格式,采用gzip压缩,只能为14bits色
hiddenmenu # 隐藏菜单
title CentOS (2.6.32-358.el6.x86_64) # 标题名称,用户可自定义
root (hd0,0) # 指定 grub 的根位置
# 指定 kernel 文件的位置,还要指出 root(Typore后) 的位置,挂载方式 ro,这项很关键。
# 加载后会启动 init 进程。
kernel /vmlinuz-2.6.32-358.el6.x86_64 ro root=/dev/mapper/vg0-root rd_NO_LUKS rd_NO_DM LANG=en_US.UTF-8 rd_LVM_LV=vg0/swap rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=vg0/root KEYBOARDTYPE=pc KEYTABLE=us rhgb crashkernel=auto quiet rhgb quiet
# 在内核启动过程中装载根文件系统时有用
initrd /initramfs-2.6.32-358.el6.x86_64.img
initramfs-2.6.32-358.el6.x86_64.img的本质
# initramfs 是以 gzip 压缩的 cpio 格式的文件。内核启动时将他作为一个临时的根文件系统。
# grub 的 stage2 将initrd加载到内存里,然后将其中的内容释放到内存中,
# 内核便去执行init脚本,这时内核将控制权交给了init文件处理。
# init 它也主要是加载各种存储介质相关的设备驱动程序。当所需的驱动程序加载完后,会创建一个根设备,然后将根文件系统rootfs以只读的方式挂载。
# 这一步结束后,释放未使用的内存,转换到真正的根文件系统上面去,同时运行/sbin/init程序,
# 执行系统的1号进程。此后系统的控制权就全权交给/sbin/init进程了。
3.加载核心信息,尝试驱动所有的硬件设备

当加载完MBR的启动信息后,系统会进行自身初始化,首先它会侦测所有可识别到的 硬件设备,然后会借助于ramdisk加载硬件驱动程序,接着以只读方式挂载根文件系统,最后运行用户空间的第一个程序/sbin/init。那么,什么是ramdisk呢? ramdisk是内核中的特性之一,它使用缓冲和缓冲加速来对硬盘上的文件进行访问,并且加载相应的硬件驱动程序。
4.运行init程序
init程序是Typore的时候,第一个运行的程序(pid 1),我们都知道任何程序都有自己的父程序,一旦父程序被关闭,那么该程序也将无法运行,而init程序就是系统中所有程序的主程序。
4.1、读取/etc/inittab来读取默认级别 :
修改Typore级别:
# 启动级别:(runlevel)
# 0:关机
# 1:单用户模式
# 2:多用户模式,不支持 NFS 功能
# 3:完全多用户模式,支持文本接口
# 4:预留模式
# 5:完全多用户模式,支持图形模式
# 6:关机
# /etc/inittab文件格式如下,这是遵循了CentOS5的风格。
id:3:initdefault:
4.2 、运行系统初始化脚本
当init程序启动后,它做的第一件事就是运行 /etc/rc.d/rc.sysinit,也就是系统初始化脚本,那么运行这个脚本能做什么呢?
(1) 设置主机名
(2) 设置欢迎信息
(3) 激活udev和selinux
(4) 挂载/etc/fstab文件中定义的文件系统
(5) 检测根文件系统,并以读写方式重新挂载根文件系统
(6) 设置系统时钟
(7) 激活swap设备
(8) 根据/etc/sysctl.conf文件设置内核参数
(9) 激活lvm及software raid设备
(10) 加载额外设备的驱动程序
(11) 清理操作
4.3、init执行运行各个批处理文件
当核心的外挂模块被启动后,init会执行各个批处理文件,这些批处理文件位于如下目录中
这些文件夹分别对应级别0到级别6,我们进入rc3.d中查看有哪些文件 , 而如果我们使用ls -al命令查看,可以发现这些文件其实都是软连接

# 这里面的脚本大致分为 2 类,以 S 开头的和以 K 开头的脚本。
# S 代表开机时启动的,K 表示开机时不启动。
# 每个文件的命名格式,例如:S01sysstat S 开机启动 01 启动次序 sysstat 启动脚本名
# 启动的定义是在每个脚本中定义的:例如
# chkconfig: - 85 15
默认级别 启动次序 不启动次序
这些脚本是否能开启自启动,是由chkconfig来管理的
# 常用选项:
# chkconfig --add SRV_SCRIPT 可以将自己写的一些脚本,让此命令统一管理。例如:chkconfig --add httpd
# chkconfig --del SRV_SCRIPT 将服务删除,意思就是服务不由chkconfig这种机制来管理
# chkconfig SRV_SCRIPT {on|off} 设置服务开机是否自启动,默认管理的级别是2345.
# --level 2345 等,指定默认级别,可以与其他选项一起使用
4.4、执行rc.local文件
rc.local也是一个脚本。该脚本是在系统初始化级别脚本运行之后再执行的,因此我们可以安全地在里面添加在Typore之后执行的脚本。例如的我们可以在里面添加fstab挂载脚本。此外,我们可以在里面添加一些调试用的脚本命令。 rc.local脚本是在启动过程中较后执行的,在正常级别下,最后一个启动服务S99local是指向rc.local脚本,我们可以将不方便或者不需要写为服务脚本的脚本放置于rc.local文件中,他是用户自定义的一些设置.
5.执行/bin/login程序,等待用户登录出现登陆界面,选择用户后,输入登录密码即可登录
6.登陆之后,打印登陆提示符,并开始shell控制主机
启动过程图

MBR:主引导记录
1.2 CentOS 7 启动流程
第一步、硬件启动阶段
1.加电自检
当我们按下电源键后,rom芯片中的CMOS程序开始执行并检测CPU,内存等设备是否存在并正常运行,CMOS中的程序叫做 ,可以设置硬盘接口,网卡声卡开关之类的简单设置。一般PC主机板上会有一个纽扣电池,它的主要作用就是给BIOS供电,当系统由于突然停电或者其其他原因意外断电的时候,这个纽扣电池可以保证主板在断电后BIOS的一些基本设置不会被重置。
2.读取MBR的启动信息
计算机不是人类,他的所有操作都是认为的事先设定好的,所以当启动计算机的时候,它并不知道系统放在哪里,我们需要告诉它,怎么告诉它呢,就是用程序引导它,这个程序叫做bootloader,不同的操作系统的bootloader是不同的,windos使用的bootloader是ntloader,只能对windos系统进行引导,而在linux中的bootloader叫做GRUB,它不仅可以对linux进行引导,也可以对windos进行引导,所以在装windos和linux双系统的电脑的时候,要先装windos再装linux。
Linux在安装的时候,你可以选择将引导加载程序安装在MBR或个别分区的启动扇区,而且Linux的loader可以手动设置菜单,所以你可以在Linux的boot Loader里面加入Windows开机的选项。
Windows在安装的时候,它的安装程序会主动覆盖掉MBR以及自己所在分区的启动扇区,你没有选择的机会,而且它没有让我们自己选择菜单的功能。
第二步、GRUB2引导阶段
从这一步开始,CentOS6和CentOS7的启动流程区别开始展现出来了。CentOS7的主引导程序使用的是grub2。
简单说一下这一步的流程:显示加载两个镜像,再加载MOD模块文件,把grub2程序加载执行,接着解析配置文件/boot/grub/grub.cfg,根据配置文件加载内核镜像到内存,之后构建虚拟根文件系统,最后转到内核。
在这里grub.cfg配置文件已经比较复杂了,但并不用担心,到了CentOS7中一般是使用命令进行配置,而不直接去修改配置文件了。不过我们可以看到grub.cfg配置文件开头注释部分说明了由/etc/grub.d/目录下文和/etc/default/grub文件组成。
一般修改好配置后都需要使用命令grub2-mkconfig -o /boot/grub2/grub.cfg,将配置文件重新生成。
第三步、内核引导阶段
这一步与CentOS6也差不多,加载驱动,切换到真正的根文件系统,唯一不同的是执行的初始化程序变成了/usr/lib/systemd/systemd
第四步、systemed初始化阶段
CentOS7中我们的初始化进程变为了systemd。执行默认target配置件/etc/systemd/system/default.target(这是一个软链接,与默认运行级别有关)。然后执行sysinit.target来初始化系统和basic.target来准备操作系统。接着启动multi-user.target下的本机与服务器服务,并检查/etc/rc.d/rc.local文件是否有用户自定义脚本需要启动。最后执行multi-user下的getty.target及登录服务,检查default.target是否有其他的服务需要启动。
注意:/etc/systemd/system/default.target指向了/lib/systemd/system/目录下的graphical.target或multiuser.target。而graphical.target依赖multiuser.target,multiuser.target依赖basic.target,basic.target依赖sysinit.target,所以倒过来执行。
扩展:
sysvinit: System V 风格的 init 系统.按部就班的完成初始化任务和关闭系统任务。优点是概念简单。特别是服务(service)的配置,只需要把启动/停止服务的脚本链接接到合适的目录就可以了。另一个重要优点是确定的执行顺序,脚本严格按照顺序执行(sysvinit 靠脚本来初始化系统),一个执行完毕再执行下一个,这非常有益于错误排查。缺点也是完全顺序执行任务,启动慢。不能很好的处理即插即用的设备,对网络共享磁盘的挂载也存在一定的问题。
upstart: 基于事件机制,完美地解决了即插即用设备带来的新问题。加快了Typore时间,很多不相关的应用可以并行启动。
systemd: systemd 和 ubuntu 的 upstart 是竞争对手,但是时至今日 ubuntu 也采用了 systemd,所以 systemd 在竞争中胜出,大有一统天下的趋势,systemd 的很多概念都来源于苹果 Mac OS 操作系统上的 launchd。systemd 的优点是功能强大,使用方便.启动速度非常快,会尽可能启动跟梢的进程,尽可能将更多的进程并行执行。缺点是体系庞大,非常复杂

总结:
UEFi或BIOS初始化,运行POST开机自检
选择启动设备
引导装载程序, centos7是grub2
加载装载程序的配置文件:/etc/grub.d/ /etc/default/grub /boot/grub2/grub.cfg
加载initramfs驱动模块(可以实现根文件系统挂载)
加载内核选项
内核初始化,centos7使用systemd代替init
执行initrd.target所有单元,包括挂载/etc/fstab
从initramfs根文件系统切换到磁盘根目录
systemd执行默认target配置,配置文件/etc/systemd/system/default.target
systemd执行sysinit.target初始化系统及basic.target准备操作系统
systemd启动multi-user.target下的本机与服务器服务
systemd执行multi-user.target下的/etc/rc.d/rc.local
Systemd执行multi-user.target下的getty.target及登录服务
systemd执行graphical需要的服务
二、Liux内核模块管理
Linux 的内核会在启动过程中自动检验和加载硬件与文件系统的驱动。一般这些驱动都是用模块的形式加载的,使用模块的形式保存驱动,可以不直接把驱动放入内核,有利于控制内核大小。
模块的全称是动态可加载内核模块,它是具有独立功能的程序,可以被单独编译,但不能独立运行。模块是为内核或其他模块提供功能的代码集合。这些模块可以是 Linux 源码中自带的,也可以是由硬件厂商开发的(可以想象成驱动)。不过内核因为发布时间较长,所以自带的模块可能版本较低,还有一些新硬件可能就不自带模块了,只能由硬件厂商在发布硬件的同时发布新模块。
安装模块一般有2种方法
- 第一种方法在编译内核时,手工调整内核模块功能,加入所需的模块。这种方法有一个问题,就是内核必须支持这个硬件或功能才可以通过编译内核加入模块。如果硬件比内核新,内核本身并不支持硬件,就不能通过重新编译内核来加入新的硬件的支持。
- 第二种方法就是下载厂商发布的新硬件的驱动模块,或下载驱动程序,再编译成驱动模块,然后手工安装。
如果是新硬件的驱动,则可以到硬件官方网站下载内核驱动或内核模块。
如果下载的是内核模块,则直接安装即可。
如果下载的是内核驱动源码,则只需要编译源码包,就会生成模块(具体编译过程和源码包安装非常类似,可以查看驱动的说明)。
如果需要加入的模块不是硬件的驱动,而只是内核中的某项功能,那么,只要部分重新编译内核,就可以生成新功能的模块(我们会通过 NTFS 文件系统支持来学习这种方法),然后安装这个模块即可。
内核模块保存位置与模块保存文件
# 内核模块保存位置
# CentOS 7
[root@test ~]# cd /lib/modules/3.10.0-693.el7.x86_64/kernel
[root@test kernel]# ls
arch crypto drivers fs kernel lib mm net sound virt
arch
# 与硬件相关的模块
crypto
#内核支持的加密技术的相关模块
drivers
#硬件的驱动程序模块,如显卡、网卡等
fs
#文件系统模块,如 fat、vfat、nfs等
lib
#函数库
net
#网络协议相关模块
sound
#音效相关模块
Linux 中所有的模块都存放在 /lib/modules/3.10.0-693.el7.x86_64/modules.dep 文件中,在安装模块时,依赖这个文件査找所有的模块,所以不需要指定模块所在位置的绝对路径,而且也依靠这个文件来解决模块的依赖性。
如果这个文件丢失了怎么办?不用担心,使用 depmod 命令会自动扫描系统中已有的模块,并生成 modules.dep 文件。
命令格式如下:
[root@test 3.10.0-693.el7.x86_64]# depmod
# 不加选项,depmod命令会扫描系统中的内核模块,并写入modules.dep文件
选项:
-a:扫描所有模块
-A:扫描新模块,只有有新模块时,才会更新modules.dep文件
-n:把扫描结果不写入modules.dep文件,而是输出到屏幕上
# 测试:删除 modules.dep 文件 ,重新生成
[root@test 3.10.0-693.el7.x86_64]# pwd
/lib/modules/3.10.0-693.el7.x86_64
[root@test 3.10.0-693.el7.x86_64]# rm -rf modules.dep
[root@test 3.10.0-693.el7.x86_64]# depmod # 重新扫描模块
[root@test 3.10.0-693.el7.x86_64]# ll modules.dep
-rw-r--r--. 1 root root 268794 6月 30 14:43 modules.dep
内核模块的查看
# 使用 lsmod 命令可以查看系统中安装了哪些内核模块.
[root@test ~]# lsmod
Module Size Used by
vmw_vsock_vmci_transport 30577 1
vsock 35327 2 vmw_vsock_vmci_transport
nls_utf8 12557 1
ppdev 17671 0
isofs 39844 1
# Module:模块名
# Size:模块大小
# Used by:模块是否被其他模块调用
# 查看模块的说明
[root@test ~]# modinfo ttm
filename: /lib/modules/3.10.0-693.el7.x86_64/kernel/drivers/gpu/drm/ttm/ttm.ko.xz
license: GPL and additional rights
description: TTM memory manager subsystem (for DRM device)
author: Thomas Hellstrom, Jerome Glisse
rhelversion: 7.4
srcversion: 25FBB1F8FD25DF833C002F7
depends: drm
intree: Y
vermagic: 3.10.0-693.el7.x86_64 SMP mod_unload modversions
signer: CentOS Linux kernel signing key
sig_key: DA:18:7D:CA:7D:BE:53:AB:05:BD:13:BD:0C:4E:21:F4:22:B6:A4:9C
sig_hashalgo: sha25
# 可以看到模块名,来源和简易说明
内核模块的添加与删除
如果模块已经下载到本机了,那么安装模块的方法非常简单。首先需要把模块复制到指定位置,一般复制到 /lib/modules/3.10.0-693.el7.x86_64/kernel 目录中,模块的扩展名一般是 *.ko;然后需要执行 depmod 命令扫描这些新模块,并写入 modules.dep 文件;最后就可以利用 modprobe 命令安装这些模块了。
命令格式如下:
# modprobe [选项] 模块名
选项:
-I:列出所有模块的文件名,依赖 modules.dep 文件
-f:强制加载模块
-r:删除模块
-c:查看内核中所有模块以及别名的命令
# 删除模块
# modprobe -r vfat
演示安装ip_vs的模块

安装模块

删除模块:

三、Linux 服务分类
3.1 分类
linux中的服务可以按照安装方法的不同分为:RPM 包默认安装的服务和源码包安装的服务,RPM包默认安装的服务又因为启动和自启动管理的方法不同分为独立的服务和基于xinted的服务
我们知道,Linux 中常见的软件包有两种:一种是 RPM 包;另一种是源码包。那么,通过 RPM 包安装的系统服务就是 RPM 包默认安装的服务(因为 Linux 光盘中全是 RPM 包,Linux 系统也是通过 RPM 包安装的,所以我们把 RPM 包又叫作系统默认包),通过源码包安装的系统服务就是源码包安装的服务。
源码包是开源的,自定义性强,通过编译安装更加适合系统,但是安装速度较慢,编译时容易报错。RPM 包是经过编译的软件包,安装更快速,不易报错,但不再是开源的。源码包安装需要先通过编译成计算机能识别的二进制文件才能安装,rpm包不需要编译就可直接安装,因为它本身就是二进制的
两者的区别
最主要的区别就是安装位置不同,源码包安装到我们手工指定的位置当中,而 RPM 包安装到系统默认位置当中(可以通过"rpm -ql 包名"命令查询)。也就是说,RPM 包安装到系统默认位置,可以被服务管理命令识别;但是源码包安装到手工指定位置,当然就不能被服务管理命令识别了(可以手工修改为被服务管理命令识别)。
所以,RPM 包默认安装的服务和源码包安装的服务的管理方法不同,我们把它们当成不同的服务分类。服务分类说明如下。
RPM 包默认安装的服务。这些服务是通过 RPM 包安装的,可以被服务管理命令识别。
这些服务又可以分为两种:
- 独立的服务:就是独立启动的意思,这种服务可以自行启动,而不用依赖其他的管理服务。因为不依赖其他的管理服务,所以,当客户端请求访问时,独立的服务响应请求更快速。目前,Linux 中的大多数服务都是独立的服务,如 apache 服务、FTP 服务、Samba 服务等。
- 基于 xinetd 的服务:这种服务就不能独立启动了,而要依靠管理服务来调用。这个负责管理的服务就是 xinetd 服务。xinetd 服务是系统的超级守护进程,其作用就是管理不能独立启动的服务。当有客户端请求时,先请求 xinetd 服务,由 xinetd 服务去唤醒相对应的服务。当客户端请求结束后,被唤醒的服务会关闭并释放资源。这样做的好处是只需要持续启动 xinetd 服务,而其他基于 xinetd 的服务只有在需要时才被启动,不会占用过多的服务器资源。但是这种服务由于在有客户端请求时才会被唤醒,所以响应时间相对较长。
源码包安装的服务。这些服务是通过源码包安装的,所以安装位置都是手工指定的。由于不能被系统中的服务管理命令直接识别,所以这些服务的启动与自启动方法一般都是源码包设计好的。每个源码包的启动脚本都不一样,一般需要查看说明文档才能确定
3.2 查询已安装的服务
# 查看服务自启动状态,显示所有 RPM 包安装的服务
[root@test ~]# chkconfig --list
注:该输出结果只显示 SysV 服务,并不包含
原生 systemd 服务。SysV 配置数据
可能被原生 systemd 配置覆盖。
要列出 systemd 服务,请执行 'systemctl list-unit-files'。
查看在具体 target 启用的服务请执行
'systemctl list-dependencies [target]'。
mysql 0:关 1:关 2:开 3:开 4:开 5:开 6:关
netconsole 0:关 1:关 2:关 3:关 4:关 5:关 6:关
network 0:关 1:关 2:开 3:开 4:开 5:开 6:关
# 源码包安装的服务
一般在 /usr/local 下
# RPM 和源码包安装的区别
1. 源码包安在指定的位置 --> 一般在 /usr/local 下
2. RPM 包安装在默认位置下
3.3 基于xinetd的服务管理
基于 xinetd 的服务没有自己独立的启动脚本程序,是需要依赖 xinetd 的启动脚本来启动的。xinetd 本身是独立的服务,所以 xinetd 服务自己的启动方法和独立服务的启动方法是一致的。
但是,所有基于 xinetd 这个超级守护进程的其他服务就不是这样的了,必须修改该服务的配置文件,才能启动基于 xinetd 的服务。所有基于 xinetd 服务的配置文件都保存在 /etc/xinetd.d/ 目录中。
我们使用 Telnet 服务来举例。Telnet 服务是用来进行系统远程管理的,端口是 23。不过需要注意的是,Telnet 服务的远程管理数据在网络中是明文传输的,非常不安全,所以在生产服务器上是不建议启动 Telnet 服务的。在生产服务器上,远程管理使用的是 ssh 协议,ssh 协议是加密的,更加安全。
Telnet 服务也是分为"客户端/服务器端"的,其中服务器端是用来启动 Telnet 服务的,并不安全;客户端是用来连接服务器端或测试服务器的端口是否开启的,在实际工作中我们主要使用 Telnet 客户端来测试远程服务器开启了哪些端口
虽然 Telnet 服务不安全,但 Telnet 服务是基于 xinetd 的服务,我们使用 Telnet 服务来学习一下基于 xinetd 服务的启动管理。在目前的 Linux 系统中,Telnet 的服务器端都是不安装的,如果进行测试,则需要手工安装。安装命令如下:


接下来我们就要启动 Telnet 服务了。既然基于 xinetd 服务的配置文件都在 /etc/xinetd.d/ 目录中,那么 Telnet 服务的配置文件就是 /etc/xinetd.d/telnet。我们打开这个文件看看,如下

内容解释
service telnet
#服务的名称为telnet
{
flags = REUSE
#标志为REUSE,设定TCP/IP socket可重用
socket_type = stream
#使用 TCP协议数据包
wait = no
#允许多个连接同时连接
user = root
#启动服务的用户为root
server = /usr/sbin/in.telnetd
#服务的启动程序
log_on_failure += USERID
#登录失败后,记录用户的ID
disable = yes
#服务不启动
}
如果想要启动 Telnet 服务,则只需要把 /etc/xinetd.d/telnet 文件中的"disable=yes"改为"disable=no"即可,"disable"代表取消,"disable=yes"代表取消是 yes,当然不启动服务;"disable=no"代表取消是 no,当然就是启动服务了。

接下来启动一下xinetd即可启动telnet的服务


5、基于xientd 服务的自启动
基于 xinetd 服务的自启动管理有两种方法,分别是通过 chkconfig 命令管理自启动和通过 ntsysv 命令管理自启动。但是不能通过修改 /etc/rc.d/rc.local 配置文件来管理自启动,因为基于 xinetd 的服务没有自己的启动脚本程序。
使用 chkconfig 命令管理自启动
chkconfig 自启动管理命令可以管理所有 RPM 包默认安装的服务,所以也可以用来管理基于 xinetd 服务的自启动。命令格式如下:
[root@localhost ~]# chkconfig 服务名 on|off
#基于xinetd的服务没有自己的运行级别,而依靠xinetd服务的运行级别,所以不用指定--level选项
例如:
[root@localhost ~]# chkconfig telnet on
#启动Telnet服务的自启动
[root@localhost ~]# chkconfig --list|grep telnet
telnet:启用
#查看服务的自启动,Telnet服务变为了"启用"
[root@localhost ~]# chkconfig telnet off
#关闭Telnet服务的自启动
[root@localhost ~]# chkconfig --list|grep telnet
telnet:关闭
#查看服务的自启动,Telnet服务变为了 "关闭"
6、基于源码安装的服务的管理
源码包服务中所有的文件都会安装到指定目录当中,并且没有任何垃圾文件产生(Linux 的特性),所以服务的管理脚本程序也会安装到指定目录中。源码包服务的启动管理方式就是在服务的安装目录中找到管理脚本,然后执行这个脚本。这里我们以http源码安装为例

编译安装httpd,安装目录为/usr/local/http2


查看服务的安装情况

启动服务

此时服务并不能被自启动,每次启动服务器还需要我们手动来启动一次服务,我们可以将http服务添加进/etc/rc.d/rc.local中,让服务开机就能启动

[root@localhost rc.d]# chmod 755 rc.local
注意:这里记得给rc.local服务755的权限,否则不能正常运行
最后我们重启验证服务是否能开机自启动;

四、Linux 系统服务管理
4.1 由来
历史上,Linux 的启动一直采用[init]进程。
下面的命令用来启动服务。
$ sudo /etc/init.d/apache start # 或者 $ service apache start
这种方法有两个缺点。
一是启动时间长。init进程是串行启动,只有前一个进程启动完,才会启动下一个进程。
二是启动脚本复杂。init进程只是执行启动脚本,不管其他事情。脚本需要自己处理各种情况,这往往使得脚本变得很长。
4.2 Systemd 概述
Systemd 就是为了解决这些问题而诞生的。它的设计目标是,为系统的启动和管理提供一套完整的解决方案。
根据 Linux 惯例,字母d是守护进程(daemon)的缩写。 Systemd 这个名字的含义,就是它要守护整个系统。

(上图为 Systemd 作者 Lennart Poettering)
使用了 Systemd,就不需要再用init了。Systemd 取代了initd,成为系统的第一个进程(PID 等于 1),其他进程都是它的子进程。
$ systemctl --version
上面的命令查看 Systemd 的版本。
Systemd 的优点是功能强大,使用方便,缺点是体系庞大,非常复杂。事实上,现在还有很多人反对使用 Systemd,理由就是它过于复杂,与操作系统的其他部分强耦合,违反"keep simple, keep stupid"的Unix 哲学。

(上图为 Systemd 架构图)
4.3 系统管理
Systemd 并不是一个命令,而是一组命令,涉及到系统管理的方方面面。
4.3.1 systemctl
systemctl是 Systemd 的主命令,用于管理系统。
# el7 # el6
启动:systemctl start name.service /etc/init.d/name start
停止:systemctl stop name .service /etc/init.d/name stop
重启:systemctl restart name.service /etc/init.d/name restart
状态:systemctl status name.service /etc/init.d/name status
重载:systemctl reload name.service /etc/init.d/name reload
开机自启动:systemctl enable name.service chkconfig name on
# 设置开机自启动,其实就是在/etc/systemd/system/multi-user.target.wants/下创建执行/usr/lib/systemd/system/下的配置文件的软连接
开机不启动:systemctl disable name.service chkconfig name off
# 查看当前系统中全部已经被激活的 unit
systemctl list-unit-files --type service 或者 chkconfig
# disabled:禁止开机自动启动
# enabled:开机自动启动
# static:该unit不能独立运行,是其他unit所依赖的
# 查看某服务是否开机自启
systemctl is-enabled name.service
# 查看服务的依赖关系
systemctl list-dependencies name.service
# 禁止设定为开机自启
systemctl mask name.service
# 取消禁止设定为开机自启
systemctl unmask name.service
systemctl reboot #重启系统
systemctl poweroff #关闭系统,切断电源
systemctl halt #CPU停止工作
systemctl suspend #暂停系统
systemctl rescue #启动进入救援状态(单用户模式)
4.3.2 systemd-analyze
systemd-analyze #查看启动耗时
systemd-analyze blame #查看每个服务的启动耗时
systemd-analyze critical-chain #显示瀑布状的启动过程流
4.3.3 hostnamectl
hostnamectl #命令用于查看当前主机的基本信息。
4.3.4 localectl
localectl #命令用于查看本地化设置
4.3.5 timedatectl
timedatectl #命令用于查看当前的时区、时间。
timedatectl #显示所有可用的时区
timedatectl list-timezones
4.3.6 loginctl
loginctl #命令用于查看当前登录的用户或连接的会话。
loginctl list-users #查看当前登录的用户
loginctl show-user root #查看某个登录用户的信息
4.4 unit
CentOS7中新增了unit(单元)的概念,它是所有资源的统称
# unit的配置文件是unit的核心,在配置文件中主要包含
1. 需要管理服务或者程序
2. 服务或者程序需要监听的套接字
3. 保存的系统快照(就是制作快照的时候,系统中各个服务的状态)
4. 其他和init相关的配置
# unit配置文件的位置
/lib/systemd/system 本地配置的系统单元
/run/systemd/system 运行时配置的系统单元
/usr/lib/systemd/system 第三方软件的系统单元(sshd,nginx..)
# 注意:unit(单元)和init中的服务脚本类似,但是不相同 #
# 类型1:
service unit,这是服务类型的unit,该类unit后缀是 .service,比如nginx.service,通过这个unit可以实现启动、关闭、查看状态等
# 该类unit位于 /usr/lib/systemd/system
注意:unit本质上来说并不是脚本,而仅仅是systemd一个配置文件,因此这个unit文件不具有执行权限,而且也无法执行
# 启动服务的方式:通过让systemd去读取配置文件中的内容,完成nginx进程的启动
# 类型2-8:
类型2:device unit,这是设备unit,该类unit的后缀是.device,这类unit的作用是用来识别设备文件
类型3:mount unit,后缀 .mount,用来实现挂载文件系统到指定的挂载点
类型4:socket unit,后缀.socket,用来表示进程间通信的socket文件
类型5:snapshot nuit:快照unit,后缀.snapshot, 用来管理快照
类型6:target unit:目标unit,后缀是 .target,模拟centos5、6上的运行级别(主要是为了向后兼容)
类型7:swap unit
类型8:path unit
4.4.1 unit 状态查看
systemctl status
# 查看当前系统中的unit状态
systemctl status sshd.service
# 查看指定的sshd.service的状态
systemctl is-active sshd.service
# 查看某个 Unit 是否正在运行
systemctl is-failed sshd.service
# 查看某个 Unit 是否处于关闭状态
systemctl is-enabled sshd.service
# 查看某个 Unit 是否开启了自启动状态
4.4.2 unit的管理
unit的管理,主要是对service(服务)的管理,如服务的启动、关闭、重启、自启动等。
在旧版本的CentOS6中,对于RPM包安装的服务的管理,主要是通过service命令和chkconfig命令来管理。如:
service network start|stop|status|restart|reload|force-reload
# 网络服务的启动|关闭|状态|重启|重新加载配置文件|强制重新加载配置文件
chkconfig network on|off
# 开启|关闭网络服务的自启动
在CentOS7中,对于RPM包安装的服务的管理,可以采用systemctl命令来管理,同时,向下兼容service命令和chkconfig命令。
systemctl start|stop|status|restart|reload|force-reload network
# 网络服务的启动|关闭|状态|重启|重新加载配置文件|强制重新加载配置文件
systemctl enable|disable network
# 开启|关闭网络服务的自启动
systemctl daemon-reload
# 重载所有修改过的配置文件
4.4.3 unit的配置文件
每一个 unit 都有一个配置文件,告诉 systemd 怎么启动这个 unit 。
systemd 默认从目录/etc/systemd/system/读取配置文件。但是,里面存放的大部分文件都是符号链接,指向目录/usr/lib/systemd/system/中的配置文件,真正的配置文件存放在/usr/lib/systemd/system/目录中。
systemctl enable命令,用于在上面两个目录之间,建立符号链接。
systemctl disable命令,用于在上面两个目录之间,撤销符号链接
systemctl list-unit-files
# 列出所有unit的配置文件
systemctl list-unit-files --type=service
systemctl list-units --type=service --all
# 列出所有服务的配置文件
systemctl cat network.service
# 查看network服务的配置文件的内容
# 说明:末尾的.service可以省略,默认就是查看服务类型的unit。
4.5 target
Typore时,需要启动大量的 unit。如果每一次启动,都要写明本次启动需要哪些 unit,显然非常不方便。于是,在CentOS7中,又引入了target的概念。
target 就是一个 unit 组,包含许多相关的 unit 。启动某个 target 的时候,systemd 就会启动里面所有的 unit。从这个意义上说,target 类似于”状态点”,启动某个 target 就好比启动到某种状态。
传统的init启动模式里面,有 runlevel (系统运行级别)的概念,跟 target 的作用很类似。不同的是,runlevel 是互斥的,不可能多个 runLevel 同时启动,但是多个 target 可以同时启动。
systemctl list-unit-files --type=target
# 查看当前系统的所有target
systemctl list-dependencies multi-user.target
# 查看某个target包含的所有unit
systemctl get-default
# 查看启动时的默认target
systemctl set-default multi-user.target
# 设置启动时的默认target
systemctl isolate multi-user.target
# 切换到另一个target,同时关闭前一个target中所有不属于后一个target的进程

4.6 服务管理
- centos7源码编译安装httpd、加入systemctl并设置开机自启动
编译的部分请参考上一节,本部分仅描述加入systemctl并设置开机自启动的过程
1、编写http服务启动脚本
#!/bin/bash
# chkconfig: 12345 80 90
function start_http()
{
/usr/local/http2/bin/apachectl start
}
function stop_http()
{
/usr/local/http2/bin/apachectl stop
}
case "$1" in
start)
start_http
;;
stop)
stop_http
;;
restart)
stop_http
start_http
;;
*)
echo "Usage : start | stop | restart"
;;
esac
chmod a+x httpd --增加所属用户执行权限
cp -a httpd /etc/init.d/ --将配置文件拷贝到该目录下
启动服务
systemctl daemon-reload --重载服务
systemctl start httpd --启动httpd
开启开机自动启动
chkconfig --add httpd
- 通过systemd unit的方式管理
Unit 文件可以分为三个配置区段:
Unit 段:所有 Unit 文件通用,用来定义 Unit 的元数据,以及配置与其他 Unit 的关系
Install 段:所有 Unit 文件通用,用来定义如何启动,以及是否开机启动
Service 段:服务(Service)类型的 Unit 文件(后缀为 .service)特有的,用于定义服务的具体管理和执行动作
[root@localhost local]# vim /usr/lib/systemd/system/apache.service
[Unit]
Description=The Apache HTTP Server
After=network.target #After表示当前服务在network.target之后启动,可以指定多个服务,以空格隔开
[Service]
Type=forking #将以fork()方式启动,此时父进程将会退出,子进程将成为主进程
PIDFile=/usr/local/httpd2/logs/httpd.pid #pid
ExecStart= /usr/local/httpd2/bin/apachectl $OPTIONS #服务启动
ExecReload= /bin/kill -HUP $MAINPID #可用于表示主进程的PID
[Install]
wantedBy=multi-user.target #表示当系统以多用户方式(默认的运行级别)启动时,这个服务需要被自动运行
服务管理
[root@localhost local]# systemctl daemon-reload ##重载配置
[root@localhost local]# systemctl start apache ##启动
[root@localhost local]# systemctl enable apache ##开启自启动
[root@localhost local]# systemctl status apache ##查看状态
● apache.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/apache.service; enabled; vendor preset: disabled)
Active: active (running) since 四 2022-01-13 12:57:58 CST; 3s ago
Process: 64511 ExecStart=/usr/local/httpd2/bin/apachectl $OPTIONS (code=exited, status=0/SUCCESS)
Main PID: 64514 (httpd)
CGroup: /system.slice/apache.service
├─64514 /usr/local/httpd2/bin/httpd
├─64515 /usr/local/httpd2/bin/httpd
├─64516 /usr/local/httpd2/bin/httpd
└─64517 /usr/local/httpd2/bin/httpd
1月 13 12:57:58 localhost.localdomain systemd[1]: Starting The Apache HTTP Server...
1月 13 12:57:58 localhost.localdomain apachectl[64511]: AH00558: httpd: Could not reliably determine the server's fully qualified do...essage
1月 13 12:57:58 localhost.localdomain systemd[1]: Can't open PID file /usr/local/httpd2/logs/httpd.pid (yet?) after start: No such ...rectory
1月 13 12:57:58 localhost.localdomain systemd[1]: Started The Apache HTTP Server.
Hint: Some lines were ellipsized, use -l to show in full.
4.7 systemd日志管理
systemd 统一管理所有的 unit 的启动日志。好处是只用journalctl命令,就可查看所有日志(内核日志和应用日志)。日志的配置文件是/etc/systemd/journald.conf,默认情况下 ,只保存本次启动的日志。
journalctl
# 查看所有的启动日志
journalctl -k
# 查看内核日志(不显示应用日志)
journalctl -b
journalctl -b -0
# 只查看系统本次启动的日志
journalctl -b -1
# 查看系统上一次启动的日志(需更改设置)
journalctl -n
# 显示尾部的最新10行日志
journalctl -n 20
# 显示尾部的最新20行日志
journalctl /usr/lib/systemd/systemd
# 查看指定服务的日志
journalctl _PID=1
# 查看指定进程的日志
journalctl /usr/bin/bash
# 查看某个路径的脚本的日志
journalctl _UID=0
# 查看指定用户的日志
journalctl -u network.service
# 查看指定的unit的日志
journalctl -u network.service -f
# 实时滚动查看指定的unit的最新日志
4.8 总结
CentOS7.x和CentOS6.x的日常使用对比
1、网卡管理
| 管理方式 | CentOS7.x | CentOS6.x |
| -------- | ------------------------- | ----------------------- |
| 启动 | systemctl start network | service network start |
| 停止 | systemctl stop network | service network stop |
| 重启 | systemctl restart network | service network restart |
| 查看状态 | systemctl status network | service network status |
2、IP地址管理
| 查看方式 | CentOS7.x | CentOS6.x |
| -------- | --------- | --------- |
| 查看IP | ip addr | ifconfig |
3、防火墙管理
| 管理方式 | CentOS7.x | CentOS6.x |
| -------- | --------------------------- | ------------------------ |
| 启动 | systemctl start firewalld | service iptables start |
| 停止 | systemctl stop firewalld | service iptables stop |
| 重启 | systemctl restart firewalld | service iptables restart |
| 查看状态 | systemctl status firewalld | service iptables status |
4、自动启停管理
| 管理方式 | CentOS7.x | CentOS6.x |
| ---------------- | ------------------------------ | ------------------- |
| 开机自启 | systemctl enable name.service | chkconfig name on |
| 关闭开机自启 | systemctl disable name.service | chkconfig name off |
| 查看开启启动状态 | systemctl list-unit-files | chkconfig --list |
| | | |
5、主机名
| 管理方式 | CentOS7.x | CentOS 6.x |
| -------- | ------------- | ---------------------- |
| 配置文件 | /etc/hostname | /etc/sysconfig/network |
6、时间同步、时区修改、语言修改
| 管理方式 | CentOS7.x | CentOS 6.x |
| -------- | -------------------------------------- | -------------------- |
| 时间同步 | chronyc sources | ntpq -p |
| 时区修改 | timedatectl set-timezone Asia/Shanghai | /etc/sysconfig/clock |
| 语言修改 | localectl set-locale LANG=zh_CN.UTF-8 | /etc/sysconfig/i18n |
7、网络工具管理
| 管理方式 | CentOS7.x | CentOS6.X |
| ------------ | -------------- | --------- |
| 网络管理工具 | NetworkManager | network |
8、文件系统
| 管理方式 | CentOS7.x | CentOS6.x |
| -------- | --------- | --------- |
| 文件系统 | xfs | ext4/ext3 |
9.运行级别
| 操作方式 | CentOS7.x | CentOS6.x |
| --------- | ----------------------------------- | ----------------- |
| [GUI➡CUI] | systemctl isolate multi-user.target | id:3:initdefault: |
| [CUI➡GUI] | systemctl isolate graphical.target | id:5:initdefault: |
默认
$ systemctl set-default graphical.target
$ systemctl set-default multi-user.target
当前
$ systemctl get-default
五、Linux 常规服务作用(了解)
| 服务名称 | 功能简介 | 建议 |
|---|---|---|
| acpid | 电源管理接口。如果是笔记本电脑用户,则建议开启,可以监听内核层的相关电源事件 | 开启 |
| anacron | 系统的定时任务程序。是 cron 的一个子系统,如果定时任务错过了执行时间,则可以通过 anacron 继续唤醒执行 | 关闭 |
| alsasound | alsa 声卡驱动。如果使用 alsa 声卡,则开启 | 关闭 |
| apmd | 电源管理模块。如果支持 acpid,就不需要 apmd,可以关闭 | 关闭 |
| atd | 指定系统在特定时间执行某个任务,只能执行一次。如果需要则开启,但我们一般使用 crond 来执行循环定时任务 | 关闭 |
| auditd | 审核子系统。如果开启了此服务,那么 SELinux 的审核信息会写入 /var/log/audit/ audit.log 文件;如果不开启,那么审核信息会记录在 syslog 中 | 开启 |
| autofs | 让服务器可以自动挂载网络中其他服务器的共享数据,一般用来自动挂载 NFS 服务。如果没有 NFS 服务,则建议关闭 | 关闭 |
| avahi-daemon | avahi 是 zeroconf 协议的实现,它可以在没有 DNS 服务的局域网里发现基于 zeroconf 协议的设备和服务。除非有兼容设备或使用 zeroconf 协议,否则关闭 | 关闭 |
| bluetooth | 蓝牙设备支持。一般不会在服务器上启用蓝牙设备,关闭它 | 关闭 |
| capi | 仅对使用 ISND 设备的用户有用 | 关闭 |
| chargen-dgram | 使用 UDP 协议的 chargen server。其主要提供类似远程打字的功能 | 关闭 |
| chargen-stream | 同上 | 关闭 |
| cpuspeed | 可以用来调整 CPU 的频率。当闲置时,可以自动降低 CPU 频率来节省电量 | 开启 |
| crond | 系统的定时任务,一般的 Linux 服务器都需要定时任务来协助系统维护。建议开启 | 开启 |
| cvs | 一个版本控制系统 | 关闭 |
| daytime-dgram | 使用 TCP 协议的 daytime 守护进程,该协议为客户机实现从远程服务器获取日期和时间的功能 | 关闭 |
| daytime-slream | 同上 | 关闭 |
| dovecot | 邮件服务中 POP3/IMAP 服务的守护进程,主要用来接收信件。如果启动了邮件服务则开启:否则关闭 | 关闭 |
| echo-dgram | 服务器回显客户服务的进程 | 关闭 |
| echo-stream | 同上 | 关闭 |
| firstboot | 系统安装完成后,有一个欢迎界面,需要对系统进行初始设定,这就是这个服务的作用。既然不是第一次启动了,则建议关闭 | 关闭 |
| gpm | 在字符终端 (ttyl~tty6) 中可以使用鼠标复制和粘贴,这就是这个服务的功能 | 开启 |
| haldaemon | 检测和支持 USB 设备。如果是服务器则可以关闭,个人机则建议开启 | 关闭 |
| hidd | 蓝牙鼠标、键盘等蓝牙设备检测。必须启动 bluetooth 服务 | 关闭 |
| hplip | HP 打印机支持,如果没有 HP 打印机则关闭 | 关闭 |
| httpd | apache 服务的守护进程。如果需要启动 apache,就开启 | 开启 |
| ip6tables | IPv6 的防火墙。目前 IPv6 协议并没有使用,可以关闭 | 关闭 |
| iptables | 防火墙功能。Linux 中的防火墙是内核支持功能。这是服务器的主要防护手段,必须开启 | 开启 |
| irda | IrDA 提供红外线设备(笔记本电脑、PDA’s、手机、计算器等)间的通信支持。建议关闭 | 关闭 |
| irqbalance | 支持多核处理器,让 CPU 可以自动分配系统中断(IRQ),提高系统性能。目前服务器多是多核 CPU,请开启 | 开启 |
| isdn | 使用 ISDN 设备连接网络。目前主流的联网方式是光纤接入和 ADSL,ISDN 己经非常少见,请关闭 | 关闭 |
| kudzu | 该服务可以在开机时进行硬件检测,并会调用相关的设置软件。建议关闭,仅在需要时开启 | 关闭 |
| lvm2-monitor | 该服务可以让系统支持LVM逻辑卷组,如果分区采用的是LVM方式,那么应该开启。建议开启 | 开启 |
| mcstrans | SELinux 的支持服务。建议开启 | 开启 |
| mdmonitor | 该服务用来监测 Software RAID 或 LVM 的信息。不是必需服务,建议关闭 | 关闭 |
| mdmpd | 该服务用来监测 Multi-Path 设备。不是必需服务,建议关闭 | 关闭 |
| messagebus | 这是 Linux 的 IPC (Interprocess Communication,进程间通信)服务,用来在各个软件中交换信息。建议关闭 | 关闭 |
| microcode _ctl | Intel 系列的 CPU 可以通过这个服务支持额外的微指令集。建议关闭 | 关闭 |
| mysqld | MySQL 数据库服务器。如果需要就开启;否则关闭 | 开启 |
| named | DNS 服务的守护进程,用来进行域名解析。如果是 DNS 服务器则开启;否则关闭 | 关闭 |
| netfs | 该服务用于在Typore时自动挂载网络中的共享文件空间,比如 NFS、Samba 等。 需要就开启,否则关闭 | 关闭 |
| network | 提供网络设罝功能。通过这个服务来管理网络,建议开启 | 开启 |
| nfs | NFS (Network File System) 服务,Linux 与 Linux 之间的文件共享服务。需要就开启,否则关闭 | 关闭 |
| nfslock | 在 Linux 中如果使用了 NFS 服务,那么,为了避免同一个文件被不同的用户同时编辑,所以有这个锁服务。有 NFS 时开启,否则关闭 | 关闭 |
| ntpd | 该服务可以通过互联网自动更新系统时间.使系统时间永远准确。需要则开启,但不是必需服务 | 关闭 |
| pcscd | 智能卡检测服务,可以关闭 | 关闭 |
| portmap | 用在远程过程调用 (RPC) 的服务,如果没有任何 RPC 服务,则可以关闭。主要是 NFS 和 NIS 服务需要 | 关闭 |
| psacct | 该守护进程支持几个监控进程活动的工具 | 关闭 |
| rdisc | 客户端 ICMP 路由协议 | 关闭 |
| readahead_early | 在系统开启的时候,先将某些进程加载入内存整理,可以加快启动速度 | 关闭 |
| readahead_later | 同上 | 关闭 |
| restorecond | 用于给 SELinux 监测和重新加载正确的文件上下文。如果开启 SELinux,则需要开启 | 关闭 |
| rpcgssd | 与 NFS 有关的客户端功能。如果没有 NFS 就关闭 | 关闭 |
| rpcidmapd | 同上 | 关闭 |
| rsync | 远程数据备份守护进程 | 关闭 |
| sendmail | sendmail 邮件服务的守护进程。如果有邮件服务就开启;否则关闭 | 关闭 |
| setroubleshoot | 该服务用于将 SELinux 相关信息记录在日志 /var/log/messages 中。建议开启 | 开启 |
| smartd | 该服务用于自动检测硬盘状态。建议开启 | 开启 |
| smb | 网络服务 samba 的守护进程。可以让 Linux 和 Windows 之间共享数据。如果需要则开启 | 关闭 |
| squid | 代理服务的守护进程。如果需要则开启:否则关闭 | 关闭 |
| sshd | ssh 加密远程登录管理的服务。服务器的远程管理必须使用此服务,不要关闭 | 开启 |
| syslog | 日志的守护进程 | 开启 |
| vsftpd | vsftp 服务的守护进程。如果需要 FTP 服务则开启;否则关闭 | 关闭 |
| xfs | 这是 X Window 的字体守护进程,为图形界面提供字体服务。如果不启动图形界面,就不用开启 | 关闭 |
| xinetd | 超级守护进程。如果有依赖 xinetd 的服务,就必须开启 | 开启 |
| ypbind | 为 NIS (网络信息系统)客户机激活 ypbind 服务进程 | 关闭 |
| yum-updatesd | yum 的在线升级服务 | 关闭 |