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 中的文件大小查看工具可能显得复杂且多样。

本文将通过循序渐进的方式,结合生活化的比喻和实际案例,系统讲解如何使用 lsdustat 等核心命令,以及它们的进阶用法。同时,文章将通过对比不同命令的特性,帮助读者根据实际场景选择最合适的工具。


一、基础命令:快速查看文件大小

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 字节)。

对比分析
statls 的区别在于,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:对比文件系统与实际内容的差异

当发现磁盘空间异常时,可通过 dfdu 联合排查:

df -h  

du -sh /  

df 显示根分区已满,但 du 的结果明显小于磁盘容量,可能因删除了被进程占用的文件导致。


四、常见问题与解决方案

4.1 为什么 duls 的结果不同?

  • ls -l 显示的是文件的逻辑大小(实际字节数);
  • du 显示的是文件占用的磁盘块数(按系统块大小对齐)。

解决方法

  • 若需精确逻辑大小,使用 statls
  • 若需统计磁盘占用,使用 du

4.2 如何查看隐藏文件的大小?

默认情况下,lsdu 不显示隐藏文件(以 . 开头的文件)。可通过以下命令包含隐藏文件:

ls -ldh .*  
du -ah .hidden_file  

4.3 如何监控文件大小变化?

结合 watch 命令可实时观察文件大小:

watch -n 5 "ls -lh /path/to/file"  

此命令每 5 秒刷新一次文件的大小。


结论

通过本文的讲解,读者应已掌握 Linux 系统中查看文件大小的核心工具和方法。无论是基础命令 lsdu,还是进阶的 statfind,每种工具都有其适用场景:

  • 快速浏览:使用 ls -lh
  • 目录统计:使用 du -sh
  • 深度分析:使用 stat
  • 精准筛选:使用 find

在实际开发或运维中,合理组合这些命令能显著提升效率。例如,结合 finddu 可实现自动化清理脚本,或通过 stat 调试文件元数据问题。

掌握文件大小的查看技巧,不仅是 Linux 使用的基础能力,更是优化系统性能、保障存储安全的重要步骤。建议读者通过实际操作加深理解,并根据需求灵活调整命令参数。

最新发布