一、常用命令介绍
1. df --- 查看磁盘整体使用情况
bash
# 以人类可读格式显示各分区使用情况
df -h
# 只看指定目录所在分区
df -h /tmp
输出示例:
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 100G 82G 18G 82% /
2. du --- 查看目录/文件占用空间
bash
# 查看指定目录总大小
du -sh /tmp
# 查看当前目录下各子目录大小,按大小降序排列
du -sh /tmp/* | sort -rh | head -20
| 参数 | 说明 |
|---|---|
-s |
只显示汇总大小 |
-h |
人类可读格式(K/M/G) |
--max-depth=1 |
只统计一层子目录 |
3. find --- 按条件查找文件
bash
find <路径> [条件] [动作]
常用条件:
| 参数 | 说明 | 示例 |
|---|---|---|
-type f |
只查文件 | |
-type d |
只查目录 | |
-name "*.log" |
按文件名匹配 | |
-size +100M |
大于 100M | -size +1G |
-mtime +7 |
修改时间超过 7 天 | |
-mmin +720 |
修改时间超过 720 分钟 | |
-maxdepth 1 |
不递归子目录 |
常用动作:
| 动作 | 说明 |
|---|---|
-exec ls -lh {} + |
列出文件详情(批量) |
-exec rm -fv {} \; |
逐个删除并输出日志 |
-delete |
直接删除(慎用) |
4. ls --- 列出文件详情
bash
# 按时间降序
ls -lht
# 按大小降序
ls -lhS
| 参数 | 说明 |
|---|---|
-l |
详细信息 |
-h |
人类可读大小 |
-t |
按修改时间排序(新→旧) |
-S |
按文件大小排序(大→小) |
-r |
反转排序 |
5. sort --- 排序
bash
# 按第5列(文件大小)降序排列
... | sort -k5 -rh
| 参数 | 说明 |
|---|---|
-r |
降序 |
-h |
识别人类可读单位(K/M/G) |
-k5 |
按第 5 列排序 |
二、实战:清理 /tmp 目录大文件
背景
服务器磁盘告警,排查发现 /tmp 目录下堆积了大量临时缓存文件,需要清理过期的大文件释放空间。
Step 1:确认磁盘与目录占用
bash
# 查看分区使用率
df -h
# 确认 /tmp 占用
du -sh /tmp
Step 2:预览待清理文件
筛选条件:
- 修改时间超过 12 小时(720 分钟)
- 文件大小超过 100M
- 按修改时间降序排列
bash
find /tmp -maxdepth 1 -type f -name "xxx-cache-*" -mmin +720 -size +100M -exec ls -lht {} + 2>/dev/null
Step 3:确认无误后执行删除
bash
find /tmp -maxdepth 1 -type f -name "xxx-cache-*" -mmin +720 -size +100M -exec rm -fv {} \;
Step 4:验证结果
bash
du -sh /tmp
df -h
三、注意事项
⚠️ 先预览,再删除! 永远不要跳过确认步骤。
- 删除前务必用
ls预览,确认文件列表无误 - 根据业务调整时间和大小阈值
- 大量文件时
-exec ... {} +(批量)比{} \;(逐个)效率更高 - 生产环境建议记录操作日志,便于回溯
四、扩展:定时自动清理
将清理逻辑加入 crontab,避免反复手动操作:
bash
# 每天凌晨 3 点清理超过 12 小时且大于 100M 的临时文件
0 3 * * * find /tmp -maxdepth 1 -type f -name "xxx-cache-*" -mmin +720 -size +100M -exec rm -f {} \; >> /var/log/tmp_cleanup.log 2>&1
总结
处理思路:
df/du 定位 → find + ls 预览 → 确认 → find + rm 清理 → 验证 → 自动化
掌握 df、du、find、ls、sort 这几个命令的组合使用,基本可以应对日常磁盘空间排查与清理的绝大多数场景。