1. 快速定位大文件/目录(定位问题根源)
要释放磁盘空间,首先需要明确哪些文件或目录占用了大量空间。常用命令如下:
df -h:查看各分区磁盘使用情况,定位占用率高的分区(如根分区/或/var);du -sh * | sort -rh | head -n 10:进入目标分区(如/var),列出当前目录下各子目录/文件的大小,按从大到小排序,显示前10项;ncdu工具:交互式可视化工具,更直观地浏览目录结构并排序文件大小(安装:sudo apt install ncdu,使用:sudo ncdu /path/to/search)。2. 清理无用临时文件(快速释放小空间)
临时文件(如/tmp、/var/tmp)通常是无用的缓存或临时数据,清理后可快速释放空间:
sudo rm -rf /tmp/* /var/tmp/*(注意:重启后这些目录会自动重建,但需确保无正在运行的程序占用其中的文件)。3. 清理包管理器缓存(释放软件包缓存)
包管理器(如APT、DNF)会缓存已下载的软件包(.deb、.rpm文件),长期积累会占用大量空间:
sudo apt clean(清理所有已下载的软件包)、sudo apt autoclean(仅清理过期的旧版本包)、sudo apt autoremove --purge(移除自动安装且不再需要的依赖);sudo yum clean all(清理所有缓存);sudo dnf clean all(清理所有缓存)。4. 管理日志文件(解决日志膨胀问题)
日志文件(如/var/log/syslog、/var/log/apache2/access.log)会随时间不断增长,是磁盘空间的主要占用者之一:
sudo find /var/log -name "*.log" -mtime +7 -delete(删除7天前的.log文件);sudo truncate -s 0 /var/log/syslog(清空syslog文件内容,不删除文件本身);logrotate工具配置日志轮转策略(默认配置文件:/etc/logrotate.conf或/etc/logrotate.d/下的分应用配置),定期压缩、删除旧日志。5. 处理被进程占用但已删除的大文件(释放“隐形”空间)
当一个文件被进程写入时,即使使用rm命令删除,其磁盘空间也不会立即释放(直到进程关闭文件句柄)。可通过以下步骤释放:
sudo lsof | grep deleted(列出所有已删除但仍被进程占用的文件);sudo systemctl restart <进程名>或sudo kill -9 <PID>重启进程,释放空间。6. 清理旧内核版本(释放/boot分区空间)
旧内核版本会占用/boot分区空间(尤其是频繁升级内核的系统),需定期清理:
dpkg --list | grep linux-image(Debian/Ubuntu)或rpm -qa kernel(CentOS/RHEL);sudo apt remove linux-image-<版本号>(Debian/Ubuntu)或sudo yum remove kernel-<版本号>(CentOS/RHEL)删除旧版本。7. 卸载无用软件包及依赖(释放软件占用空间)
长期未使用的软件包及其依赖会占用大量空间,可通过以下命令卸载:
sudo apt autoremove --purge(移除自动安装且不再需要的依赖及软件包);sudo yum autoremove;sudo dnf autoremove。8. 压缩大文件/目录(减少空间占用)
对于无法删除的大文件(如数据库备份、视频文件),可使用压缩工具减少其占用空间:
tar命令压缩:tar -czvf <压缩文件名>.tar.gz <文件或目录>(如tar -czvf large_file.tar.gz /path/to/large_file);gzip命令压缩:gzip <文件名>(如gzip large_file.log,生成large_file.log.gz,原文件会被删除)。9. 清理Docker系统(释放容器/镜像占用空间)
若系统运行了Docker容器,其镜像、容器、卷等会占用大量空间,可通过以下命令清理:
docker system prune -a(删除所有未使用的镜像、容器、网络、构建缓存,执行前需确认无重要数据);docker builder prune(清理构建缓存)、docker volume prune(清理未使用的数据卷)、docker network prune(清理未使用的网络)。10. 自动化清理(避免重复操作)
为避免频繁手动清理,可编写综合清理脚本并通过cron定时执行:
cleanup.sh):#!/bin/bash
echo "开始执行系统清理任务..."
# 清理旧日志文件(7天前)
sudo find /var/log -name "*.log" -mtime +7 -delete
# 清理包管理器缓存(Debian/Ubuntu)
sudo apt clean && sudo apt autoclean
# 清理临时文件
sudo rm -rf /tmp/* /var/tmp/*
# 清理用户缓存
rm -rf ~/.cache/*
# 清空回收站
rm -rf ~/.local/share/Trash/*
echo "系统清理完成!当前磁盘使用情况:"
df -h
crontab -e添加以下行,设置每周日凌晨2点执行清理:0 2 * * 0 /path/to/cleanup.sh。