引言
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 协议在本地和远程服务器之间安全地复制文件或目录。它加密了数据传输,因此更加安全。
将本地文件复制到远程服务器:
将本地目录复制到远程服务器:
将远程文件复制到本地:
从远程服务器复制整个目录到本地:
4.5rsync
rsync 是一个非常强大的文件同步工具,支持增量同步,减少了文件传输的时间和带宽消耗。它可以同步文件和目录,不仅可以在本地计算机之间同步,也支持远程同步。
将本地目录同步到远程服务器:
rsync -avz /local/dir/ user@remote:/remote/dir/
参数说明:
-a:归档模式,表示保持文件的所有属性(如权限、时间戳等)。
-v:详细模式,显示传输过程中的文件。
-z:启用压缩传输。
将远程目录同步到本地:
rsync -avz user@remote:/remote/dir/ /ocal/dir
命令 功能 用户 IP/主机名 自己的目录 本地
同步文件时,排除某些文件:
rsync -avz --exclude="*.1og" /local/dir/ user@remote:/remote/dir/
命令 功能 排除外 本地 远端 目标
用户 IP/主机名 目标目录
这会排除所有 .1og 后缀的文件。
仅同步文件变化:
rsync -avz--ignore-existing /local/dir/ user@remote:/remote/dir/
本地 远端/ 目标
这会跳过远程目录中已经存在的文件,只同步新的或修改过的文件。
4.6ssh
ssh(Secure Shell)命令用于通过加密连接远程登录到计算机。它使得你可以安全地访问远程机器并执行命令。
登录到远程服务器:
ssh user@hostname #这会连接到远程主机 hostname上的 user 用户。
使用不同端口登录:
ssh -p 22 user@hostname #通过-p 选项指定端口,默认端口是 22
修改服务器端口 配置文件路径:/etc/ssh/sshd_config
如果有报错,看下是否关闭防火墙
setenforce 0 临时
修改配置 vim /etc/sysconfig/selinux
通过 SSH 执行远程命令.
ssh user@hostname 'ls -l /home/user'#这会在远程主机上执行1s-1/home/user 命令,列出指定目录的内容.
4.7nohup
nohup 命令用于让某个进程在后台运行,并且使其在关闭终端后依然保持运行。nohup会将标准输出和错误输出重定向到 nohup.out 文件中。
让脚本在后台运行:
nohup python script.py &
这会使 script.py 脚本在后台运行,即使终端关闭,脚本也会继续执行。
查看后台任务的输出:
tail -f nohup.out
这会实时查看后台任务的输出。
4.8reboot
reboot 命令用于重启计算机。在一些场景中需要重新启动计算机以应用更新或其他操作。
重启计算机:reboot#这会立即重启计算机。
重启并延迟几分钟:reboot +5#这会在5分钟后重启计算机。
4.9shutdown
shutdown 命令用于关闭计算机。它可以指定一个延迟时间,或者立即关闭系统。
立即关闭系统:shutdown -h now#这会立即关闭计算机。
延迟关闭系统:shutdown -h +10#这会在10分钟后关闭系统。
重启系统:shutdown -r now#这会立即重启计算机。
4.10free
用于显示系统的内存使用情况,包括物理内存(RAM)、交换空间(swap)和内核缓冲区。它是 Linux 系统中非常常用的一个命令,用于查看内存的总体状态。
free 命令提供以下几个主要信息:
1.总内存:物理内存的总量。
2.已用内存:已经被系统或应用程序使用的内存。
3.空闲内存:没有被使用的内存。
4.共享内存:不同进程之间共享的内存空间。
5.缓存内存:操作系统用作缓存的数据。
6.交换内存(Swap):当物理内存不足时系统使用磁盘上的空间作为虚拟内存(交换空间)。
命令选项
-h :以人类可读的方式显示(自动选择合适的单位,如KB,MB,GB)
-m :以 MB 为单位显示内存
-g :以 GB 为单位显示内存
-t :显示内存的总和(即总内存+总交换空间)
-s :以秒为单位指定显示刷新时间间隔
-l :显示低内存和高内存的详细信息
total:总内存。
used :已用内存。
free:空闲内存。
shared:被多个进程共享的内存。
buff/cache:系统缓冲区和缓存使用的内存。
available:可以用来启动新应用程序的内存(考虑了缓存和缓冲的回收)
结语
掌握Linux系统管理和进程控制是成为合格系统管理员的基石。从系统引导到服务管理,从进程监控到任务调度,这些技能构成了Linux系统运维的核心能力框架。建议读者:
- 在测试环境练习各种systemctl命令
- 使用crontab设置实际需要的定时任务
- 通过top和ps监控系统资源使用情况
- 定期审查自动启动的服务项
只有通过持续实践,才能真正掌握这些强大的系统管理工具,构建高效稳定的Linux运行环境。