在Linux系统运维与开发过程中,精准掌握文件及目录的磁盘占用情况是保障服务器健康运行的关键技能,查询Linux文件大小主要通过du(Disk Usage)和ls(List)两个核心命令实现。du命令侧重于统计目录或文件实际占用的磁盘空间(即物理块大小),是排查空间占用的首选工具;ls命令则用于快速查看单个文件的逻辑大小,在实际生产环境中,熟练运用这两个命令的组合参数,能够高效定位大文件、清理冗余数据,从而优化系统存储性能。

使用du命令精准统计磁盘占用
du命令是Linux下查看文件大小的“瑞士军刀”,它不仅能够递归地统计目录大小,还能通过参数控制显示的深度和格式,是系统管理员最常用的工具。
人性化显示目录大小
直接使用du命令默认会显示以KB为单位的数值,且包含所有子目录,阅读体验较差,最推荐的组合是du -sh。
-s(–summarize):仅显示总计,即当前目录或文件的总大小,不列出子目录。-h(–human-readable):以人类可读的格式显示(如K、M、G)。
执行du -sh /var/log,可以直接输出日志目录的总占用空间,如500M /var/log,一目了然。
查看目录下各子文件夹的大小
当磁盘空间告急,需要定位具体哪个子目录占用空间过大时,可以使用du -h --max-depth=1。
--max-depth=1:仅统计当前目录下第一层子目录的大小,不深入递归。
这个命令能快速列出当前目录下所有一级文件夹的大小,帮助管理员迅速“揪出”占用空间的罪魁祸首,执行du -h --max-depth=1 /home,会列出所有用户目录的大小。
排序查找最大的文件
为了更直观地找出占用空间最大的前几个文件或目录,可以结合sort命令使用,执行*`du -sh | sort -rh`**。
sort -r:反向排序(从大到小)。sort -h:根据人类可读的数字格式进行排序(能正确识别100M和1G的大小关系)。
这条命令是清理磁盘空间的“杀手锏”,能将最大的文件排在最前面,便于直接处理。
使用ls命令快速查看文件详情
ls命令主要用于列出目录内容,虽然它统计的是文件的逻辑大小(而非实际占用的物理块数),但在查看单个文件信息时非常高效。

查看详细文件大小
使用ls -lh命令可以列出目录下所有文件的详细信息。
-l:以长格式显示,包含权限、所有者、大小、修改时间等。-h:以易读的格式显示大小。
输出结果的第5列即为文件大小,执行ls -lh filename.tar.gz,会显示-rw-r--r-1 root root 150M Oct 10 10:00 filename.tar.gz,其中150M即为文件大小。
查看文件夹的元数据大小
需要注意的是,ls -l查看目录时,显示的大小通常是该目录本身元数据的大小(通常是4KB或4096字节),而不是目录内所有文件的总和。切勿使用ls -l来查看文件夹的总容量,这是初学者常犯的错误,查看文件夹总容量必须回退到使用du命令。
进阶技巧与专业解决方案
在处理复杂的存储问题时,基础的命令可能不够用,以下提供两个基于E-E-A-T原则的专业解决方案。
查找并删除指定时间的大文件
在日志分析或临时文件清理中,经常需要查找特定时间点之前的大文件,可以使用find命令结合du的逻辑。
查找/var/log目录下7天前修改过且大于100MB的文件:
find /var/log -type f -mtime +7 -size +100M -exec ls -lh {} \;
这条命令利用了find强大的筛选能力,精准定位老旧的大文件,避免误删重要数据。
理解“稀疏文件”的大小差异
在数据库备份或虚拟化镜像中,常遇到“稀疏文件”(Sparse File),这类文件在逻辑上很大(如1TB),但实际占用的物理磁盘空间可能很小(如1MB)。

ls -l看到的是逻辑大小(1TB)。du看到的是实际占用(1MB)。
在评估磁盘剩余空间时,必须以du为准,如果误以为删除了ls显示的大文件就能释放大量空间,可能会对稀疏文件产生误判。du -h --apparent-size参数可以查看文件的逻辑大小,用于对比分析。
磁盘空间与文件大小的区别
有时候du统计的文件总和远小于磁盘使用量,这通常是因为:
- 已删除但仍有进程打开的文件(被占用的句柄未释放),使用
lsof | grep deleted可以查找此类文件,重启相关进程即可释放空间。 - ext文件系统默认为root保留5%的空间,用于紧急管理,这部分空间普通
du命令不可见,但在df命令中会显示为Reserved。
相关问答
Q1:为什么有时候ls命令看到的文件大小和du命令看到的不一样?
A: 这种差异通常由两个原因造成,第一,块大小对齐:文件系统存储文件是以“块”(Block,通常为4KB)为单位的,一个1字节的文件实际也会占用4KB的物理空间。ls显示的是字节数,du显示的是占用的块数,第二,稀疏文件:如数据库或虚拟机镜像文件,逻辑上很大但实际写入的数据很少,du只统计实际写入的物理块,因此会比ls显示的逻辑大小小很多。
Q2:如何快速找出当前目录下大于500MB的文件?
A: 可以使用find命令的size参数快速查找,执行命令:find . -type f -size +500M -exec ls -lh {} \;,这条命令会在当前目录及其子目录下查找所有普通文件(-type f),筛选出大于500MB的文件(-size +500M),并执行ls -lh显示其详细大小信息。
互动
如果您在Linux文件管理中还遇到过其他疑难杂症,或者有更高效的查询技巧,欢迎在评论区分享您的经验,我们一起探讨交流。

















