linux命令-系统信息与监控-2
大纲
文本查看与处理
直接用就行、head\tail\less\cat用的很多
| 命令 | 功能 | 典型场景 |
|---|---|---|
cat | 连接文件并打印 | cat file1 file2 > merged |
tac | 倒过来看日志 | tac file.log |
head | 显示文件开头部分 | head -n 20 file.log |
tail | 显示文件末尾部分 | tail -f app.log (实时追踪) |
less | 分页浏览文件(可回滚) | less +F syslog |
nl | 显示行号 | nl -b a file.py, 类似cat -n |
系统信息与监控
| 命令 | 功能 | 关键参数 |
|---|---|---|
top | 动态进程监控 | top -c(显示完整命令) |
ps | 进程快照 | ps aux(详列所有进程) |
lsof | 进程监控 | lsof -i |
free | 内存使用情况 | free -h(人类可读格式) |
uptime | 系统运行时间与负载 | uptime |
date | 显示/设置系统时间 | date +"%Y-%m-%d %H:%M" |
top
-
常用启动参数
参数 功能描述 示例 -d设置刷新间隔(秒) top -d 2(每 2 秒刷新)-n指定刷新次数后退出 top -n 5(刷新 5 次后退出)-p监控指定 PID 进程 top -p 1234(查看 PID 1234 进程)-b批处理模式(输出到文件) top -b -n 10 > top.log-c显示完整命令路径 top -c(默认仅显示命令名)-H 线程模式 top -H -p pidof mysqld -
交互快捷键(运行中使用)
按键 功能 q退出 top P按 CPU 使用率排序(降序) M按内存使用率排序(降序) T按累计 CPU 时间排序 f自定义显示列(按 a-z 切换列的显示/隐藏) k终止指定进程(需输入 PID 并确认信号) 1切换显示单个/所有 CPU 核心信息 -
栏位信息简介
us sy ni id wa hi si st 用户空间 内核空间 调整nice时间 空闲 等待IO时间 硬中断 软中断(模式切换) 虚拟机偷走的时间 -
top 命令各列含义详解
-
PR: 进程调度优先级
- 值越小优先级越高(实时优先级:099;普通优先级:100139 - 负值表示高优先级进程
- 优先级由内核动态调整,
nice值影响普通优先级范围
-
NI:用户态优先级修正值
- 范围:-20(最高)到 19(最低) - 通过
nice命令调整,影响 CPU 时间分配权重 NI值修改进程的调度竞争能力,非 root 用户只能调低优先级
- 范围:-20(最高)到 19(最低) - 通过
-
VIRT:虚拟内存总量(KB)
- 公式:
VIRT = SWAP + RES - 假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量
- 公式:
-
RES:实际使用的物理内存(KB)
- 公式:
RES = CODE + DATA - 如果申请100m的内存,实际使用10m,它只增长10m,与VIRT相反
- 关于库占用内存的情况,它只统计加载的库文件所占内存大小
- 公式:
-
s:进程状态
R=运行,S=睡眠,D=不可中断睡眠,Z=僵尸,T=暂停- 僵尸进程(
Z)需手动清理;D状态进程通常等待 I/O 操作
-
SHR:共享内存量(KB)
- 除了自身进程的共享内存,也包括其他进程的共享内存
- 共享库整体映射到
VIRT,但仅实际加载部分计入RES - 计算某个进程所占的物理内存大小公式:RES – SHR
- swap out后,它将会降下来
-
%CPU: CPU 时间占用百分比
- 统计周期:上次刷新到当前的时间片占用多核环境下可能超过 100%(如 200%=占满 2 核)
-
%MEM:物理内存占用百分比
- 公式:
(RES / 总物理内存) * 100%直接关联RES列
- 公式:
-
TIME+:累计 CPU 占用时间
- 格式:
分:秒.毫秒,精度为 1/100 秒(比TIME列更精确) - 统计进程生命周期内消耗的总 CPU 时间
- 格式:
-
COMMAND:进程名称/命令行
- 默认显示程序名(如
java) - 按c键切换完整命令行路径(如/usr/bin/java -Xmx2G) - 按
f键可自定义显示列(如增加PPID、USER等)
- 默认显示程序名(如
-
-
物理内存 vs 虚拟内存
RES是实际消耗的物理内存,直接影响系统性能;VIRT包含磁盘映射和预留空间,不直接占用物理资源
ps
-
参数
参数组合 功能描述 适用场景 ps -e显示系统中所有进程 快速查看整体进程数量 ps -f全格式输出(含UID、PID、PPID等) 需详细进程关系时使用 ps -ef显示所有进程的全格式信息 系统级进程排查 ps -u 用户名查看指定用户的进程 按用户维度监控资源 ps aux显示所有用户进程(BSD风格) 包含CPU/内存占用率 ps -C 命令名列出指定命令的进程 查找特定应用的运行状态 -
状态码
状态代码 描述 R 运行中 S 休眠状态,可被信号唤醒 D 不可中断休眠(通常为IO等待) T 进程被暂停(如收到SIGSTOP信号) Z 僵死进程,需父进程释放资源 + 前台进程 l 多线程进程 L 内存分页并带锁 N 低优先级进程 < 高优先级进程 s 会话领导者(子进程发起者) -
示例
# 查询你拥有的所有进程 ~]# ps -x# 显示指定用户名(RUID)或用户ID的进程 ~]# ps -fU root# 显示指定的进程ID对应的进程~]# ps -fp 925 UID PID PPID C STIME TTY TIME CMD root 925 1 0 20:52 ? 00:00:02 /usr/bin/dockerd -H fd:// --containerd=/run/contai
lsof
-
参数
参数 含义 示例 -c <进程名>显示指定进程打开的文件 lsof -c ssh(显示ssh进程相关文件)-u <用户名>显示指定用户打开的文件 lsof -u root(root用户的打开文件)-p <PID>显示指定进程ID的文件 lsof -p 1234(进程1234的打开文件)-i显示网络文件(TCP/UDP) lsof -i:8080(查看8080端口占用)-t <文件路径>仅输出占用文件的进程ID lsof -t /var/log/syslog(获取占用日志的PID) -
示例
~]# lsof -c ssh # 这里要用进程名,而不是pid号 ~]# lsof -p 1234 # 这里要用pid号~]# lsof -a -u root -p9534 # 查看全部进程用户为root pid=9534 -
lsof 命令各列含义详解
- COMMAND:进程名称(如
pure-ftpd、nginx)。表示打开文件的进程对应的程序名 - PID:进程ID;
- USER:进程所有者;
- FD:文件描述符
- 数字(如
4u):文件句柄编号,后缀表示模式(u=读写,r=读,w=写) - 特殊值:
cwd(当前工作目录)、txt(程序代码文件)、rtd(根目录)
- 数字(如
- TYPE:文件类型
REG:普通文件DIR:目录IPv4/IPv6:网络连接(TCP/UDP)CHR:字符设备 •FIFO:管道文件
- NAME:文件或资源的完整路径/标识
- 本地文件:
/var/log/syslog - 网络连接:
TCP *:8080 (LISTEN)(监听8080端口的TCP连接)
- 本地文件:
- COMMAND:进程名称(如
free
-
参数
参数 说明 -b/-m/-g 以字节/MB/GB为单位 -h 易读格式 -o 不显示-/+buffers/cache行 -t 显示RAM + swap的总和 -s n 刷新间隔为n秒 -c n 刷新n次后即退出 -
示例
[root@localhost cc]# free -b # 以字节为单位total used free shared buff/cache available Mem: 10464804864 171970560 10020167680 12226560 272666624 9999290368 Swap: 5234487296 0 5234487296[root@localhost cc]# free -m # 以MB为单位total used free shared buff/cache available Mem: 9980 163 9556 11 260 9536 Swap: 4991 0 4991[root@localhost cc]# free -g # 以GB为单位total used free shared buff/cache available Mem: 9 0 9 0 0 9 Swap: 4 0 4[root@localhost cc]# free -h # 易读格式total used free shared buff/cache available Mem: 9.7G 163M 9.3G 11M 260M 9.3G Swap: 4.9G 0B 4.9G[root@localhost cc]# free -th # swap跟物理内存总数total used free shared buff/cache available Mem: 9.7G 163M 9.3G 11M 260M 9.3G Swap: 4.9G 0B 4.9G Total: 14G 163M 14G
date
-
格式与选项
标记 含义 示例(当前时间:2025-10-28 22:45:44) %Y 4位年份 2025 %m 月份(01-12) 10 %d 日期(01-31) 28 %H 24小时制小时(00-23) 22 %M 分钟(00-59) 45 %S 秒(00-60) 44 %F 日期(%Y-%m-%d) 2025-10-28 %T 时间(%H:%M:%S) 22:45:44 -
关键选项
-
示例1:
date -d "2025-10-28 +1 month" +%F→ 2025-11-28 -
示例2:
date -d "2025-10-28 -1 year" +%Y→ 2024 -
示例3:
date +%s # 转换为时间戳~]# date -d "$(echo 20251029 23:59:59)" 2025年 10月 29日 星期三 23:59:59 CST~]# date -d "$(echo 20251029 23:59:59)" +%s 1761753599 -
示例4: 将时间戳转换为时间
~]# date -d @1761753599 2025年 10月 29日 星期三 23:59:59 CST -
示例5: 显示日历
~]# cal -y 2025 -
示例6:查看时区
~]# ll /etc/localtime ---- /etc/localtime -> ../usr/share/zoneinfo/Asia/Shanghai
-
uptime
-
理论
-
通常每个CPU内核的当前活动进程数不大于3,那么系统的性能良好。如果每个CPU内核的任务数大于5,那么此主机的性能有严重问题
-
同学需要平均负载:指在特定时间间隔内运行队列中的平均进程数
-
如果linux主机是1个双核CPU,当Load Average 为6的时候说明机器已经被充分使 用
-
-
示例
# 显示当前时间以及系统负载~]# uptime21:32:32 up 40 min, 1 user, load average: 0.09, 0.06, 0.05
