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

系统 Linux
当Linux​磁盘空间不足时,首先通过df​ 和du​ 命令了解磁盘使用情况,然后使用find 查找大文件,清理不必要的日志和临时文件,卸载不必要的包,最后考虑扩展磁盘。

在日常维护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 /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/dockerd

清理日志文件

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

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

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

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

sudo truncate -s 0 /var/log/syslog

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

清理临时文件

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

sudo rm -rf /tmp/*

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

卸载不必要的软件包

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

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

sudo apt-get autoremove
sudo apt-get clean

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

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

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

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

lsof | grep deleted

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

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

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

定期用脚本来检查服务器的磁盘空间是个不错的方法,这样可以早点发现磁盘快满的问题。下面有个简单的脚本,它能查看磁盘用了多少空间,如果使用率超过了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 查找大文件,清理不必要的日志和临时文件,卸载不必要的包,最后考虑扩展磁盘。掌握这些命令,你就能有效应对磁盘空间不足的问题,保证系统顺畅运行。遇到问题不要慌,这几个命令帮你轻松梭哈解决!

责任编辑:赵宁宁 来源: 攻城狮成长日记
相关推荐

2022-06-07 17:08:51

WizTreewindows工具

2022-09-29 10:51:18

ShellLinux命令审计

2021-05-02 23:23:13

手机隐私安全

2009-12-11 15:37:58

Linux日志处理

2022-09-26 12:17:14

clamp() 函数CSS

2019-06-11 09:02:22

2023-12-05 18:09:17

容器debug

2010-07-27 14:25:02

linux文件编码

2024-10-14 13:22:15

2011-07-08 09:57:36

2023-08-03 07:13:59

2009-12-14 13:44:49

Linux磁盘配额

2024-10-28 11:07:33

磁盘目录文件

2009-12-03 11:37:56

Suse Linux

2010-08-05 16:42:33

数据中心停机成本

2021-02-18 14:03:19

Linux命令行history

2010-01-06 17:51:26

Linux关机命令

2022-06-20 10:48:56

Commvault

2020-05-12 09:02:29

Linux磁盘硬盘

2024-09-09 16:50:21

点赞
收藏

51CTO技术栈公众号