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

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

先看一眼磁盘空间

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

复制
df -h1.

-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% /data1.2.3.4.

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

查看每个目录占用的空间

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

复制
du -sh /* | sort -h1.

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

复制
1.3G /snap 2.6G /opt 3.3G /usr 7.8G /var1.2.3.4.

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

找出大文件并清理

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

复制
find /var -type f -size +100M1.

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

复制
root@didiplus:~# find /var -type f -size +100M /var/lib/docker/overlay2/d868589f060052fd1543bf393e4ebc0759e5f521384e34ead32a08f45352ba6b/diff/opt/java/openjdk/lib/modules /var/lib/docker/overlay2/1a1009115bd48b6df32e87f305c5022ff191c45315baed88271d61c686264365/diff/opt/java/openjdk/lib/modules /var/lib/docker/overlay2/e2b58562f389558a896f78855f4a3a4dab2967f614b054e8dc05b72aab8abe25/merged/opt/java/openjdk/lib/modules root@didiplus:~# find /usr -type f -size +100M /usr/local/bin/1panel /usr/local/cloudmonitor/bin/argusagent /usr/bin/dockerd1.2.3.4.5.6.7.8.
清理日志文件

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

复制
root@didiplus:~# du -h /var/log/* | sort -rh 2.0G /var/log/journal/949ee72b23b94d4aa7e2f5f7612118d6 2.0G /var/log/journal 533M /var/log/atop1.2.3.4.

查了之后发现,日志文件里有两个文件夹特别大,一个是journal,另一个是atop。接下来可以根据具体情况来处理这些日志文件。

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

复制
sudo truncate -s 0 /var/log/syslog1.

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

清理临时文件

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

复制
sudo rm -rf /tmp/*1.

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

卸载不必要的软件包

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

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

复制
sudo apt-get autoremove sudo apt-get clean1.2.

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

使用lsof 查找占用空间的文件

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

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

复制
lsof | grep deleted1.

这个命令能帮你找出那些已经被删了但还被某些程序占着的文件。虽然这些文件看起来像是被删掉了,但实际上只要相关程序还在运行,它们就会继续占用硬盘空间。

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

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

定期用脚本来检查服务器的磁盘空间是个不错的方法,这样可以早点发现磁盘快满的问题。下面有个简单的脚本,它能查看磁盘用了多少空间,如果使用率超过了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}" fi1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.

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

总结

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

THE END
本站服务器由亿华云赞助提供-企业级高防云服务器