14、Linux系统状态管理
系统信息查看
1. 查看日期和时间
-
查看当前系统日期和时间:
date
-
查看当月日历:
cal
-
查看系统已经运行的时间及负载情况:
uptime w cat /etc/redhat-release uname -a cat /proc/version
-
查看当前登录用户及活动信息:
uptime w cat /etc/redhat-release uname -a cat /proc/version
2. 查看系统版本
-
查看系统的发行版本(适用于 RedHat 系列):
uptime w cat /etc/redhat-release uname -a cat /proc/version
-
查看内核版本及系统架构信息:
uptime w cat /etc/redhat-release uname -a cat /proc/version
-
查看内核版本的详细信息:
uptime w cat /etc/redhat-release uname -a cat /proc/version
程序、进程、服务
1. 程序 (Program)
- 程序是静态的文件,通常是存储在磁盘上的可执行文件(如 xxx)。
- 程序在运行时会被加载到内存中,并作为进程执行。
2. 进程 (Process)
- 进程是程序在操作系统中的一次运行实例。
- 每个进程有唯一的进程标识符(PID)。
- 可通过以下命令查看进程情况:
ps -aux # 查看所有运行的进程
top # 动态监控系统中运行的进程
3. 服务 (Service)
- 服务是一种长期运行的后台进程,通常用来提供某种功能或等待请求。
- 查看服务状态命令:
systemctl list-unit-files | grep mysql # 查看与 MySQL 相关的服务
cat /etc/services | grep mysql # 查看端口号与服务的映射关系(MySQL 示例)
运行程序的方式
1. 前台运行
- 直接运行程序会占用当前终端,直到程序结束:
./xxx
2. 后台运行
- 使用 nohup 将程序放到后台运行,即使终端关闭,程序仍继续运行:
nohup ./xxx &
- 可通过以下命令查看程序的后台运行状态:
jobs # 查看当前终端启动的后台任务
ps -aux | grep xxx # 查看指定程序是否在后台运行
使用 top 命令查看进程信息详解
1. 顶部系统信息(全局状态)
- 当前时间:系统当前的时间(如 17:48)。
- 运行时间(up):系统从启动到现在已运行的时间(如 47 min)。
- 登录用户数:当前登录到系统的用户数量(如 2 users)。
- 系统负载(load average):最近 1 分钟、5 分钟、15 分钟的平均负载值,表示运行队列的平均任务数(如 0.00, 0.05, 0.06)。
2. 任务队列信息
-
Tasks(任务总数):系统中所有的任务(进程)的统计:
-
total:总进程数(如 153 total)。
-
running:正在运行的进程数(如 2 running)。
-
sleeping:处于睡眠状态的进程(如 151 sleeping)。
-
stopped:被停止的进程(如 0 stopped)。
-
zombie:僵尸进程数量(如 0 zombie)。
3. CPU 使用信息
-
%Cpu(s):CPU 的使用情况按不同类型统计:
-
us(用户态):用户进程占用 CPU 的百分比(如 0.0 us)。
-
sy(内核态):系统内核进程占用 CPU 的百分比(如 0.3 sy)。
-
ni(nice 进程):调整优先级的用户进程占用 CPU 的百分比(如 0.0 ni)。
-
id(空闲):CPU 空闲百分比(如 99.7 id)。
-
wa(I/O 等待):等待 I/O 操作的时间百分比(如 0.0 wa)。
-
hi(硬件中断):硬件中断占用的百分比(如 0.0 hi)。
-
si(软件中断):软件中断占用的百分比(如 0.0 si)。
-
st(虚拟机被偷走):虚拟化环境中 CPU 被 Hypervisor 偷走的时间(如 0.0 st)。
4. 内存信息
- KiB Mem(物理内存):
- total:总物理内存大小(如 999936 KiB)。
- free:空闲的物理内存(如 102476 KiB)。
- used:已使用的物理内存(如 468188 KiB)。
- buff/cache:用于缓存的物理内存(如 429272 KiB)。
- KiB Swap(交换分区):
- total:总交换分区大小(如 2097148 KiB)。
- free:空闲的交换分区(如 2097148 KiB)。
- used:已使用的交换分区(如 0 KiB)。
- avail Mem:可用的内存总量(包括空闲内存和缓存)(如 322784 KiB)。
5. 进程详细信息
-
PID:进程 ID。
-
USER:进程所属用户。
-
PR:进程优先级。
-
NI:进程的 nice 值(优先级调整值)。
-
VIRT:进程占用的虚拟内存大小。
-
RES:进程占用的物理内存大小。
-
SHR:进程共享内存大小。
-
S(状态):
-
R:运行(running)。
-
S:睡眠(sleeping)。
-
D:不可中断的睡眠(waiting for I/O)。
-
Z:僵尸进程(zombie)。
-
T:停止(stopped)。
-
%CPU:进程占用的 CPU 百分比。
-
%MEM:进程占用的内存百分比。
-
TIME+:进程累计使用的 CPU 时间。
-
COMMAND:启动进程的命令。
使用技巧
-
交互操作:
-
按 q 退出 top。
-
按 k 输入 PID 可终止特定进程。
-
按 P 按 CPU 使用率排序。
-
按 M 按内存使用率排序。
-
过滤特定进程:
top -p <PID>
-
非动态方式显示:
top -b -n 1 > output.txt
ps 命令选项详解
全拼:process status
ps 命令用于显示进程的静态信息(与 top 的动态显示不同)。
常用选项
选项功能说明-a显示所有进程,包括其他用户的进程;-u按用户 ID 或用户名筛选进程,显示进程的详细信息;-x显示没有控制终端的进程,同时显示每个命令的具体路径;-e显示所有的进程,与 -A 效果相同;-f显示更完整的信息,通常与 -e 一起使用;
示例用法
1.查看所有进程:
ps -e
2.查看指定用户的进程:
ps -u 用户名
3.查看所有无终端控制的后台进程:
ps -x
4.查看详细的所有进程信息:
ps -ef
5.结合管道和过滤工具(如 grep)筛选进程:
- 查看与某个关键字相关的进程(比如 mysql):
ps -ef | grep mysql
常用字段释义
字段名 | 含义 |
---|---|
PID | 进程 ID,唯一标识系统中的每个进程。 |
USER | 启动进程的用户。 |
%CPU | 占用的 CPU 百分比,表示进程对 CPU 使用的相对强度。 |
%MEM | 占用的内存百分比,表示进程对物理内存的使用比例。 |
VSZ | 虚拟内存大小(单位:KB),表示进程分配的虚拟内存总量。 |
RSS | 驻留内存大小(单位:KB),表示进程实际占用的物理内存(驻留内存)。 |
TTY | 终端名称,表示进程的控制终端;若为 ? 表示未关联到任何终端。 |
STAT | 进程状态,可能的值包括: - R:运行中(Running) - S:休眠(Sleeping) - D:不可中断的睡眠状态(Disk sleep) - Z:僵尸进程(Zombie) - T:停止状态(Stopped) - 其他可能的标记,如 < (高优先级)、N (低优先级)等。 |
START | 进程启动时间,可能以具体时间(如 12:00 )或日期(如 Oct01 )显示。 |
TIME | 进程累计占用的 CPU 时间,表示进程运行总共使用 CPU 的时间。 |
COMMAND | 启动进程的命令及其参数,显示完整的命令行调用。 |
ps -ef
以下是 ps -ef 命令输出的字段含义:
字段名 | 含义 |
---|---|
UID | 启动进程的用户。 - 如 root 表示超级用户。 |
PID | 进程 ID,系统中每个进程的唯一标识。 |
PPID | 父进程 ID,表示该进程是由哪个进程启动的。 |
C | CPU 占用率的简化表示(百分比),通常为整数,反映进程的 CPU 使用情况。 |
STIME | 进程的启动时间: - 可能为日期(如 Jul27),表示较早启动的进程; - 或具体时间(如 12:00),表示当天启动的进程。 |
TTY | 终端名称: - 如 ? 表示该进程没有控制终端,通常是后台运行的守护进程。 |
TIME | 进程累计占用的 CPU 时间,格式为 hh:mm:ss,表示运行期间使用CPU的总时间。 |
CMD | 启动进程的命令,包括命令路径或参数,显示完整的命令行调用。 |
1.按关键字筛选进程:
ps -ef | grep <关键词>
2.查看父子进程关系:
ps -ef --forest
3.按内存或 CPU 使用排序(结合 sort 使用):
ps -e -o pid,ppid,cmd,%mem,%cpu --sort=-%cpu
-
1.ps -aux
显示系统中当前运行的所有进程,包括用户、CPU和内存使用情况等信息。 -
2.pstree
以树状图显示系统中运行的进程及其父子关系。 -
3.常用选项:
- pstree -p
- pstree mysql显示与mysql相关的进程树。
- pstree -p | grep ssh查询与ssh相关的进程
服务管理
systemctl命令
- 用于管理系统服务,支持服务的启动、停止、重启及状态查询。
常见操作
命令 | 功能说明 |
---|---|
systemctl status *.service |
查看所有服务的状态,包括是否正在运行、加载情况等。 |
systemctl start mysqld.service |
启动指定的服务(以 mysqld 服务为例)。 |
systemctl restart mysqld.service |
重启指定的服务。如果服务已在运行,将先停止再启动。 |
systemctl stop mysqld.service |
停止指定的服务,这将使服务不再运行。 |
systemctl enable mysqld.service |
设置指定服务为开机自启动,系统启动时服务将自动运行。 |
systemctl disable mysqld.service |
停止指定服务的开机自启动,系统启动时服务将不会自动运行。 |
service命令
- 早期服务管理工具,与systemctl功能相似,但较为简单。
以下是daemon
命令与systemctl
命令的对应关系整理表:
Daemon 命令 | 对应的 systemctl 命令 | 功能说明 |
---|---|---|
service [服务] start |
systemctl start [unit type] |
启动指定的服务。 |
service [服务] stop |
systemctl stop [unit type] |
停止指定的服务。 |
service [服务] restart |
systemctl restart [unit type] |
重启指定的服务(先停止后启动)。 |
说明:
- [服务]:表示服务名称,例如
mysqld
。 - [unit type]:表示服务单元的类型,例如
mysqld.service
。- 在
systemctl
中,服务名称通常以.service
结尾。
- 在
- 功能一致性:
service
和systemctl
的功能基本一致,但systemctl
是现代 Linux 发行版(如 CentOS 7、RHEL 7 及以上)中推荐使用的服务管理工具。 - 优势:
- 相较于
service
,systemctl
提供更多控制选项和更灵活的服务管理能力。
- 相较于
停止程序
信号量和停止进程
使用kill命令可通过发送信号量终止进程:
以下是信号量含义的整理与解析表:
信号量 | 信号名称 | 含义说明 |
---|---|---|
0 | EXIT | 程序退出信号。通常在程序正常结束时收到此信号。 |
1 | HUP | 挂起信号。常用于通知进程重新加载配置文件或重新初始化,而不需要终止进程。 |
2 | INT | 中断信号,通常由键盘输入 Ctrl+C 触发,用于终止前台运行的程序。 |
3 | QUIT | 退出信号。一般由用户通过 *Ctrl+* 触发,用于强制退出并生成内核转储。 |
9 | KILL | 强制终止进程信号。无法被捕获、阻塞或忽略,直接终止目标进程。 |
11 | SEGV | 段错误信号。通常由程序访问无效内存地址(如越界访问)时触发,导致程序崩溃。 |
15 | TERM | 软件终止信号(默认信号)。用于请求程序以正常方式终止,可被捕获和处理以执行清理操作。 |
- 信号作用:
- 信号是操作系统用于与进程通信的一种机制,可以通知进程执行特定的操作(如终止、暂停等)。
- 常见用例:
- HUP:常用于服务软件(如
nginx
)重新加载配置文件,而无需停止服务。 - KILL:用于强制终止无法正常停止的程序。
- TERM:最常用的终止信号,适用于正常关闭程序。
- HUP:常用于服务软件(如
- 特殊信号:
- KILL (9):不可被捕获或忽略,是终止进程的最后手段。
- SEGV (11):通常用于调试程序,帮助定位段错误。
内存使用查看
free命令
用于查看内存和交换分区(Swap)的使用情况。
常用命令
以下是 free
命令及其常用参数功能的解析整理表:
命令 | 功能说明 |
---|---|
free |
显示系统内存的使用情况,包括总量、已用、空闲和缓存等。 |
free -h |
以 人类可读 的格式显示内存信息(会自动转为 KB、MB、GB 单位)。 |
free -m |
以 MB(兆字节) 为单位显示内存的使用情况。 |
输出示例(free -h
)解析:
字段 | 含义 |
---|---|
total | 系统总内存量。 |
used | 已使用的内存量(包括缓存和缓冲区)。 |
free | 完全空闲的内存量。 |
shared | 被共享内存段使用的内存量。 |
buff/cache | 缓冲区和缓存占用的内存量。 |
available | 应用程序实际可用的内存量(考虑了缓存可被释放的部分)。 |
示例结果解释
- Mem:
- 总内存 (total):系统总内存。
- 已使用 (used):当前已使用的内存。
- 未使用 (free):未分配的内存。
- 缓冲/缓存 (buff/cache):用于缓冲的内存。
- 可用 (available):启动新程序时可用的内存。
- Swap:
- 总量 (total):交换分区总大小。
- 已使用 (used):已使用的交换分区。
- 未使用 (free):未使用的交换分区。
磁盘管理
检查磁盘使用情况
使用du命令查看目录和文件的磁盘占用情况。
命令 | 功能说明 |
---|---|
du /usr |
显示 /usr 目录的磁盘使用情况,以默认的块大小单位 (如 KB) 显示各子目录及文件的空间占用情况。 |
du -h /usr |
与 du /usr 类似,但以人类可读形式(如 KB、MB、GB 等)显示 /usr 目录及其子目录的空间占用情况,便于快速理解数据大小。 |
du -h /root --max-depth=1 |
显示 /root 目录及其子目录的磁盘使用情况,以人类可读形式显示,但限制只显示1级目录的使用情况(不递归显示更深层次的目录)。 |
`` du -h --max-depth=1 | sort -hr `` |
`` du -ah /root | sort -hr `` |
du -ah --exclude="*/.*" |
显示当前目录中所有文件及文件夹的磁盘使用情况,排除所有隐藏目录和隐藏文件(以 . 开头的文件或目录,如 .git 或 .config ),以便聚焦非隐藏内容的分析。 |
du -kt -10M ./* |
列出当前目录中所有大于 10MB 的文件,其中:-k 按 KB 单位显示结果;-t -10M 表示仅匹配大于 10MB 的文件(-10M 是大小过滤条件)。 |
-
选项说明:
-h
:人类可读格式输出,单位为 KB、MB、GB。--max-depth=N
:限制目录深度为指定的级别N
。-a
:同时显示文件和目录的磁盘使用情况。--exclude="PATTERN"
:排除符合特定模式(如隐藏文件、目录等)的内容。sort -hr
:对输出结果按数字大小降序排序,-h
支持带人类可读单位的数值排序。-t
:只显示满足条件的文件(如大于或小于指定大小的文件)。
-
使用场景:
- 排查目录中占用空间过大的文件或子目录。
- 快速了解某个目录的磁盘使用情况。
- 排除隐藏文件/目录,专注于普通文件的分析。
定时任务管理
工具:crontab
crontab是Linux用于创建、删除、列出和编辑定时任务的工具。
crontab命令
以下是 crontab
命令的功能说明:
命令 | 功能说明 |
---|---|
crontab -u root -r |
删除指定用户(root 用户)的所有定时任务。 |
crontab -u root time.cron |
将指定的任务文件(time.cron )加载并添加到指定用户(root 用户)的定时任务中。 |
crontab -u root -l |
列出指定用户(root 用户)的定时任务清单,显示当前用户的所有定时任务。 |
crontab -u root -e |
编辑指定用户(root 用户)的定时任务,通过文本编辑器修改任务配置。 |
-u root
表示指定操作系统中的哪个用户的定时任务。- 如果不指定
-u root
,则默认操作当前用户的定时任务。 crontab
是 Linux 系统中用于设置周期性任务的工具。- 在
crontab -e
编辑时,需要注意任务的时间格式为分钟 小时 日期 月份 星期 命令
。
** 任务时间格式示例**
字段 | 含义 | 取值范围 |
---|---|---|
分钟 | 任务执行的分钟 | 0-59 |
小时 | 任务执行的小时 | 0-23 |
日期 | 任务执行的日期 | 1-31 |
月份 | 任务执行的月份 | 1-12 |
星期 | 任务执行的星期几 | 0-7(0 和 7 都表示星期日) |
以下是关于不同文件路径及其功能的说明表:
路径 | 功能说明 |
---|---|
/etc/crontab |
用于管理系统级别的全局定时任务文件。所有用户的任务都可以在此文件中设置,且需要指定运行任务的用户。 |
/var/spool/cron/ |
存放每个用户(包括 root 用户)的个人 crontab 任务文件。只有对应用户可以编辑其任务。 |
/etc/cron.d/ |
存放需要执行的 crontab 文件或脚本。适合存放一些独立于用户的定时任务配置文件。 |
-
/etc/crontab
- 用途:设置系统全局的定时任务。
- 特点:
- 必须指定任务运行的用户。例如:
示例:分钟 小时 日期 月份 星期 用户名 命令
0 5 * * * root /path/to/script.sh
- 通常用于系统管理员配置与维护。
- 必须指定任务运行的用户。例如:
-
/var/spool/cron/
- 用途:每个用户的个人定时任务文件。
- 特点:
- 用户通过
crontab
命令创建或修改的任务会存放在这里。例如,crontab -e
修改的任务。 - 每个用户都有独立的文件,任务执行无需指定用户名。例如:
示例:分钟 小时 日期 月份 星期 命令
0 6 * * * /path/to/user_script.sh
- 该目录的权限受限,只有系统管理员或任务所属用户可以访问。
- 用户通过
-
/etc/cron.d/
- 用途:存放单独的定时任务配置文件或脚本。
- 特点:
- 任务文件格式类似于
/etc/crontab
,需要指定运行任务的用户。例如:15 3 * * * root /path/to/script.sh
- 可以用来组织复杂任务,或分隔系统服务相关的任务配置。
- 系统自动扫描并加载该目录下符合规范的文件。
- 任务文件格式类似于
- 对于系统级任务:优先考虑
/etc/crontab
和/etc/cron.d/
。 - 对于用户任务:使用
/var/spool/cron/
或crontab -e
命令来操作用户的任务。
Cron表达式
Cron表达式用于定义任务运行时间,格式如下:
分 小时 日 月 星期 命令
- 每个字段的取值范围:
- 分:0-59
- 小时:0-23
- 日:1-31
- 月:1-12
- 星期:0-7(0和7均表示星期天)
- 其他符号:
- *:表示任意值。
- ,:用于分隔多个值。
- -:用于表示范围。
- /:用于指定步长。
在线生成Cron表达式:Cron表达式工具
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能