引言
linux作为服务器领域的主流操作系统,其强大的系统管理能力和灵活的任务调度机制是每位系统管理员必须掌握的技能。
本文将全面解析linux系统的引导过程、服务控制、进程管理以及计划任务设置,帮助读者构建完整的linux系统管理知识体系。
一、linux系统引导过程与服务控制
1.1 系统引导的五个关键阶段
linux系统的启动是一个精心设计的链式过程:
- 开机自检:开机后,通过bios对硬件进行初步检测,确定第一个启动设备进行引导
- mbr引导:从硬盘第一个扇区加载mbr(主引导记录),启动grub引导程序
- grub引导菜单:读取/boot/grub2/grub.cfg配置文件,加载并启动操作系统内核
- 加载linux内核:将内核文件和镜像文件加载到内存
- init进程初始化:内核加载并启动 init 进程,完成系统的初始化。
整个过程可以想象成:
- 1.早上醒来活动身体,检查身体是否有不适
- 2.查看日程表,决定今天要做什么
- 3.起床洗漱准备,选择当日着装、早餐
- 4.头脑清醒后集中注意力,整理代办事项,准备眼镜、钥匙、手机等工具
- 5.正式开始一天工作
1.2 grub2的进化优势
相比传统grub,grub2具有显著改进:
- 支持ext4、btrfs、xfs等多种现代文件系统
- 模块化设计减小了核心镜像体积
- 配置文件位置变更为/boot/grub2/grub.cfg
- 支持更灵活的启动参数配置
1.3 systemd的优点
systemd作为新一代初始化系统,解决了传统sysvinit的痛点:
关键优势包括:
- 并行启动:显著缩短系统启动时间
- 按需启动:减少不必要的资源占用
总结:systemd 改善了系统的启动速度和服务管理效率,解决了 sysvinit 启动慢和脚本复杂的问题。
1.4 systemd单元类型
单元类型 | 扩展名 | 说明 |
---|---|---|
service | .service | 描述一个系统服务 |
socket | .socket | 描述一个进程间通信的套接字 |
device | .device | 描述一个内核识别的设备文件 |
mount | .mount | 描述一个文件系统的挂载点 |
automount | .automount | 描述一个文件系统的自动挂载点 |
swap | .swap | 描述一个内存交换设备或交换文件 |
path | .path | 描述一个文件系统中文件或目录 |
timer | .timer | 用于保存一个定时器(用于实现类似cron的调度任务) |
snapshot | .snapshot | 用于保存一个系统的状态 |
scope | .scope | 使用systemd的总线接口以编程的方式创建外部进程 |
slice | .slice | 描述属于cgroup的一组通过层次组织的管理系统进程 |
target | .target | 描述一组systemd的单元 |
1.5 运行级别与systemd目标
#查看运行级别 runlevel命令
systemctl工具 #临时切换运行级别 init命令
systemctl工具
systemd用target替代了传统的运行级别概念:
运行级别 | target单元 | 用途 |
---|---|---|
0 | poweroff.target | 关机 |
1 | rescue.target | 单用户救援模式 |
3 | multi-user.target | 多用户文本模式 |
5 | graphical.target | 图形界面模式 |
6 | reboot.target | 重启 |
设置与切换运行级别:
查看当前默认目标 systemctl get-default 切换到图形界面 systemctl isolate graphical.target 设置默认目标字符化界面 systemctl set-default multi-user.target
- 单用户/救援模式
- 多用户模式(不带图形界面)
- 图形界面模式
1.6 系统服务控制
1、设置开机自启 systemctl enable sshd 2、查看开机自启 systemctl is-enabled sshd 3、禁用开机自启 systemctl disable sshd 4、查看服务状态 systemctl status sshd 5、启动/关闭/重启/重新加载防火墙 systemctl start/stop/restart/reload firewalld.service 6、启动服务 systemctl list-unit-files | grep enabled 7、临时修改主机名 hostname 主机名 8、永久修改主机名 hostnamectl set-hostname newname 9、设置系统语言为中文 localectl set-locale lang=zh_cn.utf8
1.7 优化启动过程
#ntsysv工具
- 提供一个交互式、可视化窗口
- 可以在字符终端运行
- 便于集中管理多个服务
#systemctl工具
- 不提供交互式、可视化窗口
- 管理单个服务效率更高
二、linux进程管理
2.1 程序与进程的本质区别
- 程序:静态存储在磁盘上的可执行代码(如firefox)
- 进程:程序运行的动态实例,拥有独立pid和系统资源
举例:程序就像是一本写好的菜谱(静态的文本),放在书架上不会自己动,进程就是厨师按照菜谱一步步烹饪的过程(动态的执行),需要用到锅碗瓢盆等资源。
父进程与子进程:
- 父进程:是创建其他进程的进程,就像一个家长。
- 子进程:是由父进程创建并执行的独立进程,就像子女一样。
举个例子:你打开游戏软件(父进程),它弹出一个商店窗口(子进程),这个窗口就是父进程“生出来”的帮手。
2.2 查看进程工具介绍
- ps - 静态进程信息统计ps(process status)命令用于查看系统中当前运行的进程。它显示了与进程相关的信息,如进程 id (pid)、用户、cpu 和内存使用率等。
常用选项: ps aux # 显示所有进程,包括其他用户的进程 ps aux | grep [进程名] # 通过管道和 `grep` 命令过滤进程 ps -ef # 以标准格式显示所有进程
输出字段解释: - user:进程所属的用户。 - pid:进程 id。 - %cpu:进程占用的 cpu 百分比。 - %mem:进程占用的内存百分比。 - vsz:进程使用的虚拟内存(单位 kb)。 - rss:进程使用的物理内存(单位 kb)。 - tty:进程关联的终端设备,如:tty1(物理终端)、pts/0(伪终端)……若进程未关联终端(如后台任务),该字段可能显示?或空白 - stat:进程的状态,常见状态有:r(运行)、s(睡眠)、z(僵尸)、t(停止)等。 - start:进程的启动时间。 - time:进程占用的 cpu 时间。 - command:启动该进程的命令。
详解 stat:该进程的状态(d:不可中断的休眠状态:r:正在运行状态;s:处于休眠状态,可被唤醒;t:停止状态,可能是在后台暂停或进程处于跟踪调试状态: z:僵尸进程,进程已经中止,但是部分程序还在内存当中)。 d:系统守护进程 t:调式、程序执行一般停止 r :该程序目前正在运作,或者是可被运作; s :该程序目前正在睡眠当中 (可说是 idle 状态啦!),但可被某些讯号(signal) 唤醒。 t :该程序目前正在侦测或者是停止了; z :该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (疆尸) 程序的状态d 不可中断状态. 它们含意如下:: <: 表示进程运行在高优先级上 n: 表示进程运行在低优先级上 l: 表示进程有页面锁定在内存中 s: 表示进程是控制进程 l: 表示进程是多线程的 +: 表示当前进程运行在前台 d:系统守护进程
- top - 动态查看进程信息top 命令用于动态显示 linux 系统中运行的进程和资源使用情况,实时更新显示。
常用快捷键: 按p:以cpu使用率排序 按m:以内存使用排序 按t:以时间排序 按1:显示多核cpu详情 按q:退出top
输出解释: - pid:进程 id。 - user:启动该进程的用户。 - %cpu:进程占用的 cpu 百分比。 - %mem:进程占用的内存百分比。 - time+:进程累计使用的 cpu 时间。 - command:执行的命令。
- pgrep - 查询进程信息
常用的参数: -l:选项可同时输出对应的进程名以及pid -u:选项查询特定用户的进程 -t:选项查询在特定终端运行的进程
- pstree - 以树形结构列出进程信息
pstree 命令默认情况下只是以树形结构显示各进程的名称,结合以下常用的参数使用: pstree -p # 显示对应pid号 pstree -u # 显示对应用户名 pstree -a # 显示完整命令行
从输出结果中可以看出,systemd 进程确实是 linux 操作系统中所有进程的“始祖”。
2.3 进程调度与控制
1.linux进程前后台运行机制对比
特性 | 前台运行 | 后台运行 |
---|---|---|
终端控制 | 独占终端输入输出 | 释放终端控制权 |
交互方式 | 需等待进程结束 | 可立即输入新命令 |
信号响应 | 直接接收ctrl+c中断 | 需通过kill命令终止 |
典型场景 | 即时性命令(ls,grep等) | 耗时操作(大文件复制/编译) |
启动方式 | 直接输入命令 | 命令末尾添加&符号 |
例如,当使用 cp 命令从光盘中制作镜像文件时,由于需要复制的数据较多,耗时较长,因此可结合“&” 符号将复制操作放到后台运行,以便用户可以继续执行其他命令操作。
2.调度启动
调度启动的目的:在服务器维护中,将耗时且占用资源多的任务(如数据备份、数据库导出)安排在系统相对空闲时段(如夜间)自动执行。用户需预先设定任务的具体运行时间,系统会在到达指定时间后自动启动并完成任务。
核心特点:
- 后台运行: 调度启动的计划任务进程均在后台运行,不会占用用户的命令终端。
- 定时触发: 任务在预设的时间点或周期自动触发执行。
命令 | 用途 |
---|---|
at | 设置一次性执行的计划任务 |
crontab | 设置周期性重复执行的计划任务 |
3.前后台调度技巧:
ctrl+z组合键 # 挂起当前进程 jobs -l # 列出当前所有后台任务及其进程 id fg %1 # 将后台任务编号为 1 的任务带回前台 bg %1 # 将后台任务编号为 1 的任务恢复在后台运行
4.进程终止方法:
ctrl+c组合键 # 中断正在执行的命令 kill -9 2248 # 强制终止pid号为2248的进程(不可恢复) killall vim # 终止所有名为vim进程 pkill -u "python app" # 终止匹配进程
三、计划任务管理
计划任务用于自动执行系统中的任务。linux 中常用的计划任务工具包括 at 和 cron。
3.1 一次性任务:at命令
at 命令用于设置一次性任务,任务将在指定时间执行。
命令格式: at [hh:mm] [yyyy-mm-dd] at> [要执行的命令]
常用选项: atq:列出待执行的任务。 atrm [任务编号]:删除指定的任务。
3.2 周期性任务:cron系统
cron 用于设置定期执行的任务。用户可以通过 crontab 命令编辑和管理自己的计划任务。
命令格式: * * * * * command 分 时 日 月 周 命令
顺序 | 含义 | 具体要求 |
---|---|---|
1 | 分钟 | 取值为 0~59 的任意整数 |
2 | 小时 | 取值为 0~23 的任意整数 |
3 | 日期 | 取值为 1~31 的任意整数(日期在该月份中必须有效) |
4 | 月份 | 取值为 1~12 的任意整数 |
5 | 星期 | 取值为 0~7 的任意整数,0 或 7 代表星期日 |
6 | 命令 | 可以是普通的命令,也可以是自己编写的程序脚本 |
星号“*”:表示上表要求的任意整数。 减号“-”:可以表示一个连续的时间范围,如“1-4”表示整数 1、2、3、4。 逗号“,”:可以表示一个间隔的不连续范围,如“3, 4, 6, 8”。 斜杠符号“/”:可以用来指定间隔频率,如在日期字段中的“*/3”表示每隔 3 天。
常用命令: crontab -e :编辑当前用户的 cron 任务。 crontab -l :列出当前用户的 cron 任务。 crontab -r :删除当前用户的所有 cron 任务。 crontab -u :指定xx用户的 cron 服务。
实用案例:
每天的 7:50 启动 sshd 服务,22:50 停止 sshd服务。
cron服务管理:
启动 cron 服务:systemctl start crond 启用 cron 服务开机启动:systemctl enable crond 查看 cron 服务状态:systemctl status crond
四、常用系统管理命令
4.1date
date 命令用于显示当前的系统日期和时间,可以指定不同的输出格式,或用它来设置系统的日期和时间。
- 查看时间和日期
- 自定义时间格式
- 显示当前时间戳(1970年1月1日至今的秒数)
- 设置系统时间
- 与阿里云同步时间
4.2cal
cal 命令用来显示当前月份或指定月份的日历,可以方便的查看日期。
- 查看当前月份的日历:
- 查看指定年份和月份的日历:
- 显示一整年的日历:
4.3history
history 命令用来查看当前用户的历史命令,这个命令可以帮助你快速找到之前运行的命令。
- 查看命令历史:
- 查看历史命令的特定条目:
- 使用历史编号执行命令:
4.4scp
scp 命令用于通过 ssh 协议在本地和远程服务器之间安全地复制文件或目录。它加密了数据传输,因此更加安全。
- 将本地文件复制到远程服务器:
- 将本地目录复制到远程服务器:
总结
掌握linux系统管理和进程控制是成为合格系统管理员的基石。从系统引导到服务管理,从进程监控到任务调度,这些技能构成了linux系统运维的核心能力框架。建议读者:
- 在测试环境练习各种systemctl命令
- 使用crontab设置实际需要的定时任务
- 通过top和ps监控系统资源使用情况
- 定期审查自动启动的服务项
只有通过持续实践,才能真正掌握这些强大的系统管理工具,构建高效稳定的linux运行环境。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论