Linux:这啥命令?这台服务器我说了算-文本处理——“日志几万行,难道让我一行一行看?”

举报
yd_240046519 发表于 2026/11/02 10:51:55 2026/11/02
【摘要】 第七章:文本处理——“日志几万行,难道让我一行一行看?”真正开始用 Linux 之后,你迟早会遇到这种场面:access.logerror.logapp.logsystem.log打开一看,几万行起步。这时候如果你还想:“我慢慢翻,总能找到。”那服务器可能都修好了,你还在第 837 行。Linux 的强项之一,就是处理文本。 1. cat:先看一眼文件最简单:cat file.txt查看整...

第七章:文本处理——“日志几万行,难道让我一行一行看?”

真正开始用 Linux 之后,你迟早会遇到这种场面:

access.log
error.log
app.log
system.log

打开一看,几万行起步。

这时候如果你还想:

“我慢慢翻,总能找到。”

那服务器可能都修好了,你还在第 837 行。

Linux 的强项之一,就是处理文本。


1. cat:先看一眼文件

最简单:

cat file.txt

查看整个文件。

如果文件只有十几行,很方便。

但如果日志有几十万行:

cat access.log

终端就会像瀑布一样刷屏。

所以:

cat 适合小文件,不适合拿来硬刚大型日志。

查看并显示行号:

cat -n file.txt

2. less:大文件要“翻着看”

更推荐:

less access.log

常用操作:

↑ ↓       上下移动
PageUp    向上翻页
PageDown  向下翻页
/keyword  搜索
n         下一个匹配
N         上一个匹配
q         退出

比如搜索:

/error

就能快速找日志里的 error。

口诀:

小文件 cat,大文件 less。


3. head 和 tail:我只看开头和结尾

看前 10 行:

head access.log

前 20 行:

head -n 20 access.log

看最后 10 行:

tail access.log

最后 50 行:

tail -n 50 access.log

排查服务日志时,tail 特别常用。

因为报错通常发生在文件最后。


4. tail -f:实时蹲守日志

想实时观察日志增长:

tail -f app.log

这时候程序每写一行日志,你的终端就跟着显示。

很适合:

我点一下按钮
↓
日志冒出来
↓
看看程序到底干了什么

退出:

Ctrl + C

如果你在排查 Nginx:

sudo tail -f /var/log/nginx/access.log

另开一个终端访问网站,就能看到请求实时出现。


5. grep:在文本海洋里捞针

找包含 error 的行:

grep "error" app.log

忽略大小写:

grep -i "error" app.log

显示行号:

grep -n "error" app.log

反向匹配,也就是“不包含”:

grep -v "DEBUG" app.log

递归搜索目录:

grep -r "database" /etc/myapp/

多个条件可以用扩展正则:

grep -E "error|fail|fatal" app.log

这条在排错时很好用。


6. 管道符 |:Linux 的乐高积木

Linux 很多命令之所以强,是因为可以组合。

管道符:

|

意思是:

“把左边命令的输出,交给右边继续处理。”

比如:

ps aux | grep nginx

左边列出进程,右边筛选 Nginx。

查日志里的错误:

grep "ERROR" app.log | tail -n 20

意思是:

找出所有错误,只看最后 20 条。


7. wc:数一数到底有多少

统计行数:

wc -l app.log

统计单词数:

wc -w file.txt

统计字节:

wc -c file.txt

比如想知道日志里有多少条错误:

grep "ERROR" app.log | wc -l

这就从“我感觉错误很多”升级成了:

“一共有 237 条。”


8. cut:我只要这一列

假设文件:

alice:18:Shanghai
bob:20:Beijing
tom:22:Shenzhen

只取第一列:

cut -d ':' -f 1 users.txt

其中:

-d ':'   指定分隔符
-f 1     取第一列

输出:

alice
bob
tom

处理结构固定的文本时非常方便。


9. sort 和 uniq:排序、去重

排序:

sort names.txt

数字排序:

sort -n numbers.txt

去重:

uniq names.txt

注意:

uniq 只会去掉相邻的重复行。

所以常见组合是:

sort names.txt | uniq

统计每个值出现次数:

sort names.txt | uniq -c

按出现次数排序:

sort names.txt | uniq -c | sort -nr

10. 实战:统计谁访问网站最多

Nginx 访问日志常见格式中,第一列一般是客户端 IP。

可以这样统计:

awk '{print $1}' /var/log/nginx/access.log \
  | sort \
  | uniq -c \
  | sort -nr \
  | head

于是你就能看到:

“今天到底是谁疯狂刷新我的网站?”

这里先记住 awk 的用法就行,后面还会专门讲。


11. 本章挑战

准备一个文件:

cat > users.txt <<EOF
alice
bob
tom
alice
bob
alice
jack
EOF

完成下面任务:

  1. 查看文件总行数
  2. 找出所有 alice
  3. 统计 alice 出现几次
  4. 对全部名字排序
  5. 去除重复名字
  6. 统计每个名字出现次数
  7. 按次数从高到低排列

参考思路:

wc -l users.txt
grep "alice" users.txt
grep "alice" users.txt | wc -l
sort users.txt
sort users.txt | uniq
sort users.txt | uniq -c
sort users.txt | uniq -c | sort -nr

如果这些命令你已经能自然组合,说明你开始理解 Linux 的核心玩法:

一个命令做好一件事,再用管道把它们拼起来。


本章速查

cat file.txt
less file.txt

head -n 20 file.txt
tail -n 50 file.txt
tail -f app.log

grep "ERROR" app.log
grep -i "error" app.log
grep -n "error" app.log
grep -v "DEBUG" app.log
grep -E "error|fail|fatal" app.log

wc -l file.txt
cut -d ':' -f 1 file.txt

sort file.txt
sort -n file.txt
sort file.txt | uniq
sort file.txt | uniq -c
sort file.txt | uniq -c | sort -nr

下一章:

《第八章:Shell 脚本——“每天都敲一遍?我又不是打字员。”》

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。