一、CentOS 7操作系统安装
(一)安装前准备
CentOS 7操作系统安装前需要做好充分的准备工作,确保安装过程顺利进行。首先,需要准备CentOS 7安装光盘,这是安装过程的核心介质。安装前应确保计算机满足CentOS 7的最低硬件要求,包括足够的内存、硬盘空间和兼容的处理器。
在开始安装前,需要设置主机引导设备为光盘驱动器,这样才能从安装光盘启动主机。计算机启动后,系统会自动检测安装光盘的完整性,这一步骤确保安装介质没有损坏,避免安装过程中出现意外错误。
以下是CentOS 7安装的最低硬件要求:
|----------|-------------|----------|
| 硬件组件 | 最低要求 | 推荐配置 |
| 处理器 | 64位x86处理器 | 2核或以上 |
| 内存 | 1GB RAM | 2GB或以上 |
| 硬盘空间 | 10GB可用空间 | 20GB或以上 |
| 光驱 | DVD光驱或USB接口 | 任意 |
| 网络接口 | 有线网络接口 | 有线或无线 |
安装前还需要考虑系统的用途,这将影响后续的分区方案和软件包选择。例如,服务器用途的系统可能需要更稳定的配置和较少的图形界面组件,而桌面用途的系统则需要更多的图形支持和多媒体软件包。
(二)系统安装过程
CentOS 7操作系统的安装过程是一个结构化的流程,需要按照特定顺序完成各项配置。安装过程开始后,首先会进入安装程序的欢迎界面,此时需要选择安装程序的显示语言。选择合适的语言后,可以进入安装信息摘要页面,这里集中显示了所有需要配置的项目。
安装信息摘要页面包含以下主要配置项:
- 日期和时间设置:配置系统的时区、日期和时间。正确的时间设置对于系统日志记录和计划任务执行至关重要。
- 键盘类型设置:选择与实际使用的键盘匹配的布局,确保输入正确。
- 安装源配置:通常选择本地安装介质(如DVD光盘)作为安装源,也可以配置网络安装源。
- 软件组选择:根据系统用途选择合适的软件包组。常见选项包括"最小安装"、"基础设施服务器"、"文件和打印服务器"、"基本网页服务器"、"虚拟化主机"以及"带GUI的服务器"等。
- 安装目标位置设置:这是安装过程中的关键步骤,涉及硬盘分区配置。可以选择自动分区或手动分区。对于初学者,自动分区是一个安全的选择;对于有经验的用户,手动分区可以更精确地控制磁盘空间分配。
- Kdump内存设置:Kdump是一个内核崩溃转储机制,用于在系统崩溃时记录内存信息。可以根据系统内存大小和需求决定是否启用此功能。
- 网络和主机名设置:配置系统的网络参数,包括IP地址、子网掩码、网关和DNS服务器,同时设置系统的主机名。这些设置对于系统在网络中的识别和通信至关重要。
- 管理员密码设置:设置root用户的密码,这是系统的超级管理员账户,拥有系统的最高权限。密码应该足够复杂,包含大小写字母、数字和特殊字符,以确保系统安全。
- 用户账户创建:除了root账户外,还可以创建普通用户账户。日常操作建议使用普通用户账户,只有在需要执行管理任务时才切换到root账户,这样可以减少误操作对系统造成的损害。
完成以上配置后,安装程序会开始复制文件并完成安装过程,这一过程通常需要10~20分钟,具体时间取决于选择的软件包数量和计算机性能。
(三)硬盘分区与文件系统
硬盘分区是CentOS 7安装过程中的关键步骤,合理的分区方案对系统性能和稳定性有重要影响。在Linux系统中,硬盘、分区等设备均表示为文件,存放在/dev目录下。例如,/dev/hda5表示硬件设备文件所在的目录,hd表示IDE设备,sd表示SCSI设备,硬盘的顺序号以字母a、b、c......表示,分区的顺序号以数字1、2、3......表示。
硬盘和分区结构遵循特定的命名规则。第一块IDE硬盘设备表示为/dev/hda,其第1个主分区为/dev/hda1,第2个主分区为/dev/hda2,扩展分区中的第1个逻辑分区为/dev/hda5,第2个逻辑分区为/dev/hda6。
CentOS 7默认使用的文件系统类型是XFS,这是一种高性能的日志文件系统,特别适合处理大文件和大容量存储。除了XFS外,系统还支持SWAP交换文件系统,用于虚拟内存管理。Linux还支持其他文件系统类型,如EXT3、EXT4、FAT16、FAT32、NTFS、XFS、JFS等。
以下是常见文件系统类型的特性对比:
|------------|-----------------|-----------|------------|
| 文件系统类型 | 特点 | 适用场景 | 最大支持容量 |
| XFS | 高性能日志文件系统,适合大文件 | 服务器、大容量存储 | 16EB |
| EXT4 | 稳定可靠,广泛支持 | 通用场景 | 1EB |
| EXT3 | 向后兼容性好,有日志功能 | 旧系统兼容 | 16TB |
| SWAP | 交换分区,用于虚拟内存 | 系统内存扩展 | 取决于系统架构 |
| NTFS | Windows兼容文件系统 | 双系统环境 | 256TB |
| FAT32 | 简单,兼容性好 | 移动存储设备 | 32GB |
对于CentOS 7系统,推荐的分区方案包括:
- /boot分区:通常建议分配500MB-1GB空间,用于存储系统引导文件。这个分区应该放在磁盘的前部,以确保系统可以正确引导。
- 根分区(/):这是系统的主要分区,建议至少分配20GB空间。对于服务器系统,可能需要更大的空间,具体取决于要安装的软件和存储的数据。
- /home分区:用于存储用户数据,可以根据需求分配较大空间。将/home单独分区的好处是,即使需要重新安装系统,用户数据也不会丢失。
- SWAP分区:用于虚拟内存,通常建议大小为系统内存的1-2倍。如果系统内存较大(如16GB以上),SWAP分区可以适当减小。
- /var分区:用于存储系统日志和临时文件,对于服务器系统,建议单独分区并分配足够空间,以防止日志文件占满根分区。
- /tmp分区:用于存储临时文件,可以单独分区并设置noexec属性,提高系统安全性。
分区完成后,安装程序会格式化这些分区并创建文件系统,然后开始安装系统文件。整个过程完成后,系统会提示重新启动,此时需要取出安装光盘,让系统从硬盘启动。
二、系统初始化配置
(一)基本系统配置
CentOS 7操作系统安装完成后,首次启动时会进入初始化配置阶段。这一阶段主要包括接受用户许可协议、网络和主机名设置等基本配置。这些配置对系统的正常运行和网络通信至关重要。
用户许可协议是使用CentOS 7系统的法律基础,必须接受才能继续使用系统。在初始化界面中,需要仔细阅读许可协议条款,并明确选择接受协议。不接受协议将无法完成系统初始化,也就无法正常使用系统。
网络配置是系统初始化的关键环节,包括设置IP地址、子网掩码、网关和DNS服务器。CentOS 7提供了两种网络配置方式:动态获取IP地址(DHCP)和静态IP地址配置。对于服务器系统,通常建议使用静态IP地址,以确保网络地址的稳定性和可预测性。
以下是网络配置的主要参数:
|---------|-------------|------------------|
| 配置项 | 说明 | 示例 |
| IP地址 | 系统在网络中的唯一标识 | 192.168.1.100 |
| 子网掩码 | 定义网络范围 | 255.255.255.0 |
| 网关 | 网络出口地址 | 192.168.1.1 |
| DNS服务器 | 域名解析服务器 | 8.8.8.8, 8.8.4.4 |
| 主机名 | 系统在网络中的名称 | centos-server |
主机名设置是系统在网络中的标识,应该选择一个有意义的名称,便于识别和管理。主机名通常包含系统用途或位置信息,例如"web-server-01"或"db-master"等。在CentOS 7中,可以使用hostnamectl命令设置主机名,例如:hostnamectl set-hostname centos-server。
网络配置文件位于/etc/sysconfig/network-scripts/目录下,每个网络接口有一个对应的配置文件,例如ifcfg-eth0表示第一个以太网接口的配置。以下是一个静态IP配置的示例:
TYPE=EthernetBOOTPROTO=staticDEFROUTE=yesPEERDNS=yesPEERROUTES=yesIPV4_FAILURE_FATAL=noIPV6INIT=yesIPV6_AUTOCONF=yesIPV6_DEFROUTE=yesIPV6_PEERDNS=yesIPV6_PEERROUTES=yesIPV6_FAILURE_FATAL=noNAME=eth0UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxDEVICE=eth0ONBOOT=yesIPADDR=192.168.1.100PREFIX=24GATEWAY=192.168.1.1DNS1=8.8.8.8DNS2=8.8.4.4
完成网络配置后,需要重启网络服务使配置生效,可以使用命令:systemctl restart network。同时,为了确保网络配置正确,可以使用ping命令测试网络连通性,例如:ping www.baidu.com。
(二)安全配置
安全配置是CentOS 7系统初始化的重要环节,主要包括防火墙配置和Selinux设置。对于初学者,建议在学习和测试环境中关闭防火墙和Selinux,以减少配置复杂度,但在生产环境中应该根据实际需求合理配置这些安全机制。
防火墙是系统的第一道安全防线,用于控制网络流量。CentOS 7默认使用firewalld作为防火墙管理工具。关闭防火墙的命令为:systemctl stop firewalld.service && systemctl disable firewalld.service。这个命令会立即停止防火墙服务,并设置为开机不自动启动。
以下是防火墙管理的常用命令:
|-----------------------------|-----------|---------------|
| 命令 | 功能 | 说明 |
| systemctl start firewalld | 启动防火墙 | 立即启用防火墙服务 |
| systemctl stop firewalld | 停止防火墙 | 立即禁用防火墙服务 |
| systemctl enable firewalld | 设置防火墙开机启动 | 系统启动时自动启用防火墙 |
| systemctl disable firewalld | 禁用防火墙开机启动 | 系统启动时不自动启用防火墙 |
| systemctl status firewalld | 查看防火墙状态 | 显示防火墙当前运行状态 |
| firewall-cmd --list-all | 列出所有防火墙规则 | 显示当前生效的防火墙规则 |
Selinux(Security-Enhanced Linux)是美国国家安全局开发的强制访问控制系统,提供了比传统Linux权限更精细的安全控制。关闭Selinux的方法是编辑/etc/sysconfig/selinux文件,将"SELINUX=disabled"设置后保存退出,然后重新启动系统。
以下是Selinux的三种工作模式:
|------------|-----------------------------|------------------|
| 模式 | 说明 | 适用场景 |
| Enforcing | 强制模式,Selinux策略被强制执行 | 生产环境,需要高安全性 |
| Permissive | 宽松模式,Selinux策略不强制执行,但记录违规行为 | 测试环境,调试Selinux策略 |
| Disabled | 禁用模式,Selinux完全关闭 | 学习环境,兼容性要求高 |
安全配置前后的系统状态对比:
|----------|-----------|-----------|--------------------|
| 安全组件 | 配置前状态 | 配置后状态 | 影响 |
| 防火墙 | 运行中 | 已停止 | 网络访问限制解除,安全性降低 |
| Selinux | Enforcing | Disabled | 访问控制放宽,兼容性提高,安全性降低 |
| 网络服务 | 部分被阻止 | 全部允许 | 服务可用性提高,但暴露面增加 |
需要注意的是,在生产环境中关闭防火墙和Selinux会显著降低系统安全性。因此,在生产部署时,应该学习如何正确配置防火墙规则和Selinux策略,而不是简单地禁用它们。防火墙可以通过firewall-cmd命令添加特定服务的访问权限,例如:firewall-cmd --permanent --add-service=http会永久允许HTTP服务通过防火墙。Selinux可以通过chcon和restorecon命令调整文件和目录的安全上下文,以适应应用程序的需求。
(三)系统更新与软件源配置
系统更新是保持CentOS 7安全性和稳定性的重要措施。CentOS 7使用yum(Yellowdog Updater Modified)作为软件包管理器,可以方便地进行系统更新和软件安装。系统更新包括安全补丁、错误修复和功能改进等内容,定期更新系统可以防止已知的安全漏洞被利用。
软件源是yum获取软件包的服务器,CentOS 7默认配置了官方软件源,但也可以根据需要添加第三方软件源。常见的软件源包括EPEL(Extra Packages for Enterprise Linux)、Remi Repository和ELRepo等,这些软件源提供了官方源中没有的软件包。
以下是常用软件源的配置和用途:
|-------------|----------------|---------------------------------------------------------------------------|
| 软件源名称 | 用途 | 安装命令 |
| CentOS Base | 官方基础软件源 | 系统默认安装 |
| EPEL | 额外软件包,包含许多常用软件 | yum install epel-release |
| Remi | 最新版本的PHP和相关软件 | yum install https://rpms.remirepo.net/enterprise/remi-release-7.rpm |
| ELRepo | 硬件驱动和内核相关软件 | yum install https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm |
系统更新的基本命令包括:
- 检查可用更新:yum check-update
- 更新所有软件包:yum update
- 更新指定软件包:yum update package_name
- 清理缓存:yum clean all
软件源配置文件位于/etc/yum.repos.d/目录下,以.repo为扩展名。以下是一个典型的软件源配置文件示例:
basename=CentOS-releasever - Basemirrorlist=http://mirrorlist.centos.org/?release=releasever&arch=basearch\&repo=os\&infra=infra#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/gpgcheck=1gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7\[updates\]name=CentOS-$releasever - Updatesmirrorlist=http://mirrorlist.centos.org/?release=$releasever\&arch=$basearch\&repo=updates\&infra=$infra#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/gpgcheck=1gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7\[extras\]name=CentOS-$releasever - Extrasmirrorlist=http://mirrorlist.centos.org/?release=$releasever\&arch=$basearch\&repo=extras\&infra=$infra#baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/gpgcheck=1gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
为了提高软件下载速度,可以配置使用国内的镜像源。例如,可以使用阿里云、网易或中科大的镜像源。配置方法是将软件源配置文件中的mirrorlist或baseurl替换为国内镜像地址。例如,使用阿里云镜像的配置如下:
basename=CentOS-releasever - Base - Aliyunbaseurl=http://mirrors.aliyun.com/centos/releasever/os/$basearch/gpgcheck=1gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
系统更新和软件源配置完成后,可以使用yum update命令更新系统到最新版本。更新完成后,建议重新启动系统,以确保所有更新(特别是内核更新)正确生效。
三、Linux系统引导过程
(一)系统引导流程概述
Linux操作系统的引导过程是一个复杂而精密的序列,包含多个关键阶段,每个阶段都有其特定的功能和重要性。了解这些阶段有助于系统管理员诊断启动问题并进行系统优化。
Linux系统的引导流程始于开机自检(BIOS)阶段。当计算机电源接通后,BIOS(基本输入输出系统)首先执行硬件自检,检测并初始化硬件设备,如内存、键盘、显卡等。自检完成后,BIOS会查找引导设备,根据预设的引导顺序(通常是硬盘、光驱、USB设备等)加载主引导记录(MBR)。
MBR引导是引导过程的第二个阶段。MBR位于硬盘的第一个扇区,大小为512字节,包含引导加载程序和分区表信息。在CentOS 7系统中,MBR通常包含GRUB(Grand Unified Bootloader)的第一阶段引导代码,负责加载下一阶段的引导程序。
GRUB菜单是引导过程中的第三个阶段。GRUB是一个功能强大的多操作系统启动程序,它允许用户在启动时选择要加载的操作系统或内核版本。在CentOS 7中,GRUB 2是默认的引导加载程序,它支持多种文件系统,提供了图形化菜单界面,并允许用户修改启动参数。
内核加载是引导过程的第四个阶段。在GRUB菜单选择后,系统开始加载Linux内核(vmlinuz)和初始RAM磁盘(initrd或initramfs)。内核是操作系统的核心,负责管理系统资源、硬件设备以及提供系统调用接口。初始RAM磁盘包含必要的驱动程序和模块,帮助内核访问根文件系统。
init进程初始化是引导过程的最后阶段。init进程是由Linux内核加载运行的第一个进程,其PID号永远为1。在CentOS 7中,init进程已被Systemd所取代,Systemd是一种全新的系统启动方式,取代了传统的SysVinit。运行的第一个init进程是"/lib/systemd/systemd"。
以下是Linux系统引导流程的各阶段及其功能:
|------------|-----------|-----------------------|
| 引导阶段 | 功能 | 关键组件 |
| 开机自检(BIOS) | 硬件检测与初始化 | BIOS/UEFI |
| MBR引导 | 加载引导程序 | MBR, GRUB stage1 |
| GRUB菜单 | 选择操作系统/内核 | GRUB stage2, menu.lst |
| 内核加载 | 加载操作系统核心 | vmlinuz, initrd |
| init进程初始化 | 启动系统服务 | Systemd, init |
引导流程的每个阶段都可能出现问题,导致系统无法正常启动。例如,BIOS阶段可能是硬件故障,MBR阶段可能是引导记录损坏,GRUB阶段可能是配置文件错误,内核加载阶段可能是内核文件损坏,init进程阶段可能是服务配置错误。了解这些阶段的功能和可能的问题,有助于系统管理员快速定位和解决启动问题。
(二)GRUB引导程序
GRUB(Grand Unified Bootloader)是Linux系统中最常用的引导加载程序,在CentOS 7中使用的是GRUB 2版本。GRUB不仅能够引导Linux系统,还支持多系统引导,可以与Windows等其他操作系统共存。GRUB的强大之处在于它支持多种文件系统,能够直接读取文件系统中的内核文件,而不需要特定的位置映射。
GRUB 2的配置文件位于/boot/grub2/grub.cfg,但这个文件通常是由其他配置文件自动生成的,不建议直接编辑。主要的配置文件是/etc/default/grub和/etc/grub.d/目录下的文件。修改这些配置后,需要使用grub2-mkconfig命令生成新的grub.cfg文件。
以下是/etc/default/grub文件的主要配置参数:
|-----------------------|-----------|--------------|
| 参数 | 说明 | 示例值 |
| GRUB_TIMEOUT | 菜单显示时间(秒) | 5 |
| GRUB_DEFAULT | 默认启动项 | 0 |
| GRUB_DISABLE_SUBMENU | 是否禁用子菜单 | true |
| GRUB_TERMINAL_OUTPUT | 输出终端类型 | console |
| GRUB_CMDLINE_LINUX | 内核参数 | "rhgb quiet" |
| GRUB_DISABLE_RECOVERY | 是否禁用恢复模式 | true |
GRUB 2提供了强大的命令行界面,可以在系统启动时按"e"键编辑启动参数,或按"c"键进入命令行模式。这些功能在系统故障排除时非常有用。例如,当系统无法正常启动时,可以通过编辑启动参数,临时禁用某些服务或功能,使系统能够启动到修复模式。
GRUB 2的安装和修复命令包括:
- 安装GRUB到MBR:grub2-install /dev/sda
- 生成GRUB配置文件:grub2-mkconfig -o /boot/grub2/grub.cfg
- 查看GRUB配置:cat /boot/grub2/grub.cfg | less
- 查看默认启动项:grub2-editenv list
- 设置默认启动项:grub2-set-default 0
GRUB 2支持多种文件系统,包括EXT2/EXT3/EXT4、XFS、JFS、ReiserFS等。这使得GRUB能够直接从这些文件系统中加载内核,而不需要特定的引导分区。GRUB 2还支持网络引导(PXE),可以从网络服务器加载内核和初始RAM磁盘,这对于无盘工作站和网络安装非常有用。
GRUB 2的配置示例:
设置默认启动项GRUB_DEFAULT=0# 设置菜单显示时间GRUB_TIMEOUT=5# 设置图形终端GRUB_TERMINAL_OUTPUT="console"# 添加内核参数GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet"# 禁用恢复模式GRUB_DISABLE_RECOVERY="true"
修改GRUB配置后,需要运行以下命令使配置生效:
生成新的GRUB配置文件grub2-mkconfig -o /boot/grub2/grub.cfg# 重新安装GRUB到MBRgrub2-install /dev/sda
GRUB 2的灵活性和强大功能使其成为Linux系统引导的首选工具。通过合理配置GRUB,可以实现多系统引导、安全启动、内核参数调整等多种功能,为系统管理员提供了强大的系统引导控制能力。
(三)Systemd初始化系统
Systemd是Linux操作系统的一种init软件,代表了全新的系统启动方式,取代了传统的SysVinit。在CentOS 7中,Systemd作为默认的系统和服务管理器,负责系统的启动过程和服务管理。Systemd的设计目标是减少系统启动时间,提供更高效的并行服务启动能力,并统一管理系统组件。
Systemd运行的第一个init进程是"/lib/systemd/systemd",这个进程的PID号永远为1,是系统中所有其他进程的父进程。Systemd通过Systemctl命令工具来控制Systemd管理的系统和服务状态,并由Systemd守护进程负责Linux的系统和服务管理。
Systemd使用单元(unit)来管理不同的系统资源和服务。每个单元都有一个配置文件,描述了该单元的类型、依赖关系和执行方式。Systemd支持多种单元类型,每种类型都有特定的扩展名和功能。
以下是Systemd的主要单元类型及其功能:
|-----------|------------|----------------------------|
| 单元类型 | 扩展名 | 功能描述 |
| Service | .service | 描述一个系统服务 |
| Socket | .socket | 描述一个进程间通信的套接字 |
| Device | .device | 描述一个内核识别的设备文件 |
| Mount | .mount | 描述一个文件系统的挂载点 |
| Automount | .automount | 描述一个文件系统的自动挂载点 |
| Swap | .swap | 描述一个内存交换设备或交换文件 |
| Path | .path | 描述一个文件系统中文件或目录 |
| Timer | .timer | 描述一个定时器,用于实现类似cron的调度任务 |
| Snapshot | .snapshot | 用于保存一个systemd的状态 |
| Scope | .scope | 使用systemd的总线接口以编程的方式创建外部进程 |
| Slice | .slice | 描述居于Cgroup的一组通过层次组织的管理系统进程 |
| Target | .target | 描述一组systemd的单元 |
Systemd的目标(target)与传统的SysVinit运行级别有明确的对应关系。这种对应关系使得从SysVinit迁移到Systemd更加平滑,同时也保留了传统运行级别的概念,便于系统管理员理解和使用。
以下是运行级别与Systemd目标的对应关系:
|----------|-------------------|-----------------------------|
| 运行级别 | Systemd目标 | 说明 |
| 0 | poweroff.target | 关机状态,使用该级别时将会关闭主机 |
| 1 | rescue.target | 单用户模式,无须密码验证即可登录系统,多用于系统维护 |
| 2, 4 | multi-user.target | 用户定义/域特定运行级别,默认等同于3 |
| 3 | multi-user.target | 字符界面的完整多用户模式,大多数服务器主机运行在此级别 |
| 5 | graphical.target | 图形界面的多用户模式,提供了图形桌面操作环境 |
| 6 | reboot.target | 重新启动,使用该级别时将会重启主机 |
Systemd与传统SysVinit的对比:
|--------|-------------|--------------|
| 特性 | Systemd | SysVinit |
| 启动方式 | 并行启动 | 串行启动 |
| 启动速度 | 快速 | 较慢 |
| 依赖管理 | 自动处理 | 手动配置 |
| 资源控制 | 支持Cgroup | 不支持 |
| 日志管理 | 集成journald | 依赖syslog |
| 配置文件 | 统一格式 | 多种格式 |
Systemd的配置文件通常存放在/etc/systemd/system/目录下,单元文件分为三类:系统单元(/usr/lib/systemd/system/)、用户单元(/usr/lib/systemd/user/)和覆盖单元(/etc/systemd/system/)。当存在同名单元文件时,/etc/systemd/system/目录下的文件会覆盖其他目录下的文件。
Systemd的主要命令工具是systemctl,它可以用于控制系统服务的状态、查看系统信息、管理系统运行级别等。例如,systemctl start service_name用于启动服务,systemctl stop service_name用于停止服务,systemctl status service_name用于查看服务状态。
Systemd的引入显著提高了Linux系统的启动效率和服务管理能力,使得系统管理员能够更高效地管理系统和服务。通过合理配置Systemd单元和目标,可以实现系统资源的优化分配和服务的精细管理。
四、系统服务管理
(一)systemctl服务控制
systemctl是Systemd系统的主要命令行工具,用于控制Systemd管理的系统和服务状态。作为CentOS 7系统服务管理的核心工具,systemctl提供了丰富的功能,包括服务启动、停止、重启、状态查询以及开机自启管理等操作。
systemctl命令的基本语法格式为:systemctl 控制类型 服务名称。其中,控制类型包括start(启动)、stop(停止)、restart(重新启动)、reload(重新加载)、status(查看服务状态)等操作。这些基本控制操作是系统管理员日常管理中最常用的命令。
以下是systemctl命令的常用控制类型及其功能:
|-----------------|---------------------|----------------------------|
| 控制类型 | 功能 | 示例命令 |
| start | 启动指定的系统服务 | systemctl start httpd |
| stop | 停止指定的系统服务 | systemctl stop httpd |
| restart | 重新启动指定的系统服务 | systemctl restart httpd |
| reload | 重新加载指定服务的配置文件,不中断服务 | systemctl reload httpd |
| status | 查看指定服务的运行状态 | systemctl status httpd |
| enable | 设置服务开机自启 | systemctl enable httpd |
| disable | 禁用服务开机自启 | systemctl disable httpd |
| is-enabled | 检查服务是否设置为开机自启 | systemctl is-enabled httpd |
| list-units | 列出所有单元 | systemctl list-units |
| list-unit-files | 列出所有单元文件 | systemctl list-unit-files |
除了基本的服务控制外,systemctl还提供了系统状态查询和日志查看功能。例如,systemctl list-units --type=service可以查看当前系统中所有已经激活的系统服务,systemctl --failed可以查看启动失败的服务,journalctl -u service_name可以查看特定服务的日志。
systemctl命令的高级用法包括:
- 查看服务依赖关系:systemctl list-dependencies service_name
- 屏蔽服务(防止被启动):systemctl mask service_name
- 取消屏蔽服务:systemctl unmask service_name
- 查看服务配置文件:systemctl cat service_name
- 编辑服务配置文件:systemctl edit service_name
服务状态查询是系统管理的重要环节。使用systemctl status service_name命令可以查看服务的详细状态信息,包括是否运行、进程ID(PID)、内存使用情况、最近日志条目等。这些信息对于诊断服务问题和监控系统性能非常有用。
服务状态代码的含义:
|------------------|---------|-----------|
| 状态代码 | 含义 | 说明 |
| loaded | 单元文件已加载 | 配置文件已成功读取 |
| active (running) | 服务正在运行 | 服务正常工作 |
| active (exited) | 服务已成功完成 | 一次性服务已完成 |
| active (waiting) | 服务正在等待 | 等待事件触发 |
| inactive | 服务未运行 | 服务当前未激活 |
| failed | 服务启动失败 | 服务无法正常启动 |
| not-found | 单元文件未找到 | 配置文件不存在 |
systemctl还支持通配符和模式匹配,可以同时操作多个服务。例如,systemctl start 'httpd*'可以启动所有以httpd开头的服务,systemctl stop '*.service'可以停止所有服务。这种批量操作功能在系统维护和批量服务管理时非常方便。
在CentOS系统中,常见的系统服务包括atd(延期、定时执行任务,建议关闭)、crond(按预定周期执行计划任务,建议开启)、kdump(记录内核崩溃时的内存信息,建议关闭)、network(配置及使用网卡、网络地址,建议开启)、smb(文件共享服务,建议关闭)、lvm2-monitor(LVM管理及监控,建议开启)、rsyslog(记录内核、系统的日志消息,建议开启)。
对于系统管理员来说,熟练掌握systemctl命令是管理CentOS 7系统的基本技能。通过合理使用systemctl的各种功能,可以高效地管理系统服务,确保系统的稳定运行和服务的可用性。
(二)系统运行级别管理
Linux系统的运行级别管理是系统管理员必须掌握的重要技能,包括运行级别查看、临时切换和永久设置等操作。在Systemd系统中,传统的运行级别概念被target(目标)所取代,但功能上保持对应关系,使得从传统系统迁移更加平滑。
运行级别是Linux系统的一种操作状态,不同的运行级别提供不同的服务和功能。在传统的SysVinit系统中,运行级别通过数字0-6表示,每个数字对应一种系统状态。在Systemd系统中,这些运行级别被映射为不同的target,使得系统管理更加灵活和直观。
查看运行级别可以使用runlevel命令或systemctl工具。runlevel命令只能查看切换运行级别与当前运行级别,而systemctl只能查看默认的运行级别。这两种工具各有优缺点,系统管理员可以根据实际需要选择使用。
以下是运行级别查看命令及其功能:
|------------------------------------|-------------------|-------------------|
| 命令 | 功能 | 输出示例 |
| runlevel | 查看切换运行级别与当前运行级别 | N 3 |
| systemctl get-default | 查看默认的运行级别(target) | multi-user.target |
| systemctl list-units --type=target | 列出所有已激活的target | - |
临时切换运行级别可以使用init命令或systemctl工具。init命令的参数是运行级别所对应的数字,而systemctl的参数是具体的target。例如,要临时切换到单用户模式,可以使用init 1或systemctl isolate rescue.target命令。
以下是运行级别切换命令及其功能:
|-------------------------------------|--------------|-----------|
| 命令 | 功能 | 说明 |
| init 0 | 关闭系统 | 立即关机 |
| init 1 | 切换到单用户模式 | 用于系统维护 |
| init 3 | 切换到字符界面多用户模式 | 服务器常用模式 |
| init 5 | 切换到图形界面多用户模式 | 桌面系统常用模式 |
| init 6 | 重新启动系统 | 立即重启 |
| systemctl isolate multi-user.target | 切换到字符界面多用户模式 | Systemd方式 |
| systemctl isolate graphical.target | 切换到图形界面多用户模式 | Systemd方式 |
永久设置运行级别需要修改默认target。在Systemd系统中,可以使用systemctl set-default target_name命令设置默认的运行级别。例如,要将系统默认设置为字符界面多用户模式,可以使用systemctl set-default multi-user.target命令。
运行级别与Systemd目标的对应关系如下:
|----------|-------------------|-----------------------------|
| 运行级别 | Systemd目标 | 说明 |
| 0 | poweroff.target | 关机状态,使用该级别时将会关闭主机 |
| 1 | rescue.target | 单用户模式,无须密码验证即可登录系统,多用于系统维护 |
| 2, 4 | multi-user.target | 用户定义/域特定运行级别,默认等同于3 |
| 3 | multi-user.target | 字符界面的完整多用户模式,大多数服务器主机运行在此级别 |
| 5 | graphical.target | 图形界面的多用户模式,提供了图形桌面操作环境 |
| 6 | reboot.target | 重新启动,使用该级别时将会重启主机 |
运行级别的选择应根据系统的用途和需求来确定。对于服务器系统,通常使用运行级别3(字符界面多用户模式),这样可以节省系统资源,提高系统性能和安全性。对于桌面系统,通常使用运行级别5(图形界面多用户模式),以提供图形用户界面和多媒体功能。
系统服务管理工具除了systemctl外,还有ntsysv工具。ntsysv提供一个交互式、可视化窗口,可以在字符终端运行,便于集中管理多个服务;而systemctl工具不提供交互式、可视化窗口,但在管理单个服务时效率更高。这两种工具各有优势,系统管理员可以根据实际需要选择使用。
使用ntsysv工具管理服务的语法为:ntsysv或ntsysv --level 运行级别列表。例如,要在运行级别3和5中管理服务,可以使用ntsysv --level 35命令。ntsysv工具提供了一个简单的文本界面,显示了系统中所有可用的服务,并允许用户通过空格键切换服务的开机自启状态。
运行级别管理是系统管理的基础工作,合理设置和管理运行级别可以提高系统的稳定性和安全性。系统管理员应该熟悉各种运行级别的特点和适用场景,根据实际需求选择合适的运行级别,并掌握运行级别的查看、切换和设置方法。
(三)系统服务优化
系统服务优化是提高CentOS 7系统性能和稳定性的重要环节。合理配置和管理系统服务可以减少系统资源消耗,提高系统响应速度,并增强系统安全性。在CentOS系统中,不同的服务有不同的用途和资源需求,系统管理员需要根据实际需求选择启用或禁用特定服务。
CentOS系统常见服务优化策略包括对atd、crond、kdump、network、smb等服务的启动状态配置和系统启动优化方法。在CentOS系统中,atd服务用于延期、定时执行任务,建议关闭;crond服务用于按预定周期执行计划任务,建议开启;kdump服务用于记录内核崩溃时的内存信息,建议关闭;network服务用于配置及使用网卡、网络地址,建议开启;smb服务用于文件共享服务,建议关闭;lvm2-monitor服务用于LVM管理及监控,建议开启;rsyslog服务用于记录内核、系统的日志消息,建议开启。
以下是CentOS系统常见服务的优化建议:
|--------------|--------------|----------|-----------------------------------------------------------------|
| 服务名称 | 功能 | 优化建议 | 优化命令 |
| atd | 延期、定时执行任务 | 建议关闭 | systemctl stop atd && systemctl disable atd |
| crond | 按预定周期执行计划任务 | 建议开启 | systemctl start crond && systemctl enable crond |
| kdump | 记录内核崩溃时的内存信息 | 建议关闭 | systemctl stop kdump && systemctl disable kdump |
| network | 配置及使用网卡、网络地址 | 建议开启 | systemctl start network && systemctl enable network |
| smb | 文件共享服务 | 建议关闭 | systemctl stop smb && systemctl disable smb |
| lvm2-monitor | LVM管理及监控 | 建议开启 | systemctl start lvm2-monitor && systemctl enable lvm2-monitor |
| rsyslog | 记录内核、系统的日志消息 | 建议开启 | systemctl start rsyslog && systemctl enable rsyslog |
系统服务管理工具包括ntsysv工具和systemctl工具。ntsysv工具提供一个交互式、可视化窗口,可以在字符终端运行,便于集中管理多个服务;而systemctl工具不提供交互式、可视化窗口,但管理单个服务效率更高。系统管理员可以根据实际需要选择合适的工具进行服务管理。
使用systemctl工具可以查看系统服务的启动状态,设置系统服务的启动状态,以及查看已激活的系统服务。具体语法包括:systemctl is-enabled 服务名称(查看服务是否启用);systemctl enable/disable 服务名称(设置服务开机启动/禁用);systemctl list-units --type=service(查看已激活的系统服务)。
系统启动优化是提高系统启动速度的重要措施。在CentOS 7中,可以通过以下方法优化系统启动过程:
- 禁用不必要的服务:使用systemctl disable service_name命令禁用不需要的服务,减少系统启动时的服务数量。
- 并行启动服务:Systemd支持并行启动服务,可以显著减少系统启动时间。可以通过调整服务依赖关系,优化并行启动效果。
- 优化文件系统检查:在/etc/fstab文件中,为不需要频繁检查的分区添加noatime或nodiratime选项,减少文件系统检查时间。
- 使用systemd-analyze工具分析启动时间:systemd-analyze命令可以显示系统总启动时间,systemd-analyze blame命令可以显示各服务的启动时间,帮助识别启动瓶颈。
以下是systemd-analyze工具的使用示例:
显示系统总启动时间systemd-analyze# 显示各服务的启动时间systemd-analyze blame# 生成启动时间图表systemd-analyze plot > boot_plot.svg
系统服务优化需要根据系统的实际用途和需求来进行。对于服务器系统,应该重点关注系统稳定性和安全性,禁用不必要的服务,保留核心服务;对于桌面系统,可以适当启用更多服务,以提供更好的用户体验。系统管理员应该定期检查系统服务状态,根据系统运行情况调整服务配置,以达到最佳的系统性能和稳定性。
五、高级配置与故障排除
(一)内核参数调优
内核参数调优是提高CentOS 7系统性能的重要手段。通过调整内核参数,可以优化系统内存管理、进程调度、网络性能和文件系统行为,使系统更好地适应特定的应用场景和工作负载。
Linux内核参数主要通过/proc文件系统和sysctl命令进行管理。/proc文件系统是一个虚拟文件系统,提供了内核和系统进程的信息。sysctl命令用于在运行时修改内核参数,也可以通过配置文件/etc/sysctl.conf设置永久生效的内核参数。
以下是常用的内核参数及其优化建议:
|----------|---------------------------|-------------------|---------------------|------------------|
| 参数类别 | 参数名称 | 默认值 | 优化值 | 说明 |
| 内存管理 | vm.swappiness | 60 | 10 | 减少交换分区使用,提高性能 |
| 内存管理 | vm.dirty_ratio | 20 | 10 | 控制脏页比例,提高写入性能 |
| 内存管理 | vm.dirty_background_ratio | 10 | 5 | 控制后台脏页比例,平衡I/O性能 |
| 网络性能 | net.core.rmem_max | 131071 | 16777216 | 增加TCP接收缓冲区大小 |
| 网络性能 | net.core.wmem_max | 131071 | 16777216 | 增加TCP发送缓冲区大小 |
| 网络性能 | net.ipv4.tcp_rmem | 4096 87380 131072 | 4096 87380 16777216 | 调整TCP接收窗口大小 |
| 网络性能 | net.ipv4.tcp_wmem | 4096 16384 131072 | 4096 16384 16777216 | 调整TCP发送窗口大小 |
| 文件系统 | fs.file-max | 系统自动计算 | 1000000 | 增加系统文件描述符限制 |
内核参数调优需要根据系统的实际用途和工作负载来进行。例如,对于Web服务器,可以重点调整网络相关参数;对于数据库服务器,可以重点调整内存和I/O相关参数;对于高并发服务器,可以重点调整进程和文件描述符相关参数。
内核参数的临时修改可以使用sysctl命令,例如:sysctl -w vm.swappiness=10。要使参数永久生效,需要在/etc/sysctl.conf文件中添加相应的配置行,例如:vm.swappiness=10,然后运行sysctl -p命令使配置生效。
以下是/etc/sysctl.conf文件的配置示例:
内存管理参数vm.swappiness = 10vm.dirty_ratio = 10vm.dirty_background_ratio = 5# 网络性能参数net.core.rmem_max = 16777216net.core.wmem_max = 16777216net.ipv4.tcp_rmem = 4096 87380 16777216net.ipv4.tcp_wmem = 4096 16384 16777216net.ipv4.tcp_congestion_control = cubic# 文件系统参数fs.file-max = 1000000# 安全参数net.ipv4.conf.all.rp_filter = 1net.ipv4.conf.default.rp_filter = 1net.ipv4.icmp_echo_ignore_broadcasts = 1
内核参数调优需要谨慎进行,不恰当的参数设置可能会导致系统不稳定或性能下降。在进行参数调整前,应该充分了解参数的含义和影响,并在测试环境中验证调整效果。建议一次只调整少量参数,并观察系统运行情况,逐步优化系统性能。
除了内核参数调优外,还可以通过调整系统引导过程中的内核加载参数来优化系统性能。内核加载参数可以在GRUB配置文件中设置,例如在/etc/default/grub文件的GRUB_CMDLINE_LINUX参数中添加"quiet"可以减少启动时的信息输出,添加"elevator=deadline"可以设置I/O调度器为deadline,提高磁盘I/O性能。
修改GRUB配置文件后,需要运行grub2-mkconfig -o /boot/grub2/grub.cfg命令生成新的GRUB配置文件,然后重新启动系统使配置生效。通过合理配置内核参数和引导参数,可以显著提高CentOS 7系统的性能和稳定性,使系统更好地适应特定的应用场景和工作负载。
(二)系统启动故障排除
系统启动故障是Linux系统管理员经常面临的问题之一。快速准确地诊断和解决启动问题,对于保证系统可用性和减少停机时间至关重要。CentOS 7系统的启动过程包括多个阶段,每个阶段都可能出现不同的问题,需要采用不同的方法进行诊断和解决。
系统启动故障的诊断通常从了解系统的引导流程开始。Linux操作系统的引导过程包括开机自检(BIOS)、MBR引导、GRUB菜单、加载Linux内核(kernel)、init进程初始化等阶段。每个阶段都有其特定的功能和可能的问题,系统管理员需要根据故障现象判断问题所在阶段,然后采取相应的解决措施。
以下是系统启动各阶段的常见问题及解决方法:
|----------|--------------------|----------------------------|
| 启动阶段 | 常见问题 | 解决方法 |
| BIOS阶段 | 硬件检测失败、引导设备未找到 | 检查硬件连接、调整BIOS设置、更换引导设备 |
| MBR阶段 | MBR损坏、引导加载程序丢失 | 使用救援模式修复MBR、重新安装GRUB |
| GRUB阶段 | GRUB配置错误、内核文件丢失 | 编辑GRUB启动参数、重新安装GRUB、恢复内核文件 |
| 内核加载阶段 | 内核文件损坏、initramfs缺失 | 使用救援模式恢复内核文件、重新生成initramfs |
| init进程阶段 | Systemd服务失败、依赖关系错误 | 检查服务状态、修复服务配置、调整服务依赖关系 |
GRUB引导问题是系统启动故障中最常见的问题之一。当系统无法正常启动时,可以尝试在GRUB菜单出现时按"e"键编辑启动参数,临时修改参数以绕过问题。例如,如果系统因文件系统错误而无法启动,可以添加"fsck.mode=force"参数强制检查文件系统;如果系统因显卡驱动问题而无法启动,可以添加"nomodeset"参数禁用显卡驱动。
GRUB修复的常用命令包括:
- 重新安装GRUB:grub2-install /dev/sda
- 生成GRUB配置文件:grub2-mkconfig -o /boot/grub2/grub.cfg
- 检查GRUB配置:grub2-editenv list
- 设置默认启动项:grub2-set-default 0
系统启动故障排除的步骤如下:
- 观察故障现象:记录系统启动过程中的错误信息、停止位置等关键信息。
- 判断故障阶段:根据故障现象判断问题出现在启动过程的哪个阶段。
- 收集诊断信息:查看系统日志、检查硬件状态、验证配置文件等。
- 尝试临时修复:使用救援模式或GRUB编辑功能,尝试临时修复问题使系统能够启动。
- 永久解决问题:系统启动后,分析问题根本原因,采取永久性解决措施。
- 验证修复效果:重新启动系统,验证问题是否已经解决。
当系统无法正常启动时,可以使用CentOS 7安装光盘进入救援模式。救援模式提供了一个最小化的Linux环境,可以用来修复系统问题。进入救援模式的方法是在安装光盘启动时选择"Troubleshooting">"Rescue a CentOS system"。
在救援模式中,可以执行以下修复操作:
- 挂载系统文件系统:chroot /mnt/sysimage
- 修复GRUB引导程序:grub2-install /dev/sda和grub2-mkconfig -o /boot/grub2/grub.cfg
- 检查和修复文件系统:fsck /dev/sda1
- 重新安装内核:yum reinstall kernel
- 恢复系统配置文件:从备份中恢复损坏的配置文件
系统启动故障排除需要系统管理员具备扎实的基础知识和丰富的实践经验。通过理解系统引导流程的各个阶段,掌握常见问题的诊断和解决方法,系统管理员可以快速有效地解决系统启动问题,保证系统的稳定运行和可用性。
(三)服务管理故障排除
服务管理故障是CentOS 7系统运行过程中常见的问题之一。系统服务可能因配置错误、依赖关系问题、资源不足或权限问题等原因而无法正常启动或运行。系统管理员需要掌握服务故障的诊断和解决方法,以确保系统服务的稳定运行。
服务故障诊断的第一步是查看服务状态。使用systemctl status service_name命令可以查看服务的详细状态信息,包括是否运行、进程ID(PID)、内存使用情况、最近日志条目等。这些信息对于诊断服务问题非常有用。如果服务启动失败,命令输出通常会显示失败原因和错误代码,帮助系统管理员定位问题。
以下是服务故障的常见原因及解决方法:
|----------|-------------------|------------------------|
| 故障原因 | 表现 | 解决方法 |
| 配置文件错误 | 服务启动失败,日志中有配置错误信息 | 检查和修复配置文件语法错误 |
| 依赖关系问题 | 服务因依赖的服务未启动而无法启动 | 启动依赖的服务,调整服务启动顺序 |
| 端口冲突 | 服务无法绑定到指定端口 | 检查端口占用情况,修改服务端口配置 |
| 权限问题 | 服务无法访问所需文件或目录 | 检查和修复文件权限,设置正确的用户和组 |
| 资源不足 | 服务因内存或磁盘空间不足而无法启动 | 释放系统资源,增加系统资源或调整服务资源限制 |
服务日志是诊断服务问题的重要信息来源。使用journalctl -u service_name命令可以查看特定服务的日志信息。如果服务启动失败,可以添加-b选项查看当前启动周期的日志,或添加-f选项实时跟踪日志输出。对于复杂的服务问题,可能需要查看更详细的日志信息,可以通过修改服务配置文件中的日志级别参数来实现。
服务依赖关系是服务管理中的一个重要概念。Systemd服务可以定义依赖其他服务的关系,确保服务按正确的顺序启动。使用systemctl list-dependencies service_name命令可以查看服务的依赖关系。如果服务因依赖问题而无法启动,可以使用systemctl start dependency_service命令手动启动依赖的服务,或者调整服务的依赖关系配置。
服务故障排除的步骤如下:
- 查看服务状态:使用systemctl status service_name命令查看服务状态和错误信息。
- 检查服务日志:使用journalctl -u service_name命令查看服务日志,获取更详细的错误信息。
- 验证配置文件:检查服务配置文件的语法和参数设置,确保配置正确。
- 检查依赖关系:确认服务的依赖服务是否已正常启动。
- 检查系统资源:确认系统是否有足够的内存、磁盘空间和端口资源。
- 检查文件权限:确认服务是否有权限访问所需的文件和目录。
- 尝试手动启动:使用命令行手动启动服务,观察详细的启动过程和错误信息。
- 修复问题:根据诊断结果修复问题,可能包括修改配置文件、调整权限、释放资源等。
- 验证修复效果:重新启动服务,确认问题是否已经解决。
服务配置文件是服务故障的常见源头。Systemd服务的配置文件通常位于/usr/lib/systemd/system/目录(系统提供的服务)或/etc/systemd/system/目录(用户自定义的服务)。配置文件的语法错误或参数设置错误都可能导致服务无法正常启动。使用systemd-analyze verify service_name命令可以检查服务配置文件的语法错误。
以下是服务配置文件的示例:
UnitDescription=Apache HTTP ServerAfter=network.target remote-fs.target nss-lookup.targetServiceType=forkingPIDFile=/run/httpd/httpd.pidExecStart=/usr/sbin/httpd OPTIONS -DFOREGROUNDExecReload=/usr/sbin/httpd OPTIONS -k gracefulExecStop=/bin/kill -WINCH ${MAINPID}KillSignal=SIGCONTPrivateTmp=trueInstallWantedBy=multi-user.target
服务资源限制是另一个常见的问题源。Systemd允许为服务设置资源限制,如CPU限制、内存限制、文件描述符限制等。如果服务的资源限制设置过低,服务可能因资源不足而无法正常工作。可以在服务配置文件的Service节中添加资源限制参数,如MemoryLimit=512M、CPUQuota=50%等。
服务管理故障排除需要系统管理员具备扎实的基础知识和丰富的实践经验。通过掌握服务状态查询、日志分析、配置检查和依赖关系管理等技能,系统管理员可以快速有效地诊断和解决服务问题,确保系统服务的稳定运行和可用性。