服务器磁盘清理的核心命令包括Linux下的du、df、find和rm,以及Windows下的cleanmgr、diskpart和del,配合定期脚本能有效释放空间。
Linux磁盘清理命令大全
Linux服务器运维中,磁盘清理命令几乎每天都要打几次交道。df和du是两把刷子,df -h一眼看清分区占用,du -sh 快速定位目录大小,真正高效的清理往往需要组合拳。
服务器磁盘空间不足时常用清理命令
当监控报警或登录后看到“磁盘空间不足”时,先别慌,按这套流程走:用df -h确认哪个分区满了,然后du -sh /分区目录/ | sort -rh列出占用最大的文件夹,通常/var/log、/tmp、/home是重灾区。find命令可以精准删除过期文件,比如删除30天以上的日志:find /var/log -type f -name ".log" -mtime +30 -delete,如果不想直接删,先-exec ls -lh {} ;看看大小。
还有一种情况,inode耗尽也会提示空间不足,这时用df -i查看,如果/dev/sda1用了100%,需要清理小文件。find /tmp -type f -delete能快速清理临时文件。lsof | grep deleted可以找出占用空间的已删除文件,找到后重启对应进程即可释放。
清理系统日志与缓存
系统日志是最容易积累的。journalctl管理的systemd日志,可以设置保留时间:journalctl --vacuum-time=2d。/var/log下的其他日志,可以用logrotate配置轮转,但手动清理时,find /var/log -type f -name ".gz" -delete能删除旧压缩包。缓存方面,sync; echo 3 > /proc/sys/vm/drop_caches可以清理页面缓存,但生产环境慎用,最好结合实际需求。
软件包管理器缓存清理
Debian/Ubuntu系统用apt-get clean和apt-get autoremove,RHEL/CentOS使用yum clean all和package-cleanup --oldkernels --count=2。这些命令能释放数百MB空间,特别是在长期未清理的情况下,对于云服务器,清理命令同样适用,但需注意云盘快照占用的空间,这部分清理可能涉及额外费用。
Windows服务器磁盘清理命令对比
Windows服务器同样离不开磁盘清理,而且工具选择更多,图形化工具cleanmgr适合单次操作,命令行工具适合批量脚本。
图形化工具cleanmgr
cleanmgr可以通过参数预先配置:cleanmgr /sageset:1启动设置界面,勾选需要清理的项目(如临时文件、回收站、日志文件等),然后cleanmgr /sagerun:1执行。对于远程桌面连接,这种方式很直观,但无法自动化。
命令行清理操作
del命令配合forfiles实现条件删除:forfiles /p "C:inetpublogs" /s /m . /d -30 /c "cmd /c del @path"删除30天前的IIS日志。vssadmin delete shadows /all清理卷影副本,可能释放大量空间,但会删除所有系统还原点,需谨慎。wevtutil可以清理事件日志,例如wevtutil cl System清除系统日志,wevtutil cl Application清除应用程序日志。fsutil命令可以查询卷信息,辅助判断。
磁盘清理脚本编写
Windows下PowerShell脚本是主流,一个简单脚本:$threshold = 80GB; $drive = Get-WmiObject Win32_LogicalDisk -Filter "DeviceID='C:'"; if ($drive.FreeSpace -lt $threshold) { # 执行清理命令 }。行业共识认为,脚本化是保证周期性清理的基础。
服务器磁盘清理脚本编写与自动化
无论Linux还是Windows,编写自动化脚本都是运维提效的关键,脚本需要具备检查、清理、记录三个基本功能。
编写可复用的清理脚本
Linux脚本示例:
#!/bin/bash
THRESHOLD=80
USAGE=$(df / | grep / | awk '{print $5}' | sed 's/%//')
if [ $USAGE -gt $THRESHOLD ]; then
find /var/log -type f -name ".log" -mtime +30 -delete
find /tmp -type f -atime +7 -delete
journalctl --vacuum-time=3d
apt-get clean
fi
关键点:写日志文件,记录清理了多少文件,释放了多少空间。
Windows PowerShell脚本示例:
$threshold = 80
$drive = Get-WmiObject Win32_LogicalDisk -Filter "DeviceID='C:'"
$percentUsed = [math]::Round(($drive.Size - $drive.FreeSpace) / $drive.Size 100)
if ($percentUsed -gt $threshold) {
Remove-Item "C:Logs" -Recurse -Force -ErrorAction SilentlyContinue
# 其他清理命令
}
-WhatIf参数可以模拟执行,防止误删。
定时任务配置
Linux用crontab,0 3 0 /usr/local/bin/cleanup.sh每周日凌晨3点执行,Windows用任务计划程序,触发器设为每天或每周,操作为启动PowerShell脚本。对于云服务器,很多云厂商的监控服务可以直接触发脚本,比如磁盘使用率超过85%时执行清理动作。
服务器磁盘清理注意事项与最佳实践
清理磁盘不能只图一时爽快,误删文件可能导致服务中断,业内专家指出,在清理前,最好先了解一下哪些文件正在被占用。lsof | grep '(deleted)'可以看到已删除但仍占空间的文件,这类文件需要重启进程才能释放。
备份优先原则
重要数据在删除前必须备份,可以使用cp或tar打包到其他目录,甚至异地备份,对于不确定的文件,先移动到临时目录,观察一段时间再删除。定期清理策略能降低存储成本,根据使用场景合理设置保留天数。
关注系统分区
根分区和系统盘C:一旦写满,系统可能无法启动。
建议将日志、数据等分区独立出来,如/var、/home、/data,这样即使某个分区满,也不影响系统核心,对于Docker环境,docker system prune -a能清理无用的容器、镜像和网络,释放大量空间。
监控与预防
部署磁盘监控工具,如Monit、Nagios或云监控服务,设置告警阈值。定期执行清理脚本,而不是等到告警再处理,相当一部分运维人员表示,日志文件是磁盘空间的主要杀手,因此合理配置日志轮转比事后清理更省心。
服务器磁盘清理命令常见问题
如何快速定位占用磁盘空间的大文件?
Linux下用du -ah / | sort -rh | head -20,或者find / -type f -size +1G -exec ls -lh {} ;,Windows下用dir /s /a:-d /o:-s | findstr /c:"bytes",但更建议使用TreeSize或WizTree这类工具,图形化界面更直观。
Linux和Windows磁盘清理命令有哪些区别?
Linux命令多为单一功能组合,通过管道实现复杂操作;Windows命令则更偏向图形工具和批处理,但两者都支持脚本化,Linux用Shell和crontab,Windows用PowerShell和任务计划程序。核心思路一致:先定位大文件,再安全删除。
编写清理脚本时需要注意什么?
脚本必须包含模拟执行模式(-WhatIf或--dry-run),避免直接删除。日志记录不可或缺,方便审计清理效果,脚本要定期测试,确保在磁盘真正满时能正常工作。清理策略要保留一定冗余,不要清理到100%再用,容易触发服务异常。
定期清理服务器磁盘,能有效降低存储成本,减少因磁盘空间不足导致的故障,Linux和Windows各有专用命令,掌握它们并配合自动化脚本,才能让服务器长期稳定运行。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/547364.html




