- 发布日期
Linux实用操作(四):主机监控、环境变量、传输与压缩归档
- 作者
- 姓名
- 缘
- 社交账号
文章目录
本篇学习范围
前面已经能安装服务、配置网络、定位端口和进程。真正日常使用时,还需要回答四类问题:
- 主机现在是 CPU 忙、内存紧、磁盘满,还是网络 I/O 有瓶颈?
- 为什么同一条命令在一个终端能执行、另一个终端却提示找不到?
- 怎样在本地与 Linux 服务器之间可靠地传文件?
- 怎样把多个文件打包、压缩、解压到指定位置?
本篇覆盖课件后半部分所有讲授命令:top、df、iostat、sar、env、export、rz/sz、tar、zip 与 unzip。
top:实时看进程与系统负载
top
top 会默认约每 5 秒刷新一次。按 q 或 Ctrl + C 退出。它的界面可以分成“系统总览”和“进程列表”两部分。
系统总览的五行信息
| 区域 | 典型字段 | 应怎样理解 |
|---|---|---|
| 第 1 行 | 当前时间、up、登录用户数、load average | load average 依次是 1、5、15 分钟平均负载;必须结合 CPU 核数、等待 I/O 情况综合判断,不能机械把大于 1 当作故障。 |
| 第 2 行 | Tasks: total/running/sleeping/stopped/zombie | 总进程数、正在运行、休眠、停止和僵尸进程数。僵尸进程持续大量出现时,通常需要关注其父进程是否正确回收子进程。 |
| 第 3 行 | %Cpu(s): us sy ni id wa hi si st | CPU 时间分布,见下表。 |
| 第 4 行 | Mem: total/free/used/buff/cache | 物理内存总量、空闲、已用、缓冲/页缓存。Linux 用空闲内存做缓存是正常现象。 |
| 第 5 行 | Swap: total/free/used、avail Mem | 交换分区与可用物理内存。avail Mem 是估算可立即分配的物理内存,不是 buff/cache。 |
CPU 行中的缩写:
| 字段 | 含义 |
|---|---|
us | 用户态程序占用 CPU 的时间。 |
sy | 内核态处理占用 CPU 的时间。 |
ni | 被设置了 nice 值的用户进程所占 CPU 时间;不是“高优先级”的同义词。 |
id | CPU 空闲时间。 |
wa | 等待 I/O 的时间比例;持续偏高时常要结合磁盘或网络 I/O 进一步看。 |
hi | 处理硬件中断的时间。 |
si | 处理软件中断的时间。 |
st | 虚拟化环境中被宿主机“偷走”的 CPU 等待时间。 |
进程列表字段
| 字段 | 含义 |
|---|---|
PID | 进程 ID。 |
USER | 启动进程的用户。 |
PR | 调度优先级。 |
NI | nice 值;在常见 Linux 调度语义中,较高的正 nice 值通常意味着较低的 CPU 调度倾向。 |
VIRT | 虚拟内存空间大小,不等于实际占用的物理内存。 |
RES | 常驻物理内存(resident memory)。 |
SHR | 可共享的内存部分。 |
S | 进程状态,如运行、休眠等。 |
%CPU | 刷新周期内的 CPU 使用情况。多核系统、线程模型和工具版本会影响其显示上限。 |
%MEM | 占物理内存的比例。 |
TIME+ | 进程自启动以来累计的 CPU 时间。 |
COMMAND | 进程名或命令行。 |
不要只看到 VIRT 大就判断“内存泄漏”;优先看 RES、%MEM、增长趋势以及应用自身指标。
top 的启动选项
课件涉及的常用选项可以这样记:
# 只关注 PID 为 1234 的进程
top -p 1234
# 每 2 秒刷新一次
top -d 2
# 展示完整命令行
top -c
# 刷新 3 次后自动退出
top -n 3
# 批处理模式,适合重定向保存
top -b -n 3 > /tmp/top.tmp
# 隐藏空闲和僵尸进程
top -i
# 只看某用户的进程
top -u alice
其中 -p 必须带 PID,-u 必须带用户名。-b 是非交互批处理模式,常用于把某段时间的现场保存到文件;它输出的是文本快照,不替代长期监控系统。
进入 top 后的交互键
| 按键 | 作用 |
|---|---|
h | 查看帮助。 |
c | 在短进程名与完整命令行之间切换。 |
f | 选择、排序或调整要显示的字段。 |
M | 按常驻内存使用量排序。 |
P | 按 CPU 使用率排序。 |
T | 按累计 CPU 时间 TIME+ 排序。 |
E | 切换顶部内存汇总的单位。 |
e | 切换进程列表内存列的单位。 |
1 | 在汇总 CPU 与逐核 CPU 视图之间切换。 |
i | 切换是否隐藏空闲和僵尸进程。 |
t | 切换 CPU 状态行的显示。 |
m | 切换内存信息行的显示。 |
排查“谁最占资源”时,一个实用动作是:进入 top 后先按 P 看 CPU,再按 M 看内存,最后按 c 看完整启动命令。
磁盘与 I/O:df、iostat、sar 各看一层
df -h:文件系统还有多少可用空间
课件格式:
df [-h]
最常用写法:
df -h
-h 让大小按 KB、MB、GB 等人类易读单位显示。输出常包含:
| 字段 | 含义 |
|---|---|
Filesystem | 文件系统或挂载设备。 |
Size | 文件系统总容量。 |
Used | 已使用空间。 |
Avail | 可用空间。 |
Use% | 使用率。 |
Mounted on | 挂载位置。 |
df 看的是文件系统整体空间,不会告诉你是哪一个目录占满了;需要深入定位时再配合 du 等工具。
iostat:看块设备 I/O
课件格式:
iostat [-x] [num1] [num2]
其中 num1 是采样间隔秒数,num2 是采样次数。例如:
iostat -x 3 2
表示以 3 秒为间隔,输出 2 组扩展 I/O 统计。iostat 和后面的 sar 通常由 sysstat 包提供;若系统没有命令,可按发行版安装:
sudo yum -y install sysstat
# 或
sudo apt install sysstat
基础输出中常见:
| 字段 | 含义 |
|---|---|
tps | 每秒传输次数(I/O 请求数的近似观察指标)。 |
kB_read/s | 每秒读取的 KB。 |
kB_wrtn/s | 每秒写入的 KB。 |
kB_read / kB_wrtn | 统计期累计读 / 写 KB。 |
-x 扩展输出常见字段及含义:
| 字段 | 含义 |
|---|---|
rrqm/s / wrqm/s | 每秒被合并的读 / 写请求数。 |
r/s / w/s | 每秒完成的读 / 写 I/O 请求数。 |
rKB/s / wKB/s | 每秒读 / 写的数据量(KB),不是请求数量。 |
avgrq-sz | 平均请求大小。 |
avgqu-sz | 平均请求队列长度。 |
await | I/O 请求平均等待时间,通常以毫秒计,包含排队和服务时间。 |
r_await / w_await | 读 / 写请求各自的平均等待时间。 |
svctm | 旧版 sysstat 中的平均服务时间;新版可能不再提供或不建议单独据此下结论。 |
%util | 设备忙于处理 I/O 的时间比例;持续接近 100% 时要结合队列和延迟判断是否接近瓶颈。 |
不同 sysstat 版本的字段名会略有变化。关键不是背出一张固定表,而是同时看吞吐量、队列长度、等待时间和利用率,避免只看一个百分比。
sar -n DEV:看网卡吞吐
课件格式:
sar -n DEV num1 num2
例如:
sar -n DEV 3 2
它会每 3 秒采样一次,共输出 2 组网卡设备统计。-n DEV 指定网络设备维度。常见字段:
| 字段 | 含义 |
|---|---|
IFACE | 网卡接口名。 |
rxpck/s / txpck/s | 每秒接收 / 发送的数据包数。 |
rxKB/s / txKB/s | 每秒接收 / 发送的数据量(KB)。 |
rxcmp/s / txcmp/s | 每秒接收 / 发送的压缩包数量,现代网络环境中常为 0。 |
rxmcst/s | 每秒接收的多播包数量。 |
若某接口有持续高吞吐、丢包或等待问题,应再结合应用日志、网卡错误计数、ping / curl、交换机或云网络指标判断;sar 是观察现象的入口,不会自动给出根因。
环境变量与 PATH:命令为何能直接运行
环境变量是当前 Shell 和其子进程携带的一组“键 = 值”配置。查看全部环境变量:
env
课件中最重要的几个:
| 变量 | 常见含义 |
|---|---|
HOME | 当前用户家目录。 |
USER | 当前用户名。 |
PWD | 当前工作目录。 |
PATH | Shell 查找外部可执行命令的目录列表,目录之间用冒号分隔。 |
例如:
env | grep PATH
echo $PATH
echo ${PATH}ABC
第二个 echo 会展开 PATH;第三个示例说明变量名和紧跟的普通字符连在一起时,可以用花括号明确边界:输出的是 PATH 的值再拼接 ABC。
一个重要校正:cd 不靠 PATH 查找
课件中用 cd 讲路径查找时容易引起误解。cd 通常是 Shell 内建命令,不是 /usr/bin/cd 这样的外部可执行文件;查看它应使用:
type cd
PATH 主要用于查找像 ls、grep、java 这类外部可执行命令。可以比较:
type ls
command -v ls
临时设置:export
课件格式:
export 变量名=变量值
例如:
export ITHEIMA=666
echo $ITHEIMA
这项设置只对当前 Shell 和它之后启动的子进程有效。关闭这个终端或重新登录后,临时变量通常会消失。
永久设置:.bashrc、/etc/profile 与 source
如果希望每次打开 Bash 都拥有某个变量,可以写入:
| 文件 | 影响范围 |
|---|---|
~/.bashrc | 当前用户的 Bash 环境。 |
/etc/profile | 系统范围的登录 Shell 环境,修改需要管理员权限。 |
修改后可立即加载,而不必重新登录:
source ~/.bashrc
# 或
source /etc/profile
在不同发行版、桌面终端和 Shell(Bash、Zsh 等)中,实际加载链可能不同;应先确认自己正在使用什么 Shell:
echo $SHELL
把自定义脚本加入 PATH
课件示例在 /home/itheima/myenv 下创建 mkhaha,再将目录追加到 PATH:
export PATH=$PATH:/home/itheima/myenv
实际操作至少还要满足两个条件:文件内容是能被系统执行的脚本,且文件拥有可执行权限。一个更可迁移的完整示例:
mkdir -p "$HOME/myenv"
vim "$HOME/myenv/mkhaha"
在 mkhaha 中写入:
#!/usr/bin/env bash
echo "哈哈哈哈哈"
然后:
chmod +x "$HOME/myenv/mkhaha"
export PATH="$PATH:$HOME/myenv"
mkhaha
如果希望永久生效,把下面这一行加入自己的 ~/.bashrc,再执行 source ~/.bashrc:
export PATH="$PATH:$HOME/myenv"
不要随意把不可信目录或当前目录 . 放到 PATH 前面,否则可能执行到同名的恶意脚本。
文件传输:FinalShell 图形界面与 rz/sz
FinalShell 的文件视图
课件演示了 FinalShell 的文件管理面板:
- 在远程目录中选中文件,右键下载,或拖拽到本地;
- 从本地拖入远程目录,或使用上传按钮;
- 上传、下载完成后,在两端分别核对文件名、大小和目标目录。
图形方式适合初学时直观看到本地和远程目录;正式操作仍应注意是否传到了正确账号和正确路径。
rz 和 sz
课件使用 lrzsz 工具:
sudo yum -y install lrzsz
命令含义:
# 在终端中唤起本地文件选择,上传到当前远程目录
rz
# 把远程文件交给终端客户端下载
sz 要下载的文件
例如:
sz test.tar.gz
rz/sz 依赖终端客户端的 ZMODEM 支持。FinalShell、SecureCRT、XShell 等客户端通常可支持,但浏览器终端或某些 SSH 客户端未必支持。课件中 FinalShell 的下载目录示例为桌面的 fsdownload;实际保存位置以当前客户端设置为准。
无论图形上传还是 rz,传输完成后都应做一次基本校验:
ls -lh 文件名
对重要安装包、镜像或归档文件,再比对发布方提供的校验和。
压缩与归档:tar、zip、unzip
常见后缀中:
| 后缀 | 含义 |
|---|---|
.tar | tar 归档:把多个文件和目录打包成一个文件,本身通常不压缩。 |
.gz | gzip 压缩流,通常压缩单个文件。 |
.tar.gz / .tgz | 先 tar 打包、再 gzip 压缩,因此适合多个文件或目录。 |
.zip | 常见跨平台压缩格式。 |
.7z、.rar | 其他常见格式;本篇课件没有要求相应命令。 |
tar:打包、压缩、解包
课件格式:
tar [-c -v -x -f -z -C] 参数...
参数含义:
| 参数 | 含义 |
|---|---|
-c | 创建归档。 |
-v | 显示处理过程。 |
-x | 解开归档。 |
-f | 指定归档文件名;按照课件的组合写法,归档文件参数应紧跟在 f 之后。 |
-z | 使用 gzip 压缩或解压。 |
-C | 解压到指定目录。 |
创建一个未压缩的 tar 包:
tar -cvf test.tar 1.txt 2.txt 3.txt
创建 gzip 压缩的 tar 包:
tar -zcvf test.tar.gz 1.txt 2.txt 3.txt
解开 tar 包:
tar -xvf test.tar
tar -xvf test.tar -C /home/itheima
解开 tar.gz 包:
tar -zxvf test.tar.gz -C /home/itheima
-C 的目标目录必须事先存在。解压来自不可信来源的归档前,应先查看其中包含什么路径,避免意外覆盖:
tar -tf test.tar
tar -ztf test.tar.gz
zip:创建 zip 压缩包
课件格式:
zip [-r] 参数...
压缩多个普通文件:
zip test.zip a.txt b.txt c.txt
压缩目录时必须加 -r 递归处理目录内容:
zip -r test.zip test itheima a.txt
命令中的第一个参数是目标 zip 文件名,后面才是要加入归档的文件和目录。
unzip:解压 zip
课件格式:
unzip [-d] 参数
示例:
unzip test.zip
unzip test.zip -d /home/itheima
不带 -d 时解压到当前目录;带 -d 时解压到指定目录。与 tar 一样,先确认当前目录和目标目录,避免把文件散落到错误位置或覆盖已有同名文件。
本篇命令清单
# 主机监控
top
top -p PID
top -d 秒
top -c
top -n 次数
top -b -n 3 > /tmp/top.tmp
top -i
top -u 用户名
df -h
iostat -x 3 2
sar -n DEV 3 2
# 环境变量
env
env | grep PATH
echo $PATH
echo ${PATH}ABC
export ITHEIMA=666
source ~/.bashrc
# 传输
sudo yum -y install lrzsz
rz
sz 要下载的文件
# 归档
tar -cvf test.tar 1.txt 2.txt 3.txt
tar -zcvf test.tar.gz 1.txt 2.txt 3.txt
tar -xvf test.tar
tar -xvf test.tar -C /home/itheima
tar -zxvf test.tar.gz -C /home/itheima
zip test.zip a.txt b.txt c.txt
zip -r test.zip test itheima a.txt
unzip test.zip
unzip test.zip -d /home/itheima
至此,这套 Linux 实用操作课件中的讲授内容已经按“执行命令 → 配置网络 → 排查服务 → 观察和交付文件”的实际使用顺序整理完成。课后的重复总结页和练习题没有单独展开。