缘博客
发布日期

Linux实用操作(四):主机监控、环境变量、传输与压缩归档

作者
  • 姓名
    社交账号

本篇学习范围

前面已经能安装服务、配置网络、定位端口和进程。真正日常使用时,还需要回答四类问题:

  1. 主机现在是 CPU 忙、内存紧、磁盘满,还是网络 I/O 有瓶颈?
  2. 为什么同一条命令在一个终端能执行、另一个终端却提示找不到?
  3. 怎样在本地与 Linux 服务器之间可靠地传文件?
  4. 怎样把多个文件打包、压缩、解压到指定位置?

本篇覆盖课件后半部分所有讲授命令:topdfiostatsarenvexportrz/sztarzipunzip


top:实时看进程与系统负载

top

top 会默认约每 5 秒刷新一次。按 qCtrl + C 退出。它的界面可以分成“系统总览”和“进程列表”两部分。

系统总览的五行信息

区域典型字段应怎样理解
第 1 行当前时间、up、登录用户数、load averageload 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 stCPU 时间分布,见下表。
第 4 行Mem: total/free/used/buff/cache物理内存总量、空闲、已用、缓冲/页缓存。Linux 用空闲内存做缓存是正常现象。
第 5 行Swap: total/free/usedavail Mem交换分区与可用物理内存。avail Mem 是估算可立即分配的物理内存,不是 buff/cache

CPU 行中的缩写:

字段含义
us用户态程序占用 CPU 的时间。
sy内核态处理占用 CPU 的时间。
ni被设置了 nice 值的用户进程所占 CPU 时间;不是“高优先级”的同义词。
idCPU 空闲时间。
wa等待 I/O 的时间比例;持续偏高时常要结合磁盘或网络 I/O 进一步看。
hi处理硬件中断的时间。
si处理软件中断的时间。
st虚拟化环境中被宿主机“偷走”的 CPU 等待时间。

进程列表字段

字段含义
PID进程 ID。
USER启动进程的用户。
PR调度优先级。
NInice 值;在常见 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:dfiostatsar 各看一层

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平均请求队列长度。
awaitI/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当前工作目录。
PATHShell 查找外部可执行命令的目录列表,目录之间用冒号分隔。

例如:

env | grep PATH
echo $PATH
echo ${PATH}ABC

第二个 echo 会展开 PATH;第三个示例说明变量名和紧跟的普通字符连在一起时,可以用花括号明确边界:输出的是 PATH 的值再拼接 ABC

一个重要校正:cd 不靠 PATH 查找

课件中用 cd 讲路径查找时容易引起误解。cd 通常是 Shell 内建命令,不是 /usr/bin/cd 这样的外部可执行文件;查看它应使用:

type cd

PATH 主要用于查找像 lsgrepjava 这类外部可执行命令。可以比较:

type ls
command -v ls

临时设置:export

课件格式:

export 变量名=变量值

例如:

export ITHEIMA=666
echo $ITHEIMA

这项设置只对当前 Shell 和它之后启动的子进程有效。关闭这个终端或重新登录后,临时变量通常会消失。

永久设置:.bashrc/etc/profilesource

如果希望每次打开 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 的文件管理面板:

  1. 在远程目录中选中文件,右键下载,或拖拽到本地;
  2. 从本地拖入远程目录,或使用上传按钮;
  3. 上传、下载完成后,在两端分别核对文件名、大小和目标目录。

图形方式适合初学时直观看到本地和远程目录;正式操作仍应注意是否传到了正确账号和正确路径。

rzsz

课件使用 lrzsz 工具:

sudo yum -y install lrzsz

命令含义:

# 在终端中唤起本地文件选择,上传到当前远程目录
rz

# 把远程文件交给终端客户端下载
sz 要下载的文件

例如:

sz test.tar.gz

rz/sz 依赖终端客户端的 ZMODEM 支持。FinalShell、SecureCRT、XShell 等客户端通常可支持,但浏览器终端或某些 SSH 客户端未必支持。课件中 FinalShell 的下载目录示例为桌面的 fsdownload;实际保存位置以当前客户端设置为准。

无论图形上传还是 rz,传输完成后都应做一次基本校验:

ls -lh 文件名

对重要安装包、镜像或归档文件,再比对发布方提供的校验和。


压缩与归档:tarzipunzip

常见后缀中:

后缀含义
.tartar 归档:把多个文件和目录打包成一个文件,本身通常不压缩。
.gzgzip 压缩流,通常压缩单个文件。
.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 -dtop -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 实用操作课件中的讲授内容已经按“执行命令 → 配置网络 → 排查服务 → 观察和交付文件”的实际使用顺序整理完成。课后的重复总结页和练习题没有单独展开。