Linux磁盘爆满?别慌!这几个命令轻松搞定

在日常维护Linux系统时,磁盘空间不够用是个挺常见的麻烦事。如果磁盘满了,可能会导致程序出错、服务挂掉,严重时连系统都启动不了!不过别担心,学会几个常用的命令就能帮你快速定位问题,甚至轻松解决磁盘满的问题。接下来,我会介绍一些命令,帮你应对这种情况,确保系统稳定运行

首先,要了解当前磁盘空间的使用情况,得使用 df 命令:

df -h

-h 选项会以可读性较强的方式显示磁盘空间,输出类似:

Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       100G  90G   5G  95% /
tmpfs            16G  4G    12G  25% /dev/shm
/dev/sdb1       200G  100G  100G 50% /data

从输出可以看出,/dev/sda1 分区的使用率达到了 95%,说明系统根分区的空间已经接近满了。此时我们要针对 / 分区进行排查。

查看每个目录占用的空间

想要找出哪些目录占用了大量磁盘空间,可以使用 du 命令

du -sh /* | sort -h

这个命令会显示每个顶级目录的空间占用情况,并通过 sort 排序。输出大概是这样:

1.3G    /snap
2.6G    /opt
3.3G    /usr
7.8G    /var

通过上面的结果,我们可以快速发现 /var 占用了空间,可能是 7.8G 可能是我们需要关注的重点。

找出大文件

如果我们需要深入了解某个目录或子目录的文件占用情况,可以进入目录后使用 find 命令来查找大文件。例如,在 /var目录下找出所有大于100MB的文件:

find /var -type f -size +100M

将列出所有符合条件的文件,可以帮助我们快速定位大文件。接下来,根据文件的用途决定是否删除或者备份。

root@didiplus:~# find /usr -type f -size +100M
/usr/local/bin/1panel
/usr/local/cloudmonitor/bin/argusagent
/usr/bin/dockerd

清理日志文件

日志文件是磁盘空间的另一个大敌,尤其是在生产环境中。我们再次通过du 命令查看哪些日志文件占用了大量空间

root@didiplus:~# du -h /var/log/* | sort -rh
2.0G    /var/log/syslog
2.0G    /var/log/journal
533M    /var/log/atop

如果某些日志文件过大,可以根据需求进行清理。比如清空 syslog 文件:

sudo truncate -s 0 /var/log/syslog    # 保留文件属性和权限

或者通过 logrotate 工具设置日志轮换策略,避免日志文件无限制增长

清理临时文件

临时文件夹通常会存放一些不必要的临时文件,定期清理这些文件可以有效释放空间。使用 tmpwatch 或 rm 命令清理 /tmp 目录:

注意,/tmp 目录中的文件一般都是不重要的临时文件,但清理前最好确认没有正在使用的程序或服务依赖其中的文件

sudo rm -rf /tmp/*

卸载不必要的软件包

除了清理文件,有时不再使用的软件包也是磁盘占用的一大来源。可以使用 dpkg(Debian 系)或 rpm(RedHat 系)来卸载不需要的软件包。

例如,在 Debian 系统中,我们可以通过以下命令查找并删除不必要的软件包:

sudo apt-get autoremove
sudo apt-get clean

autoremove 命令会删除那些自动安装的、现在不再需要的依赖包;clean 会清理缓存文件。

当没发现大文件但是磁盘还是爆满的时候,使用 lsof 查找占用空间的文件

有时候,磁盘空间被占满是因为某些程序占用了太多的空间。你可以用 lsof 命令(这个命令是用来列出所有被打开的文件)来看看哪些文件正被这些程序占用。

例如,通过lsof命令查看被删除的文件。

lsof | grep deleted

这个命令能帮你找出那些已经被删了但还被某些程序占着的文件。虽然这些文件看起来像是被删掉了,但实际上只要相关程序还在运行,它们就会继续占用硬盘空间。 此时sudo  kill -9 2833 然后重启mysql可能就会释放很多空间。

发现有这种情况,也可以尝试重启相关的程序,这样就能释放出被占用的空间了。

通过脚本方式检测磁盘情况

定期用脚本来检查服务器的磁盘空间是个不错的方法,这样可以早点发现磁盘快满的问题。下面有个简单的脚本,它能查看磁盘用了多少空间,如果使用率超过了80%,就会自动发警告到钉钉上。

#!/bin/bash

# 设置警告阈值
THRESHOLD=80

# 获取磁盘使用情况
DISK_USAGE=$(df -h / | awk 'NR==2 {print $5}' | sed 's/%//')

# 获取当前日期时间并进行 URL 编码
DATE=$(date '+%Y-%m-%d %H:%M:%S')
ENCODED_DATE=$(echo "$DATE" | sed 's/ /%20/g; s/:/%3A/g')

# 检查磁盘使用情况是否超过阈值
if [ $DISK_USAGE -gt $THRESHOLD ]; then
    # 如果超过阈值,输出警告信息
    echo "$DATE - WARNING: Disk usage is above $THRESHOLD% - Current usage is $DISK_USAGE%"
    
    # 用 curl 发送 HTTP 请求,代入编码后的日期时间
    curl "https://push.spug.cc/send/1QGmWWdzmlRD?DATE=${ENCODED_DATE}&THRESHOLD=${THRESHOLD}&DISK_USAGE=${DISK_USAGE}"
else
    # 如果没有超过阈值,输出正常信息
    echo "$DATE - Disk usage is normal: $DISK_USAGE%"
    
    # 用 curl 发送正常信息(也可以不发送)
    curl "https://push.spug.cc/send/1QGmWWdzmlRD?DATE=${ENCODED_DATE}&THRESHOLD=${THRESHOLD}&DISK_USAGE=${DISK_USAGE}"
fi

当脚本发现服务的根目录使用量超过80%时,就会给钉钉发一条告警消息,如下图所示。

步骤总结

当 Linux 磁盘空间不足时,首先通过 df 和 du 命令了解磁盘使用情况,然后使用 find 查找大文件,清理不必要的日志和临时文件,卸载不必要的包,最后考虑扩展磁盘。掌握这些命令,你就能有效应对磁盘空间不足的问题,保证系统顺畅运行。遇到问题不要慌,这几个命令帮你轻松梭哈解决!

posted @ 2025-07-04 11:25  江南大才子  阅读(836)  评论(0)    收藏  举报