Linux 系统在使用过程中,随着时间推移会产生大量临时文件、缓存、日志及无用软件包,导致磁盘空间不足,影响系统运行效率,清理磁盘空间需要系统化操作,既要有效释放空间,又要避免误删关键文件,以下从基础检查到针对性清理,详细说明 Linux 磁盘空间清理的完整流程。
基础检查:定位空间占用大户
清理前需先明确磁盘空间分配情况,避免盲目操作,可通过以下命令快速定位:
查看磁盘整体使用情况
使用 df
命令查看各分区使用率,重点关注根分区()和家目录分区(/home
):
df -h # -h 以人类可读格式显示(如 K、M、G)
若某分区使用率超过 90%,需立即清理。
分析目录级空间占用
使用 du
命令递归查看目录大小,结合 sort
排序定位大目录:
du -sh /* 2>/dev/null | sort -rh | head -n 10 # 查看根目录下前10大目录
或进入家目录查看用户文件占用:
du -sh ~/* 2>/dev/null | sort -rh | head -n 10
可视化分析工具
对于图形界面用户,推荐使用 ncdu
(NCurses Disk Usage),交互式分析目录占用:
sudo apt install ncdu # Debian/Ubuntu sudo dnf install ncdu # CentOS/RHEL ncdu / # 扫描根目录
以下为常用磁盘检查命令速查表:
命令 | 用途 | 示例 |
---|---|---|
df -h |
查看分区使用率 | df -h |
du -sh 目录 |
查看指定目录总大小 | du -sh /var |
du -h --max-depth=1 |
查看当前目录下一级子目录大小 | du -h --max-depth=1 / |
ncdu |
交互式磁盘分析工具 | ncdu /home |
清理系统日志文件
系统日志(/var/log/
)是空间占用的常见来源,尤其是 syslog
、kern.log
等日志文件可能随时间增长至数 GB。
手动清理日志(需谨慎)
使用 truncate
命令清空日志文件(而非直接删除,避免影响日志服务):
sudo truncate -s 0 /var/log/syslog # 清空系统日志 sudo truncate -s 0 /var/log/kern.log # 清空内核日志
清理后需重启日志服务(如 rsyslog
):
sudo systemctl restart rsyslog
配置日志轮转(自动清理)
Linux 默认通过 logrotate
工具自动轮转日志,但需检查配置是否生效,编辑 /etc/logrotate.conf
或 /etc/logrotate.d/
下的配置文件,确保日志保留周期合理(如 7 天):
sudo vim /etc/logrotate.d/syslog # 示例配置 ``` 示例:
/var/log/syslog {
daily # 每天轮转
missingok # 日志不存在时忽略
rotate 7 # 保留7份旧日志
compress # 压缩旧日志
delaycompress # 延迟压缩(避免轮转当天压缩)
notifempty # 空文件不轮转
create 644 root root # 设置权限和所有者
}
执行 `logrotate -f /etc/logrotate.d/syslog` 强制轮转测试。
### 三、清理软件包管理器缓存
不同 Linux 发行版的包管理器会缓存已下载的安装包,长期占用空间。
#### 1. Debian/Ubuntu(APT)
APT 缓存位于 `/var/cache/apt/archives/`,清理命令:
```bash
sudo apt clean # 清理已下载的安装包(释放空间)
sudo apt autoremove # 删除不再需要的依赖包
CentOS/RHEL(DNF/YUM)
DNF 缓存位于 /var/cache/dnf/
,YUM 缓存位于 /var/cache/yum/
:
sudo dnf clean all # 清理所有缓存(包括包头、缓存数据) sudo dnf autoremove # 删除孤立依赖包
Arch Linux(Pacman)
Pacman 缓存位于 /var/cache/pacman/pkg/
,保留最近 3 次升级的包:
sudo paccache -r # 删除除最近3次外的所有旧包 sudo paccache -ruk0 # 删除无用的未安装包(依赖包)
清理临时文件
系统临时文件(/tmp
和 /var/tmp
)
/tmp
是临时文件目录,系统重启时会清空,但部分文件可能残留:
sudo rm -rf /tmp/* # 清空/tmp(注意:避免运行中程序使用) sudo rm -rf /var/tmp/* # 清空/var/tmp(重启后保留)
用户临时文件
用户家目录下的 ~/.cache
和 ~/.local/share/Trash
是临时文件集中地:
rm -rf ~/.cache/* # 清理用户缓存(浏览器、应用缓存等) rm -rf ~/.local/share/Files/* # 清理垃圾箱(GNOME)或 ~/.local/share/Trash/files/*(KDE)
应用特定缓存
- Docker:镜像和容器可能占用大量空间,定期清理:
docker system prune -a # 清理所有未使用的镜像、容器、网络
- Node.js:npm 缓存位于
~/.npm
,清理命令:npm cache clean --force
清理无用软件包和旧内核
删除孤立的软件包
安装软件包时可能自动安装依赖包,卸载主包后依赖包可能残留,可通过 autoremove
清理(前文已提及)。
删除旧内核
Linux 每次升级内核后,旧内核会保留在 /boot/
目录下,占用数百 MB 空间,查看已安装内核:
dpkg -l | grep linux-image # Debian/Ubuntu rpm -qa | grep kernel # CentOS/RHEL
删除旧内核(保留当前运行内核和最新1个旧内核):
- Debian/Ubuntu:
sudo apt purge linux-image-5.15.0-52-generic # 替换为旧内核版本号
- CentOS/RHEL:
sudo dnf remove kernel-core-5.4.0-91.el8 # 替换为旧内核版本号
查找并清理大文件
若上述清理后空间仍不足,需查找大文件并手动处理,使用 find
命令按大小筛选:
查找大于 100MB 的文件
find / -type f -size +100M -exec ls -lh {} ; 2>/dev/null | sort -k5 -hr
查找最近30天内未访问的大文件
find /home -type f -size +50M -atime +30 -exec rm -f {} ; 2>/dev/null
清理重复文件
使用 fdupes
工具查找重复文件并删除:
sudo apt install fdupes # 安装 fdupes -r /home # 递归查找/home下的重复文件
根据提示选择保留或删除重复文件。
注意事项
- 备份关键数据:清理前建议备份重要文件,避免误删导致数据丢失。
- 谨慎删除系统文件:避免直接删除
/var/log/
、/boot/
等系统目录下的文件,优先通过工具清理。 - 定期维护:建议设置定时任务(如
cron
),每周执行一次apt clean
、autoremove
等命令,避免空间再次不足。
相关问答 FAQs
Q1:清理磁盘空间后,使用 df -h
查看释放的空间未增加,是什么原因?
A:可能是因为有程序正在占用已删除的文件(如日志文件被进程打开),此时需重启相关服务或进程,释放文件描述符,若 syslog
被进程占用,执行 sudo systemctl restart rsyslog
后,空间才会释放,若删除的文件位于 ext4
等文件系统,且文件已被删除但 inode
未释放,可通过 sync
+ echo 3 > /proc/sys/vm/drop_caches
强制刷新缓存(谨慎使用)。
Q2:如何设置自动清理磁盘空间的定时任务?
A:使用 cron
设置定时任务,例如每周日凌晨3点自动清理 APT 缓存和孤立包:
sudo crontab -e # 编辑定时任务
0 3 * * 0 apt clean && apt autoremove -y >> /var/log/clean.log 2>&1
保存后,cron
会自动按计划执行,其他发行版可替换对应命令(如 dnf clean all && dnf autoremove -y
),可结合 logrotate
实现日志自动轮转,避免日志文件无限增长。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/36027.html