linux 查看磁盘空间(长文讲解)
💡一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 ;演示链接: http://116.62.199.48:7070 ;- 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;
截止目前, 星球 内专栏累计输出 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 结合排序与过滤:快速定位大文件
结合 sort
和 awk
,开发者可进一步优化分析:
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
显示的空间与实际不符?
- 可能原因:
- 预留空间:系统默认为 root 用户预留一定空间(如 5%),防止普通用户耗尽磁盘。
- 文件被删除但进程仍在使用:文件被删除后,若进程仍在占用,磁盘空间不会释放。可通过
lsof | grep deleted
查找相关进程。
6.2 如何释放被删除文件占用的空间?
若文件被删除但进程未释放,需重启相关服务或终止进程。例如:
kill -9 <PID>
结论
通过本文的讲解,开发者已掌握 df
、du
等核心命令的使用场景与技巧,能够快速定位磁盘空间问题并实施解决方案。在实际开发中,合理监控磁盘使用情况、定期清理冗余数据,是保障系统稳定性和开发效率的关键。建议将磁盘空间检查纳入日常运维流程,并结合自动化脚本提升工作效率。
掌握这些技能后,开发者不仅能从容应对本地开发环境的磁盘管理,也能在服务器运维中游刃有余,为后续学习更复杂的系统管理知识奠定坚实基础。