linux 查看磁盘空间(长文讲解)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

截止目前, 星球 内专栏累计输出 90w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 3100+ 小伙伴加入学习 ,欢迎点击围观

在 Linux 系统中,磁盘空间的管理是开发者日常运维的重要环节。无论是本地开发环境还是远程服务器,磁盘空间不足都可能导致程序异常、服务中断等问题。对于编程初学者和中级开发者而言,掌握如何高效查看和管理磁盘空间,不仅能提升问题排查能力,还能为后续学习系统优化、性能调优打下基础。本文将从基础命令到进阶技巧,结合实际案例,深入浅出地讲解如何在 Linux 环境中查看和管理磁盘空间。


一、基础命令:快速查看磁盘空间

1.1 使用 df 命令查看整体磁盘使用情况

df(disk free)是最常用的磁盘空间查看命令。它以文件系统为单位,显示每个挂载点的总容量、已用空间、可用空间以及使用率。

基础用法示例:

df -h  
  • -h 参数表示以人类可读的格式(如 KB、MB、GB)显示数值。

输出解释:

Filesystem      Size  Used Avail Use% Mounted on  
udev            3.9G     0  3.9G   0% /dev  
tmpfs           787M  2.1M  785M   1% /run  
/dev/sda1        20G   15G  4.0G  76% /  
tmpfs           3.9G   12K  3.9G   1% /dev/shm  
  • Size:文件系统总大小。
  • Used:已用空间。
  • Avail:剩余可用空间。
  • Use%:使用百分比。
  • Mounted on:挂载点路径。

案例说明:
在上例中,根目录 / 的使用率为 76%,剩余空间 4.0G,开发者需关注是否接近临界值(如 85% 以上)。


1.2 过滤关键信息:结合 grep 等工具

若需快速定位特定磁盘或挂载点,可结合 grep 命令筛选输出。例如:

df -h | grep "/$"  

此命令会筛选出根目录 / 的磁盘信息,便于快速查看核心分区的使用情况。


二、深入理解磁盘空间:从 df 输出到实际场景

2.1 理解块与 inode 的概念

Linux 系统中,磁盘空间由 块(Block)inode(索引节点) 共同管理:

  • :磁盘的最小分配单位,类似“书架上的格子”,存储文件的实际数据。
  • inode:记录文件的元数据(如权限、时间戳、指向数据块的指针),相当于“文件的身份证”。

命令示例:

df -i  

此命令以 inode 使用率替代块空间,帮助开发者排查因 inode 耗尽导致的写入失败问题。


2.2 df 命令的高级参数

通过调整参数,开发者可获取更详细的信息:

df -k  

df -x nfs  

df -a  

三、定位具体目录:du 命令的使用

3.1 du 命令:分析目录空间占用

du(disk usage)用于统计目录或文件的磁盘占用,尤其适合定位“占用空间异常”的目录。

基础用法示例:

du -h /var/log  

此命令会显示 /var/log 目录及其子目录的大小。

关键参数:

  • -h:人类可读格式。
  • -s:仅显示总和(skip 子目录)。
  • --max-depth=N:递归统计子目录的层级(如 --max-depth=1 显示当前目录下直接子目录的大小)。

案例:

du -h --max-depth=1 /home  

输出结果可能包含类似以下内容:

4.2G    /home/user1  
1.5G    /home/user2  

通过此命令,开发者可快速识别占用空间较大的用户目录。


3.2 结合排序与过滤:快速定位大文件

结合 sortawk,开发者可进一步优化分析:

find . -type f -size +100M -exec ls -lh {} \;  

du -ah /var | sort -hr | head -n 10  

此命令组合能直观展示占用空间最大的文件或目录,帮助开发者精准清理冗余数据。


四、实战案例:服务器磁盘空间不足的排查

4.1 案例背景

假设某服务器的根目录 / 使用率已达 95%,开发者需快速定位问题并解决。

步骤 1:全局查看磁盘状态

df -h  

输出显示根目录 / 的剩余空间仅 100M,需进一步分析。

步骤 2:分析根目录下占用空间的目录

du -h --max-depth=1 / | sort -hr  

假设输出显示 /var 占用 9G,而总根目录容量为 10G,说明问题集中在 /var

步骤 3:深入 /var 目录排查

cd /var  
du -h --max-depth=1  

发现 /var/log 占用 8.5G,进一步缩小问题范围。

步骤 4:清理日志文件

ls -lh /var/log/*.log  

find /var/log -type f -name "*.log" -mtime +7 -exec rm -f {} \;  

通过以上步骤,开发者成功释放了磁盘空间,并避免了服务中断的风险。


五、进阶技巧:自动化监控与预警

5.1 设置磁盘使用率阈值提醒

通过脚本实现磁盘空间监控,当使用率超过预设值时发送通知。示例脚本:

#!/bin/bash  
THRESHOLD=90  # 设置阈值为 90%  
USAGE=$(df / | awk 'NR==2 {print $5}' | sed 's/%//g')  

if [ $USAGE -ge $THRESHOLD ]; then  
  echo "警告:根目录使用率已达 ${USAGE}%!"  
  # 可添加邮件或短信通知逻辑  
fi  

此脚本可加入 cron 定期执行,实现自动化预警。


5.2 使用 ncdu 工具交互式分析

ncdu(NCurses Disk Usage)是一个交互式工具,提供更直观的磁盘分析界面:

sudo apt install ncdu  # 安装(Debian/Ubuntu)  
ncdu /var/log  

运行后,通过方向键可逐级深入目录,快速识别大文件或目录。


六、常见问题与解答

6.1 为什么 df 显示的空间与实际不符?

  • 可能原因:
    1. 预留空间:系统默认为 root 用户预留一定空间(如 5%),防止普通用户耗尽磁盘。
    2. 文件被删除但进程仍在使用:文件被删除后,若进程仍在占用,磁盘空间不会释放。可通过 lsof | grep deleted 查找相关进程。

6.2 如何释放被删除文件占用的空间?

若文件被删除但进程未释放,需重启相关服务或终止进程。例如:

kill -9 <PID>  

结论

通过本文的讲解,开发者已掌握 dfdu 等核心命令的使用场景与技巧,能够快速定位磁盘空间问题并实施解决方案。在实际开发中,合理监控磁盘使用情况、定期清理冗余数据,是保障系统稳定性和开发效率的关键。建议将磁盘空间检查纳入日常运维流程,并结合自动化脚本提升工作效率。

掌握这些技能后,开发者不仅能从容应对本地开发环境的磁盘管理,也能在服务器运维中游刃有余,为后续学习更复杂的系统管理知识奠定坚实基础。

最新发布