解压安装包和排查磁盘空间
本期视频 · 建议先看
10分05秒,1080P硬字幕版。练习请使用隔离测试环境。
先看包里有什么、空间够不够,再决定解到哪里。Linux 入门不是背一串命令,而是知道对象、影响、证据和停止条件。
本期目标
业务安装包只有两百兆,解压后却可能占用几倍空间;如果直接在生产目录解压,还可能把相对路径覆盖到现有文件。
在医疗信息化现场,接口平台、前置机、数据库周边程序、消息服务和文件交换服务经常运行在 Linux 上。初学者最容易犯的错误,不是少记一个参数,而是没有确认当前环境就执行、看到命令无报错就认为完成、遇到异常后不断追加更高风险的命令。本期把工作拆成可观察、可验证的步骤,并统一使用示例地址、模拟账号和隔离目录。
完成后你应该能够:
本期风险等级为 yellow。绿色表示只读查询,黄色表示会改变文件或状态,红色表示可能中断业务。任何黄色和红色操作都必须先确认授权、影响、验证方法和回滚条件。
工作场景
安装包需要解压,但服务器提示空间不足,需要定位占用来源。
假设工单已经给出测试机、任务范围、时间窗口和验收人。开始前先执行 whoami、hostnamectl 和 pwd,把当前身份、目标主机和工作目录与工单逐项核对。这个动作看起来简单,却能拦住大量“在错机器、错账号、错目录做了正确命令”的事故。
本期采用的核心模型是:df 观察文件系统整体容量,du 统计目录实际占用,lsblk 展示块设备关系,三者回答的问题不同。压缩包处理要先列清单,再估算空间,最后解压到新建临时目录并核对内容。
执行任何命令前,都问自己四句话:我要解决什么问题;命令读取或改变哪个对象;成功应该看到什么;失败时停在哪里、如何恢复。如果只能回答前两句,说明操作方案还不完整。
操作步骤
本次演示只在个人练习目录或批准的测试服务中进行。示例里的 training-user、192.0.2.10、medapp、路径和进程号都不对应真实医院。正式操作必须从工单和现场查询结果取得参数。
第 1 步:查看各文件系统容量和使用率
df -h
这条命令的任务是查看各文件系统容量和使用率。输入前先确认当前用户、主机和目录,路径、名称、端口或进程号都以本次工单和查询结果为准,不能照抄示例。执行完成后,重点记录目标挂载点,不只看根目录。如果输出与预期不同,先停下来读取完整错误信息,不追加强制参数,也不为了绕过权限而临时切换共享高权限账号。
第 2 步:统计业务目录一级子项占用
du -sh /opt/medapp/*
这条命令的任务是统计业务目录一级子项占用。输入前先确认当前用户、主机和目录,路径、名称、端口或进程号都以本次工单和查询结果为准,不能照抄示例。执行完成后,限制范围,避免从根目录全盘扫描。如果输出与预期不同,先停下来读取完整错误信息,不追加强制参数,也不为了绕过权限而临时切换共享高权限账号。
第 3 步:查看磁盘、分区与挂载关系
lsblk
这条命令的任务是查看磁盘、分区与挂载关系。输入前先确认当前用户、主机和目录,路径、名称、端口或进程号都以本次工单和查询结果为准,不能照抄示例。执行完成后,只读识别,不执行分区和格式化命令。如果输出与预期不同,先停下来读取完整错误信息,不追加强制参数,也不为了绕过权限而临时切换共享高权限账号。
第 4 步:只列出 tar.gz 前几项
tar -tzf medapp.tar.gz | head
这条命令的任务是只列出 tar.gz 前几项。输入前先确认当前用户、主机和目录,路径、名称、端口或进程号都以本次工单和查询结果为准,不能照抄示例。执行完成后,检查是否包含绝对路径或异常上级路径。如果输出与预期不同,先停下来读取完整错误信息,不追加强制参数,也不为了绕过权限而临时切换共享高权限账号。
第 5 步:建立独立解压目录
mkdir -p ~/staging/medapp-1.1
这条命令的任务是建立独立解压目录。输入前先确认当前用户、主机和目录,路径、名称、端口或进程号都以本次工单和查询结果为准,不能照抄示例。执行完成后,确认目录为空且位于有足够空间的文件系统。如果输出与预期不同,先停下来读取完整错误信息,不追加强制参数,也不为了绕过权限而临时切换共享高权限账号。
第 6 步:解压到明确目录
tar -xzf medapp.tar.gz -C ~/staging/medapp-1.1
这条命令的任务是解压到明确目录。输入前先确认当前用户、主机和目录,路径、名称、端口或进程号都以本次工单和查询结果为准,不能照抄示例。执行完成后,完成后用 du -sh 和文件清单验证。如果输出与预期不同,先停下来读取完整错误信息,不追加强制参数,也不为了绕过权限而临时切换共享高权限账号。
第 7 步:只查看 zip 清单
unzip -l package.zip
这条命令的任务是只查看 zip 清单。输入前先确认当前用户、主机和目录,路径、名称、端口或进程号都以本次工单和查询结果为准,不能照抄示例。执行完成后,确认后再用 -d 指定目标目录。如果输出与预期不同,先停下来读取完整错误信息,不追加强制参数,也不为了绕过权限而临时切换共享高权限账号。
完成命令只是中间节点。文件类任务至少核对路径、大小、所有者、权限、时间戳或哈希中的适用项;进程和服务类任务核对 PID、启动日志、监听端口和业务功能;网络类任务按地址、路由、解析、监听和应用响应逐层记录。最终证据应让没有在场的同事也能判断发生了什么。
风险提醒
本期常见的错误做法有:
- 1. 直接在当前生产目录解压。 这会跳过范围确认或结果验证,应回到任务目标和只读基线重新判断。
- 2. 只看压缩包大小估算空间。 这会跳过范围确认或结果验证,应回到任务目标和只读基线重新判断。
- 3. 把 df 与 du 的数字直接等同。 这会跳过范围确认或结果验证,应回到任务目标和只读基线重新判断。
- 4. 磁盘满后先删未知日志。 这会跳过范围确认或结果验证,应回到任务目标和只读基线重新判断。
- 5. 对根目录执行无边界 du 导致长时间扫描。 这会跳过范围确认或结果验证,应回到任务目标和只读基线重新判断。
还要坚持三条贯穿全课程的红线。第一,不在培训材料、截图和聊天记录中出现患者数据、生产密码、私钥、令牌或完整内网拓扑。第二,不用 rm -rf、chmod -R 777、kill -9、关闭防火墙或反复重启来快速消除报错。第三,不把临时可用当成问题解决;安全策略被绕过、证据被覆盖或回滚不可用,都意味着任务尚未合格完成。
不在未确认内容和空间的情况下直接向生产目录解压。 如果现场条件与课程示例不同,以单位制度、产品运行手册、兼容矩阵和批准工单为准。课程教的是判断方法,不是要求在所有服务器照抄同一行命令。
故障与回滚
报错出现时先保留完整文字,不要只截最后一行。然后判断它属于对象不存在、权限不足、资源不足、服务状态、网络路径还是产品自身错误。以下是本期最常见的三个入口:
No space left on device
停止写入,记录目标挂载点并定位占用,不能盲删。同时记录发生时间、当前主机、完整命令和关键输出,方便后续复核。
Permission denied
换到授权暂存目录,不在业务目录强行解压。同时记录发生时间、当前主机、完整命令和关键输出,方便后续复核。
归档目录层级异常
不要解压,向交付方确认打包结构。同时记录发生时间、当前主机、完整命令和关键输出,方便后续复核。
如果本期包含状态变更,回滚不是临时想一个反向命令。变更前应记录原路径、原所有者、原权限、原进程或服务状态,并保留经过验证的备份。达到工单定义的失败条件时立即停止后续步骤,恢复原状态,再重复同一套只读验证。无法确认回滚对象时,宁可升级给负责人,也不要继续扩大影响范围。
课后练习
检查测试机目标文件系统空间,列出一个 tar.gz 或 zip 的内容,在 ~/staging 下解压并比较压缩前后大小;写出 df 与 du 数字不一致的两个可能原因。
提交材料包括:任务目标与环境说明;脱敏后的关键命令;每一步的预期和实际结果;对黄色或红色操作的影响、验证和回滚说明;最后的退出或恢复状态。禁止提交密码、真实生产 IP、患者数据、私钥、访问令牌和未脱敏的业务日志。
验收标准不是“命令都敲过一遍”,而是对象正确、参数能解释、结果有独立证据、异常有停止条件、变更可以恢复。下一期将进入第 8 期,继续把这套确认、执行、验证和回滚方法用于新的服务器任务。
参考资料
- • GNU:GNU Coreutils Manual
- • Red Hat:Managing file systems in RHEL 9
- • openEuler:Common Configurations