最常用可靠方法是wc命令:wc -l统计行数(按换行符计,末行无\n不计),wc -m统计Unicode字符数(非字节数),多文件支持总计,替代方案如awk 'END{print NR}'更精准但wc为标准答案。

在 Linux 中统计文件的行数和字符数,最常用、最可靠的方法是使用 wc 命令。它轻量、高效,且对大多数文本文件表现稳定。
用 wc -l 统计行数
wc -l 会统计换行符(\n)的数量,也就是通常意义上的“行数”。注意:最后一行若无换行符,wc -l 不会将其计为一行(这是 POSIX 行为,不是 bug)。
- 统计单个文件:
wc -l filename.txt→ 输出类似42 filename.txt - 只显示数字(不带文件名):
wc -l filename.txt | awk '{print $1}'或更简洁地用head -n1 filename.txt | wc -l配合其他方式,但最稳妥仍是管道取字段 - 统计多个文件:
wc -l *.log→ 分别列出每文件行数,并在末尾给出总计
用 wc -m 统计字符数
字符数(character count)应使用 wc -m,而非 -c。-c 统计的是字节数(bytes),在 UTF-8 等多字节编码下,一个中文字符占 3 字节,但只算 1 个字符;-m 才真正按 Unicode 字符计数。
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
- 查看字符总数:
wc -m document.md→ 如输出1567 document.md - 区分场景:若处理日志或脚本(纯 ASCII),
-c和-m结果相同;若含中文、emoji、重音符号等,务必用-m - 注意:某些老旧系统或 busybox 版本可能不支持
-m,此时可临时用iconv -f utf-8 -t utf-32be file | wc -c | awk '{print $1/4}'近似估算,但不推荐日常使用
其他可行但不首选的方式
虽然 wc 是标准答案,但某些特殊需求下可考虑替代方案:
-
行数补充方法:
awk 'END{print NR}' file—— 更精准(NR 总是当前已读行号,不依赖结尾换行符);sed -n '$=' file—— 简洁,但对空文件可能报错或无输出 -
字符数补充方法:
fold -w1 file | wc -l—— 把每个字符拆成一行再计数,兼容性好但效率低,大文件慎用;python3 -c "print(len(open('file').read()))"—— 准确,但需 Python 环境,非 shell 原生命令
常见误区提醒
别混淆这几个概念:
-
wc -l≠ 行号最大值(如文件首行为空,nl显示第 1 行,但wc -l仍从实际换行数算) -
wc -c≠ 字符数(尤其在中文环境,差值明显) - 管道输入时,
wc -l对无结尾换行的输入仍会少计 1 行,例如echo -n "a" | wc -l输出0

















