清理 Linux 磁盘空间有多种方法,以下是一套系统、安全、高效的操作步骤,适用于大多数主流发行版(如 Ubuntu、Debian、CentOS、Fedora 等):
---
### 🔍 1. **查看磁盘使用情况**
先定位占用空间大的目录或文件:
```bash
df -h # 查看各分区使用率
du -sh /* 2>/dev/null # 查看根目录下各子目录大小(忽略权限错误)
du -sh /home/* # 查看各用户目录大小(重点关注)
ncdu / # 更友好的交互式磁盘分析工具(需安装:`sudo apt install ncdu`)
```
---
### 🧹 2. **常见清理项**
#### ✅ A. 清理包管理器缓存
- **APT(Debian/Ubuntu)**
```bash
sudo apt clean # 删除所有已下载的.deb包缓存(安全)
sudo apt autoremove # 删除不再需要的依赖包(建议先检查:`apt autoremove --dry-run`)
```
- **DNF/YUM(Fedora/CentOS/RHEL)**
```bash
sudo dnf clean all # 清理缓存
sudo dnf autoremove # 删除无用依赖
```
- **Pacman(Arch)**
```bash
sudo pacman -Sc # 清理旧包缓存(保留当前安装版本)
sudo pacman -Scc # 彻底清理(谨慎)
```
#### ✅ B. 清理旧内核(Ubuntu/Debian 常见)
```bash
# 查看已安装内核
dpkg --list | grep linux-image
# 安全删除旧内核(保留最新1–2个)
sudo apt purge linux-image-5.4.0-xx-generic # 替换为旧版本号
# 或使用工具:
sudo apt install byobu
sudo purge-old-kernels # 自动保留最新2个
```
#### ✅ C. 清理日志文件(谨慎!)
```bash
# 查看大日志
sudo journalctl --disk-usage
# 限制 journal 日志大小(例如保留100MB)
sudo journalctl --vacuum-size=100M
# 清理 /var/log(注意:勿直接 `rm *.log`!)
sudo find /var/log -type f -name "*.log" -size +50M -exec ls -lh {} \;
# 安全方法:清空大日志(保留文件句柄)
sudo truncate -s 0 /var/log/syslog
sudo truncate -s 0 /var/log/kern.log
# 或使用 logrotate + 重启服务
```
#### ✅ D. 删除临时文件
```bash
sudo rm -rf /tmp/* # 重启后通常自动清,谨慎手动删
sudo rm -rf /var/tmp/* # 长期临时文件
rm -rf ~/.cache/* # 用户级缓存(如浏览器、thunar等)
```
#### ✅ E. 查找并删除大文件/旧文件
```bash
# 查找 >100MB 的文件(排除/proc等虚拟文件系统)
sudo find / -xdev -type f -size +100M -exec ls -lh {} \; 2>/dev/null
# 查找30天未修改的大文件
find ~ -type f -size +50M -mtime +30 -ls
# 常见嫌疑位置:
~/.local/share/Trash/ # 回收站
~/.cache/thumbnails/ # 缩略图缓存
~/.npm / ~/.yarn / ~/.gradle # 构建工具缓存
/var/lib/docker/ # Docker 镜像/容器(若不用 Docker 可清理或卸载)
```
---
### 🛠️ 3. **进阶工具推荐**
| 工具 | 用途 |
|------|------|
| `ncdu` | 交互式磁盘分析,支持删除 |
| `bleachbit` | 图形化清理(注意:默认配置较激进,慎用系统清理) |
| `stacer` | 系统优化工具(含磁盘清理) |
> ⚠️ 警告:**避免盲目执行网上“一键清理”脚本**,可能误删关键文件。
---
### ✅ 安全原则
- 先用 `ls` 或 `du -sh` 确认内容,再 `rm`
- 重要操作前备份:`cp /path/to/file ~/backup/`
- 不确定的文件 → 先 Google 查用途(如 `/var/lib/apt/lists/` 是软件源索引,可删但下次 update 会重建)
需要我帮你分析具体哪个目录占空间大?可以贴出 `df -h` 和 `du -sh / 2>/dev/null | sort -hr | head -n 20` 的输出,我来协助判断。