百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Linux查看文件大小:`ls`和`du`为何结果不同?一文讲透原理!

ahcoder 2025-05-21 11:43 9 浏览

Linux查看文件大小:ls和du为何结果不同?一文讲透原理!

在Linux运维中,查看文件大小是日常高频操作。但你是否遇到过以下困惑?


ls看到文件是1GB,用du却显示只有20MB?为什么会有这种差异?本文从底层原理到实战场景,带你彻底理解两者的区别!


一、核心差异:逻辑大小 vs 物理占用

1. ls显示逻辑大小
ls -l展示的是文件内容的实际字节数,即文件创建时写入的数据总量。例如:

$ ls -lh large_file.txt
-rw-r--r-- 1 user 1.2G Apr 8 10:00 large_file.txt

这里的1.2G表示文件内容总大小,无论是否包含空洞或零数据。


2. du显示物理占用
du -h统计的是文件在磁盘上实际占用的空间,受文件系统块大小影响。例如:

$ du -h large_file.txt
20M    large_file.txt

即使文件只有1字节,也会占用至少1个块(默认4KB)的空间。


二、三大关键原因解析

1. 文件系统块机制
o
块大小决定最小单位:Linux文件系统以块(通常4KB)为单位分配空间。
o
计算公式磁盘占用 = ceil(文件大小 / 块大小) × 块大小
例如:13KB文件占用4个块 → 16KB空间。


2. 稀疏文件(Sparse File)
稀疏文件通过"空洞"技术节省空间,表现为:
o
ls显示逻辑总大小
o du仅统计实际写入的数据块

# 创建1GB稀疏文件(实际占用200MB)
dd if=/dev/zero of=sparse.img bs=1M seek=1024 count=0
ls -lh sparse.img  # 显示1.0G
du -h sparse.img   # 显示200M

3. 目录统计规则
o
ls仅显示目录元数据大小(通常4KB)
o du递归统计目录内所有文件大小

$ mkdir test_dir
$ touch test_dir/file{1..100}  # 创建100个空文件
$ ls -ld test_dir            # 显示4.0K
$ du -sh test_dir            # 显示约400K(100个文件×4KB块)

三、实战场景分析

场景1:日志文件异常增长

# 发现日志文件显示10GB,但磁盘空间只占用2GB
ls -lh app.log      # 10G
du -h app.log       # 2G

# 原因:日志文件被清空但进程未释放(需重启服务)
lsof | grep deleted  # 查看被删除但仍被占用的文件

场景2:备份文件体积差异

# 原始文件10GB,压缩后生成backup.tar.gz
ls -lh backup.tar.gz  # 显示9.8G
du -h backup.tar.gz   # 显示2.1G(压缩+块分配)

四、进阶技巧

1. 查看真实磁盘占用

# 统计目录总大小(含子目录)
du -sh /var/log

# 按大小排序(快速定位大文件)
du -ah / | sort -rh | head -n 20

2. 处理稀疏文件

# 复制时保留稀疏特性
cp --sparse=always large.img backup.img

3. 权限问题排查

# 无权限文件导致统计异常
sudo du -sh /protected_dir

五、总结对比表

特性

ls命令

du命令

统计对象

文件逻辑大小

磁盘物理占用空间

单位

字节(可转人类可读格式)

块大小(默认4KB)

目录处理

仅显示目录元数据大小

递归统计所有子文件和目录

稀疏文件

显示总大小

显示实际占用空间


运维小贴士
o 日常监控用
du了解真实存储消耗
o 文件传输时用ls确认内容完整性
o 疑似空间泄漏时结合lsof排查

下次遇到文件大小差异,你一定能快速定位原因!如果觉得有用,欢迎转发给更多运维小伙伴~

相关推荐

Linux抓包工具tcpdump安装和使用,监视网络接口小工具大用途

Tcpdump工具是一个抓包工具也是一个协议分析软件。强大的功能和灵活的截取策略,使它成为Linux统下网络分析和问题排查的首选工具。tcpdump可以将网络中传送的数据包的头截获下来做分析。它支持...

linux安装lnmp一键安装包

一般企业正式服环境用的lnmp.org一键安装包,下面做下简单介绍:官网:https://lnmp.org1.安装(官网上有详细的安装步骤)screen-Slnmp是为了在安装的过程中,断线的后台...

Linux 安装Oracle11.2.0.4 (静默安装法)

一、环境准备1下载安装包已上传至对象存储,一共两个包#oracle11.2.0.4_1of7.zipwgethttps://oss-cn-north-1.unicloudsrv.com/sc-...

Ubuntu入门使用之 24.04 如何安装命令工具(或软件包)

如果你是初学者,在Ubuntu24.04上运行命令时遇到错误,这意味着运行该特定命令所需的软件包在你的系统中不可用。无论你是刚开始探索Linux世界,还是从旧版本升级而来,你可能会想知道如何...

Linux 安装代理 实现Windows Proxifier 功能

场景:linux上的应用---------->代理服务器(socket5)--------------------目标服务实现方案通过ProxyChains+Socat这2个工具来实现,具体...

Python保姆级安装教程(CPU+GPU)

以下是为您整理的2024年Python保姆级安装教程(CPU+GPU详细版),涵盖Windows、macOS和Linux系统,并详细说明GPU环境的配置(如CUDA、cuDNN等...

linux安装oracle

需要安装oracledataguard,所以先要安装单台oracle11g,下面是单台oracle11g的详细安装过程。1,安装环境硬件环境:2台linux虚拟机,Centos6.4,4G,4核...

Linux安装Nginx详细教程

Nginx是一款高性能的开源Web服务器软件,它被广泛应用于构建高性能的网站和应用程序。本文将向您介绍如何在Linux操作系统上安装和配置Nginx服务器。一、下载nginx1.1、手动下载进入ngi...

选择LINUX安装平台

您已经选择了Linux发行版,并准备开始安装过程,但您需要确定您的硬件选项。以下是从哪里开始。译自Linux:ChooseanInstallationPlatform,作者Damon...

用Linux“还原”Win11,AnduinOS创始人公布1.4/1.5版本更新计划

IT之家5月24日消息,据外媒Neowin今日报道,AnduinOS的唯一开发者AnduinXue近日公布了“类Windows风格”Linux系统未来的版本规划。他表示,A...

Linux lsof命令使用小结

推荐理由lsof(listopenfiles)是一个列出当前系统打开文件的工具。在Linux环境下,任何事物都是以文件的形式存在,通过文件不仅可以访问常规数据,还可以访问网络连接和硬件。所以,如传...

Linux进程管理—信号、定时器使用详解

信号:1.信号的作用:背景:进程之间通信比较麻烦。但进程之间又必须通信,比如父子进程之间。作用:通知其他进程响应。进程之间的一种通信机制。信号:接受信号的进程马上停止,调用信号处理函数...

Nexus 3 本地搭建与使用实战指南(适用于 Linux 与 Win11)

一、背景与介绍在DevOps流程中,本地镜像仓库能显著提升镜像下载速度、增强安全性并保障离线可用性。本文将手把手教你在Linux和Win11上分别部署并使用Nexus3搭建Dock...

字节跳动介绍使用AI优化Linux内核成果,可减少30%内存用量

IT之家11月23日消息,据外媒zdnet报道,字节跳动日前在LinuxPlumbersConference上介绍了通过使用AI优化Linux内核的成果,号称可以取得“显著...

一文带你了解 Linux 文件权限,从基础到高级

在Linux中,每个文件和目录都关联了一组权限,定义了不同用户对其的访问能力。权限分为三类:读取(read,r)、写入(write,w)和执行(execute,x),分别用字母r、w、x...