在Linux系统中,查看文件大小是日常管理和系统维护的基础操作,无论是排查磁盘占用、优化存储空间,还是分析日志文件,都需要准确获取文件的大小信息,Linux提供了多种命令来查看文件大小,每种命令的功能、适用场景和输出格式各有侧重,本文将详细介绍这些命令的使用方法及注意事项。
ls
命令:快速查看文件及目录大小
ls
(list)是最常用的文件列表命令,通过结合不同选项,可以灵活显示文件的大小信息。
基础用法:ls -l
-l
选项以长格式输出文件详情,其中第5列即为文件大小(默认单位为字节)。
$ ls -l test.txt -rw-r--r-- 1 user user 1024 Oct 1 10:00 test.txt
输出中1024
表示文件大小为1024字节,对于目录,ls -l
显示的是目录本身的大小(通常为4096字节,即目录元数据大小),而非目录下文件的总大小。
人类可读格式:ls -lh
-h
(human-readable)选项将大小转换为更易读的格式(KB、MB、GB等,以1024为进制)。
$ ls -lh test.txt -rw-r--r-- 1 user user 1.0K Oct 1 10:00 test.txt
若需精确到小数位,可结合--block-size
选项指定单位,如ls -lh --block-size=1000
(以1000为进制,显示为KB/MB/GB的十进制格式)。
按大小排序:ls -lS
-S
选项根据文件大小降序排列文件,便于快速定位大文件:
$ ls -lS -rw-r--r-- 1 user user 10M Oct 1 10:05 large_file.zip -rw-r--r-- 1 user user 1.0K Oct 1 10:00 test.txt
结合-r
选项可升序排列(ls -lrS
)。
du
命令:统计文件及目录的磁盘占用空间
du
(disk usage)用于估算文件或目录占用的实际磁盘空间,与ls
不同,du
会考虑文件系统的块大小(默认4KB/块),因此可能显示比ls
更大的值(尤其是小文件)。
查看目录总大小:du -sh
-s
(summarize)仅显示汇总大小,-h
以人类可读格式输出。
$ du -sh /var/log 15M /var/log
此结果表示/var/log
目录及其子文件共占用15MB磁盘空间。
递归查看子目录大小:du -h --max-depth
--max-depth
限制递归深度,如查看/var/log
下各子目录大小(深度为1):
$ du -h --max-depth=1 /var/log 1.2M /var/log/apt 4.0K /var/log/cron 10M /var/log/journal
排除特定文件:du --exclude
通过--exclude
选项排除匹配模式的文件,如排除.log
文件:
$ du -sh --exclude="*.log" /var/log 12M /var/log
stat
命令:显示文件详细状态信息
stat
用于查看文件的元数据,包括精确大小、权限、时间戳等,适合需要获取文件字节级精确值的场景。
输出文件大小:stat -c %s
-c
选项自定义输出格式,%s
表示文件大小(字节):
$ stat -c %s test.txt 1024
若需人类可读格式,可使用%h
(如stat -c %h test.txt
,需结合numfmt
转换)。
显示文件系统信息:stat -f
-f
选项输出文件系统相关统计,如总块数、可用块数及块大小(默认4KB):
$ stat -f /dev/sda1 File: "/dev/sda1" ID: ... Namelen: 255 Type: ext4 Block size: 4096 Fundamental block size: 4096
find
命令:按大小条件查找文件
find
是强大的文件查找工具,通过-size
选项可筛选特定大小的文件,支持(大于)、(小于)、无符号(等于)及单位(b
字节、k
KB、M
MB、G
GB等)。
查找大于100MB的文件
$ find /home -type f -size +100M /home/user/videos/large_video.mp4
查找小于1KB的文件(排除空文件)
$ find /var -type f -size -1k -size +0c
-size +0c
确保文件大小大于0字节(c
表示字节)。
按大小排序并显示详情
结合-exec
和ls
命令,可对查找结果排序:
$ find / -type f -size +1G -exec ls -lh {} + | sort -k5 -hr
sort -k5 -hr
按第5列(大小)降序排列(-h
按数字排序,-r
降序)。
命令对比与适用场景
命令 | 主要功能 | 常用选项 | 适用场景 |
---|---|---|---|
ls |
列出文件及属性(含大小) | -l (长格式)、-h (人类可读)、-S (按大小排序) |
快速查看单个/多个文件大小 |
du |
估算文件/目录占用的磁盘空间 | -s (汇总)、-h (人类可读)、--max-depth (目录深度) |
分析目录空间占用、查找大目录 |
stat |
显示文件详细状态信息 | -c %s (精确大小)、-f (文件系统信息) |
获取精确字节数、文件属性 |
find |
查找符合特定条件的文件 | -size (按大小筛选)、-type (文件类型) |
批量查找特定大小的文件 |
相关问答FAQs
为什么用ls -l
和du -h
查看同一个文件时,显示的大小可能不同?ls -l
显示的是文件的实际内容大小(字节数),而du -h
显示的是文件占用的磁盘块数(默认4KB/块),一个12字节的文件,ls -l
显示12
,du -h
可能显示4K
(因为文件系统分配了1个4KB块存储该文件),对于目录,ls -l
显示的是目录元数据大小(通常4096字节),而du -h
显示的是目录下所有文件的总和,两者差异更明显。
如何查找系统中所有大于1GB的文件,并按大小降序排列?
使用find
命令结合-size
和exec
或xargs
排序:
find / -type f -size +1G -exec ls -lh {} + | sort -k5 -hr
解释:find / -type f -size +1G
查找根目录下所有大于1GB的文件;-exec ls -lh {} +
以人类可读格式显示文件详情;sort -k5 -hr
按第5列(大小)降序排列(-h
按数字排序,-r
降序)。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/31893.html