linux磁盘已满如何删除文件
- Linux
- 2025-08-07
- 4
du -sh
查找大文件/目录,
find /path -type f -exec rm {} ;
删除无用文件,清空
/tmp
及日志文件
在Linux系统中遭遇“磁盘已满”(Out of Space)是一个常见且棘手的问题,可能导致应用崩溃、服务中断甚至系统瘫痪,本文将系统化梳理从诊断到解决的完整流程,涵盖文件定位、安全删除、日志清理、存储优化等关键步骤,并提供可落地的操作指令与风险控制方案。
紧急响应:快速释放空间的核心思路
当收到类似 Write failed: No space left on device
的错误提示时,需立即采取以下行动优先级最高的措施:
# 第一步:查找当前目录下的最大文件/文件夹(递归深度设为1层) du -ah --max-depth=1 | sort -rh | head -n 5 # 第二步:跳转至占用最高的目录继续深入排查 cd /path/to/largest/directory du -sh | sort -rh
此组合拳能迅速锁定主要存储消耗源,若发现某个用户家目录(如 /home/username/
)占比异常,大概率存在未清理的大文件;若是 /var/log/
则需重点处理日志文件。
精准定位:多维度分析磁盘使用状况
全局视角 各挂载点用量统计
命令 | 作用说明 | 典型输出解读 |
---|---|---|
df -h |
显示所有挂载点的磁盘使用率 | 重点关注根分区()和使用率>90%的分区 |
df -Th |
额外显示文件系统类型及挂载选项 | 区分ext4/xfs等文件系统特性 |
df -i |
显示inode使用情况(解决”无剩余空间但无法创建文件”问题) | inode用完时即使有空余空间也无法新建文件 |
微观视角 具体文件追踪
# 按文件大小降序排列前20个文件(含完整路径) find / -type f -exec ls -l {} + 2>/dev/null | sort -nrk 5 | head -n 20 # 按修改时间排序近7天内新增的大文件(>100MB) find / -type f -mtime -7 -size +100M -exec ls -lh {} +
️ 注意:第一个命令会输出大量权限错误信息(重定向到/dev/null忽略),第二个命令可精准定位近期产生的冗余文件。
分类处置:不同场景下的删除策略
▶️ 场景1:用户生成的大文件(最常见)
特征:位于 /home//Downloads/
、/tmp/
或自定义目录,多为视频/压缩包/备份文件。
解决方案:
# 安全删除方案1:交互式确认后删除 find ~/Downloads -type f -size +1G -exec rm -i {} ; # 安全删除方案2:移动至回收站(需预装trash-cli) trash-put ~/Videos/.mp4
最佳实践:建立周期性清理脚本:
#!/bin/bash # 每日清理/tmp下超过3天的文件 find /tmp -mtime +3 -type f -delete
▶️ 场景2:系统日志膨胀(服务器特供)
高危区域:/var/log/
及其子目录(auth.log, syslog, journald日志等)。
清理策略:
| 日志类型 | 推荐操作 | 注意事项 |
|—————-|————————————————————————–|———————————–|
| Nginx访问日志 | cat /dev/null > /var/log/nginx/access.log
(清空) | 需配合日志轮转配置 |
| Systemd日志 | journalctl --vacuum-time=3d
(保留最近3天日志) | 不影响正在运行的服务 |
| Auditd审计日志 | ausearch -ts recent | audit2allow -d
→ 根据策略删除旧日志 | 需符合合规性要求 |
▶️ 场景3:Docker容器残留
# 删除所有已停止的容器+镜像+卷(生产环境慎用!) docker system prune -a --volumes # 选择性清理未使用的镜像 docker image prune -a --filter "dangling=true"
进阶技巧:对频繁部署的应用,建议配置--storage-opt size=...
限制容器存储上限。
深度清理:容易被忽视的隐藏空间占用者
包管理器缓存
发行版 | 清理命令 | 预期释放空间 |
---|---|---|
Ubuntu/Debian | sudo apt autoremove && sudo apt clean |
数百MB~数GB |
CentOS/RHEL | sudo yum clean all |
约500MB |
Arch Linux | sudo pacman -sc |
依赖关系复杂 |
孤立的软件包
# Debian系:查找完全没有依赖关系的孤立包 deborphan --guess-all | xargs apt-get remove -y # RPM系:查找孤儿依赖 package-cleanup --leaves --exclude-scripts | xargs yum remove -y
CoreDump内核转储文件
# 禁用核心转储生成(永久生效) echo "kernel.core_pattern=|/usr/bin/cat" >> /etc/sysctl.conf sysctl -p # 删除现有核心文件(谨慎操作!) find /var/lib/systemd/coredump/ -name 'core' -delete
长效机制:防止磁盘再次爆满
监控告警配置
# 安装agedu工具实现每日邮件报警 apt install agedu crontab -e # 添加以下内容 @daily root agedu -v / --warn-only --summary-only --mail-on-oversized --max-usage=90%
智能日志轮转
编辑 /etc/logrotate.conf
示例配置:
# 自定义日志轮转策略(保留最近7天,压缩至gzip格式) /var/log/myapp.log { daily rotate 7 compress delaycompress missingok notifempty create 0640 www-data www-data }
配额管理(针对多用户场景)
# 为用户john设置软硬配额(软配额=警告阈值,硬配额=绝对上限) quotacheck -cumg /dev/sda1 quotaon /dev/sda1 setquota -u john 8G 10G /home/john
特殊情形处理指南
情况1:删除文件时报”Device or resource busy”
原因:文件正被进程占用。
解决:
# 查找占用进程PID lsof | grep deleted_file.txt # 终止相关进程(谨慎操作!) kill -9 <PID> # 或重启对应服务后再删除 systemctl restart httpd.service
情况2:inode耗尽但磁盘有空余空间
诊断:df -i
查看inode使用率。
解决:
# 查找小文件泛滥的目录(每个文件至少占1个inode) find /path/to/suspect -xdev -type f -printf '%hn' | sort | uniq -c | sort -nr # 合并碎片化的小文件(如图片库) montage .jpg -tile 4x4 -geometry 256x256 output.jpg
相关问答FAQs
Q1: 我不小心删除了重要文件怎么办?还能恢复吗?
A: 立即停止对该分区的任何写入操作!尝试以下方法:
- EXT系列文件系统:使用
extundelete
工具扫描恢复:sudo apt install extundelete sudo umount /dev/sda1 # 必须先卸载分区! extundelete /dev/sda1 --restore-all
- 专业数据恢复:若上述无效,建议关机后拆盘送专业机构恢复。️ 切勿继续往该分区写入数据!
Q2: 如何设置自动清理/tmp目录的任务?
A: 创建系统级定时任务:
# 编辑crontab crontab -e # 添加以下行(每天凌晨3点清理/tmp下超过24小时的文件) 0 3 find /tmp -mtime +1 -type f -delete >/dev/null 2>&1
优化建议:对于高频使用的临时目录,可采用tmpfs
内存文件系统加速访问:
# 修改/etc/fstab添加如下行(重启生效) tmpfs /tmp tmpfs defaults,noatime,mode=1777