连载中 8/20

管道与重定向:Linux 的精髓在组合

2026-10-15 · 35 阅读 · 0 评论 · 0 赞

管道的本质:给数据流接线

$ cat access.log | grep " 500 " | awk '{print $1}' | sort | uniq -c | sort -rn | head

| 把左边命令的标准输出接到右边命令的标准输入,数据像水一样流过整条线。背后的哲学一句话:每个程序只做一件事并做好它,复杂问题靠组合解决。所以 Linux 命令几乎都遵守「有输入、有输出、不问来源」的约定——cat、grep、awk、sort 这类「过滤器」天生能串。

重定向:> >> 2> 与 /dev/null

$ grep ERROR app.log > error.log       # 覆盖写入(原有内容清空)
$ grep ERROR app.log >> error.log      # 追加写入(保留原有内容)
$ make 2> build_err.log                # 只收错误输出(2 = stderr)
$ command > all.log 2>&1               # 标准输出和错误合并进同一个文件
$ command > /dev/null 2>&1             # 全部丢弃(定时任务静默跑)

1 是 stdout,2 是 stderr;2>&1 意为「把 2 接到 1 当前指向的地方」,顺序不能写反。/dev/null 是黑洞文件,写进去的东西全部蒸发——不想看的输出、不想被邮件打扰的 crontab,统统丢这里。

xargs:把输出变成参数

管道传的是「数据流」,但 rm、cp、kill 这类命令只吃「参数」。xargs 是两者之间的翻译官:

$ find . -name "*.log" | xargs rm           # 找到的每个文件名变成 rm 的参数
$ cat servers.txt | xargs -n 1 ping -c 1    # 每行内容作为参数逐个执行
$ grep -rl "8080" conf/ | xargs sed -i.bak 's/8080/9090/g'   # 上篇的批量替换

体会差别:cat f | grep x 是数据流进 grep;ls | xargs rm 是文件名变成 rm 的参数。「命令不认管道输入」时,第一反应就是加 xargs。

tee 与子命令替换

$ ./deploy.sh | tee run.log        # 边在屏幕实时显示、边写入文件
$ ./deploy.sh | tee -a run.log     # -a 追加而不是覆盖
$ PORT=$(cat config.json | awk -F":" '{print $2}')   # $( ) 把命令输出赋给变量
$ echo $PORT

tee 在排查时极好用:既想实时盯输出,又想留一份完整档案;$( ) 则是写 shell 脚本的基石。

组合实战:三道高频题

# 1. 当前目录下哪个文件夹最占空间?
$ du -sh * | sort -rh | head

# 2. TCP 连接状态统计(有没有大量 TIME_WAIT / SYN_RECV?)
$ ss -ant | awk 'NR>1{print $1}' | sort | uniq -c

# 3. 最近登录的来源 IP 有没有陌生的?
$ last -20 | awk '{print $3}' | sort -u

每一条都是「小火柴串成的火箭」——单个命令平平无奇,组合起来就是完整的排查动作。至此文本处理段收官,下一篇进入系统管理段第一篇:用户与权限,聊聊 chmod 777 为什么是事故之源。

☕
503

10 年全栈工程师 · 503咖啡馆主理人

#管道#重定向#xargs#shell#Linux哲学

评论 (0)

热门推荐

连载中 11/22

主从搭建实操:从零配出一主两从

光讲原理不过瘾?手把手搭一主两从:my.cnf 六个参数、复制账号、GTID、CHANGE REPLICATION SOURCE TO、SHOW REPLICA STATUS 验收,附翻车排查清单。

#MySQL#主从复制#GTID#主从搭建#高可用
2026-05-07 · 10114 阅读 · 0 评论 · 0 赞
连载中 16/22

连接池:HikariCP 参数与连接风暴

连接池不是越大越好:8 核机器配 1000 连接反而更慢的数学原理,HikariCP 四个必调参数,maxLifetime 与 wait_timeout 的隐形陷阱。

#MySQL#连接池#HikariCP#maxLifetime#连接风暴
2026-05-10 · 9877 阅读 · 0 评论 · 0 赞
连载中 4/16

缓存穿透:恶意 ID 打穿 MySQL 的四道防线

请求的数据在缓存和数据库里都不存在时,缓存形同虚设。聊聊参数校验、空值缓存、布隆过滤器、限流熔断四道防线的原理与组合打法。

#Redis#缓存穿透#布隆过滤器#高可用
2026-05-16 · 9307 阅读 · 21 评论 · 287 赞