在命令行环境中查看文件大小是Linux和Unix系统管理中常见的操作,掌握多种命令可以帮助用户根据不同需求灵活获取文件信息,以下将详细介绍几种常用的命令行查看文件大小的方法,包括基本用法、参数选项及实际应用场景。

使用ls命令查看文件大小
ls是列出目录内容的命令,通过添加-l(长格式)选项可以显示文件的详细信息,包括大小,文件大小默认以字节为单位显示,可通过-h选项以人类可读格式(如KB、MB、GB)展示。
基本语法:
ls -lh [文件名或目录名]
示例:
ls -lh document.txt
输出可能如下:

-rw-r--r-- 1 user group 1.2M Oct 20 10:30 document.txt
其中2M表示文件大小为1.2MB,若需查看多个文件,可直接指定多个文件名:
ls -lh file1.txt file2.txt dir1/
常用参数组合:
-l:以长格式显示,包含权限、所有者、大小、修改时间等。-h:以人类可读格式显示大小(如K、M、G)。-a:显示所有文件,包括隐藏文件(以开头)。-S:按文件大小从大到小排序。
实际应用: 当需要快速查看当前目录下所有文件的大小并排序时,可使用:
ls -lhS
此命令会按文件大小降序排列,方便找出占用空间较大的文件。

使用du命令查看目录或文件大小
du(disk usage)命令用于显示文件或目录的磁盘使用情况,与ls不同,du默认显示目录及其子目录的总大小,适合分析目录空间占用。
基本语法:
du [选项] [文件或目录]
常用参数:
-h:人类可读格式。-s:仅显示总计大小,不显示子目录详情。-a:显示所有文件的大小,而不仅仅是目录。--max-depth=N:限制递归深度,如--max-depth=1仅显示一级子目录。
示例: 查看当前目录总大小:
du -sh .
输出示例:
5G .
查看指定目录下每个子目录的大小:
du -h --max-depth=1 /var/log
输出可能如下:
0K /var/log/alternatives
2.1M /var/log/apt
8.0K /var/log/dist-upgrade
...
与ls的区别:
ls显示文件或目录的原始大小(不包含子目录),而du显示实际占用的磁盘空间(小文件可能因磁盘块分配占用更多空间),一个1KB的文件在ls中显示为1KB,但在du中可能显示为4KB(取决于文件系统块大小)。
使用stat命令查看文件详细状态
stat命令用于显示文件的详细状态信息,包括文件大小、权限、访问时间、修改时间等。
基本语法:
stat [文件名]
示例:
stat document.txt
输出示例:
File: document.txt
Size: 1258272 Blocks: 2456 IO Block: 4096 regular file
Device: 801h/2049d Inode: 131073 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ user) Gid: ( 1000/ group)
Access: 2023-10-20 10:30:00.000000000 +0800
Modify: 2023-10-20 10:30:00.000000000 +0800
Change: 2023-10-20 10:30:00.000000000 +0800
Birth: -
其中Size字段即为文件大小(字节),若需人类可读格式,可结合-c选项自定义输出:
stat -c "%s %n" document.txt
输出:
1258272 document.txt
使用wc命令统计文件大小
wc(word count)命令主要用于统计文件的行数、字数和字节数,通过-c选项可仅显示字节数(即文件大小)。
基本语法:
wc -c [文件名]
示例:
wc -c document.txt
输出:
1258272 document.txt
若仅需数字,可结合cut命令提取:
wc -c document.txt | cut -d' ' -f1
不同文件系统的文件大小显示差异
在Linux中,文件大小可能因文件系统类型而显示不同:
- ext4/xfs:
ls和du显示的文件大小通常一致。 - NTFS/FAT32:由于不支持稀疏文件,
du显示的大小可能与ls不同。 - 压缩文件系统:如
btrfs,可能显示压缩前后的不同大小。
批量处理与脚本应用
在脚本中,可通过循环结合上述命令批量处理文件,查找当前目录下大于100MB的文件:
find . -type f -size +100M
或使用du和sort组合:
du -h * | sort -hr | head -10
此命令会显示当前目录下最大的10个文件或目录。
相关问答FAQs
问题1:为什么ls和du显示的文件大小有时不一致?
解答:ls命令显示的是文件的实际数据大小(即文件内容占用的字节数),而du显示的是文件在磁盘上占用的实际空间,一个1KB的文件在ext4文件系统中可能占用4KB(因为文件系统以4KB块为单位分配空间)。du会计算目录下所有子文件的大小,而ls仅显示单个文件的大小,对于稀疏文件(包含大量空洞的文件),ls显示的实际大小可能远小于du显示的磁盘占用空间。
问题2:如何快速查找当前目录下最大的文件?
解答:可以使用du和sort命令组合实现,以下命令会显示当前目录下最大的10个文件或目录(按人类可读格式排序):
du -h * | sort -hr | head -n 10
du -h *:以人类可读格式显示当前目录下所有文件和目录的大小。sort -hr:按数值降序排序(-h表示人类可读数字,-r表示降序)。head -n 10:仅显示前10行结果。
若需递归查找子目录中的文件,可将替换为或,并添加--max-depth参数限制深度。
