linux 查看文件大小(保姆级教程)
💡一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 ;- 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;
截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2900+ 小伙伴加入学习 ,欢迎点击围观
前言
在 Linux 系统中,查看文件或目录的大小是日常操作中的一项基础需求。无论是优化存储空间、排查磁盘占用问题,还是编写自动化脚本,掌握这一技能都能显著提升工作效率。然而,对于编程初学者和中级开发者来说,Linux 中的文件大小查看工具可能显得复杂且多样。
本文将通过循序渐进的方式,结合生活化的比喻和实际案例,系统讲解如何使用 ls
、du
、stat
等核心命令,以及它们的进阶用法。同时,文章将通过对比不同命令的特性,帮助读者根据实际场景选择最合适的工具。
一、基础命令:快速查看文件大小
1.1 ls
命令:最直观的文件信息
ls
是 Linux 系统中最常用的目录列表命令,通过添加参数可以快速查看文件大小。
核心语法:
ls -l [文件名/目录名]
示例:
ls -l /etc/passwd
输出结果可能类似:
-rw-r--r-- 1 root root 2051 Jan 1 00:00 /etc/passwd
其中,第五列数字 2051
表示文件的大小(单位为字节)。
比喻:
ls -l
好比图书馆管理员快速扫描书籍的目录卡片,能直接看到每本书的“厚度”(文件大小)。
1.2 du
命令:深入目录的“称重工具”
du
(Disk Usage)专门用于统计文件或目录的磁盘占用空间,尤其适合分析目录层级的大小。
核心语法:
du [选项] [文件名/目录名]
常用参数:
-h
:以人类可读的格式(如 KB、MB、GB)显示;-s
:仅显示总大小(Summarize);-a
:统计所有文件(包括目录)。
示例:
du -h /var/log
输出可能为:
4.0K /var/log/nginx
12M /var/log/apache2
16M /var/log
此命令显示 /var/log
目录及其子目录的大小,单位为 KB 或 MB。
关键点:
du
的结果可能与 ls
不一致,因为 du
统计的是实际占用的磁盘块(block),而文件系统会按块大小(如 4KB)对齐文件。例如,一个 1 字节的文件在 du
中可能显示为 4KB。
二、进阶技巧:精准控制与深度分析
2.1 stat
命令:文件的详细“体检报告”
stat
可以展示文件的元数据,包括大小、权限、时间戳等,适合需要全面信息的场景。
核心语法:
stat [文件名]
示例:
stat /etc/hostname
输出可能包含以下内容:
File: /etc/hostname
Size: 9 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 123456 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2023-01-01 00:00:00.000000000 +0800
Modify: 2023-01-01 00:00:00.000000000 +0800
Change: 2023-01-01 00:00:00.000000000 +0800
其中,Size
列显示文件的实际字节数(如 9 字节),而 Blocks
列显示占用的块数(8 × 512 字节 = 4096 字节)。
对比分析:
stat
与 ls
的区别在于,stat
提供更详细的文件系统元数据,而 ls
更侧重于快速浏览。
2.2 find
命令:精准定位大文件
结合 find
命令,可以高效查找指定大小的文件,例如清理不必要的大文件。
核心语法:
find [路径] -type f -size [+/-][数值][单位] -exec ls -lh {} \;
参数说明:
-type f
:仅搜索文件(排除目录);-size
:指定大小范围,+
表示“大于”,-
表示“小于”;[单位]
:可为c
(字节)、k
(KB)、M
(MB)、G
(GB)。
示例:
find /home -type f -size +100M -exec ls -lh {} \;
此命令会列出 /home
目录下所有大于 100MB 的文件。
比喻:
find
好比在文件系统中“海淘”,通过大小、类型等条件精准筛选目标文件。
三、实战案例:解决真实场景问题
3.1 案例 1:统计用户家目录的总大小
假设需要检查某个用户的家目录(如 /home/user1
)占用的磁盘空间:
du -sh /home/user1
-s
参数汇总总大小,-h
以易读格式输出,结果可能类似 4.2G
。
3.2 案例 2:查找并删除过期的大日志文件
若日志目录 /var/log/app
中存在大量超过 1GB 的旧日志文件:
find /var/log/app -type f -size +1G -mtime +30 -exec rm -v {} \;
此命令删除 30 天前生成且大于 1GB 的文件。
3.3 案例 3:对比文件系统与实际内容的差异
当发现磁盘空间异常时,可通过 df
和 du
联合排查:
df -h
du -sh /
若 df
显示根分区已满,但 du
的结果明显小于磁盘容量,可能因删除了被进程占用的文件导致。
四、常见问题与解决方案
4.1 为什么 du
和 ls
的结果不同?
ls -l
显示的是文件的逻辑大小(实际字节数);du
显示的是文件占用的磁盘块数(按系统块大小对齐)。
解决方法:
- 若需精确逻辑大小,使用
stat
或ls
; - 若需统计磁盘占用,使用
du
。
4.2 如何查看隐藏文件的大小?
默认情况下,ls
和 du
不显示隐藏文件(以 .
开头的文件)。可通过以下命令包含隐藏文件:
ls -ldh .*
du -ah .hidden_file
4.3 如何监控文件大小变化?
结合 watch
命令可实时观察文件大小:
watch -n 5 "ls -lh /path/to/file"
此命令每 5 秒刷新一次文件的大小。
结论
通过本文的讲解,读者应已掌握 Linux 系统中查看文件大小的核心工具和方法。无论是基础命令 ls
、du
,还是进阶的 stat
和 find
,每种工具都有其适用场景:
- 快速浏览:使用
ls -lh
; - 目录统计:使用
du -sh
; - 深度分析:使用
stat
; - 精准筛选:使用
find
。
在实际开发或运维中,合理组合这些命令能显著提升效率。例如,结合 find
和 du
可实现自动化清理脚本,或通过 stat
调试文件元数据问题。
掌握文件大小的查看技巧,不仅是 Linux 使用的基础能力,更是优化系统性能、保障存储安全的重要步骤。建议读者通过实际操作加深理解,并根据需求灵活调整命令参数。