尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Day6 Linux标准IO与日志文件处理
Linux 标准 IO输入/输出与日志文件处理继上一篇《目录、配置文件与日志文件管理》pwd、cp 等命令之后本篇讲解 Linux 中非常重要的一个基础概念——标准 IO以及围绕它衍生出的重定向、管道和三大文本处理工具grep / sed / awk。这些内容是后续做日志分析、故障排查和 Shell 脚本编写的地基。一、标准 IO三种数据流在 Linux 中一切皆文件程序的输入输出也被抽象为数据流。每执行一个命令系统都会为其默认打开三个数据流并用**文件描述符File Descriptor, fd**进行编号文件描述符名称英文默认指向说明0标准输入stdin (Standard Input)键盘程序读取数据的来源1标准输出stdout (Standard Output)终端屏幕程序正确结果的输出2标准错误stderr (Standard Error)终端屏幕程序错误信息的输出执行命令时正确结果和错误结果默认都会显示在终端中这是因为 stdout1和 stderr2的默认目的地都是终端设备。但它们本质是两条相互独立的流可以分别重定向到不同的地方——这是日志分离、错误排查的基础。验证示例# 同时产生标准输出和标准错误ls/etc/passwd /notexist输出中ls: cannot access /notexist: No such file or directory走的是 stderrfd 2而/etc/passwd走的是 stdoutfd 1。二、输出重定向、、2重定向的本质改变数据流的默认目的地把原本输出到屏幕的内容转存到文件中。1.覆盖式重定向标准输出将命令的正确结果写入文件文件原有内容会被清空覆盖。文件不存在则自动创建。# 把目录清单保存到文件ls-l/etcetc_list.txt# 清空一个文件利用空输出的覆盖特性app.log⚠️是覆盖写生产环境对重要文件操作前务必确认避免误清数据。2.追加式重定向标准输出与的唯一区别不清空原内容在文件末尾追加。日志记录场景几乎都用。# 持续记录系统负载不覆盖历史数据uptime/var/log/load_monitor.log# 多次执行内容逐行累积daterun.logecho任务执行完成run.log3.2/2重定向标准错误符号前的数字就是文件描述符。2只捕获错误输出正确结果仍显示在屏幕。# 把报错信息单独存到错误日志ls/notexist2error.log# find 遍历全盘时权限不足的报错很多丢弃到黑洞find/-namenginx.conf2/dev/null/dev/null是 Linux 的黑洞设备写入它的任何数据都会被直接丢弃常用于屏蔽无用输出。重点理解21它的含义是让 fd 2 指向 fd 1 当前指向的地方。下面两条命令顺序不同结果完全不同./app.shall.log21# ✅ 正确stdout 先进文件stderr 再跟随进文件./app.sh21all.log# ❌ 错误stderr 先跟随 stdout此时还是屏幕之后 stdout 才进文件三、输入重定向A改变的是输出的去向则相反让命令不再从键盘读取输入改为从文件中读取。# 统计文件行数注意wc -l file 与 wc -l file 输出格式略有差异wc-l/etc/passwd# 把文件内容作为邮件正文发送mail-s日报adminexample.comreport.txt# 批量创建用户时从文件读入用户列表whilereaduser;douseradd$user;doneusers.txt补充Here Document此处文档在脚本中内联提供多行输入catEOF/etc/motd 服务器已加固请勿违规操作 EOF四、管道|与tee1. 管道|命令之间的传送带管道将前一个命令的标准输出作为后一个命令的标准输入实现多个命令的串联协作。注意管道只传递 stdoutfd 1stderr 不会被传递。# 查看监听中的 TCP 端口ss-tlnp|grepLISTEN# 统计当前系统有多少个 bash 登录会话who|wc-l# 多级管道找出占用内存最高的前 5 个进程psaux--sort-%mem|head-6如需让错误输出也进入管道先合并数据流./app.sh21|grepERROR2.tee一份数据两处去向tee命令读取标准输入同时输出到屏幕和文件——就像水管上的三通接头。需要既看实时输出、又留档记录时非常实用。# 安装过程既在屏幕显示又保存到日志yuminstallnginx-y|teeinstall.log# -a 选项追加而非覆盖./deploy.sh|tee-adeploy_history.log# 配合 sudo 写入无权限的文件经典用法echo 本身没有权限靠 tee 提权写入echonet.ipv4.ip_forward 1|sudotee-a/etc/sysctl.conf五、grep 与正则表达式日志检索的利器grepGlobal Regular Expression Print按模式逐行过滤文本是日志分析中使用频率最高的命令。1. 常用选项选项作用示例-i忽略大小写grep -i error app.log-v反向匹配显示不含关键字的行grep -v ^# nginx.conf-n显示匹配行的行号grep -n failed secure.log-c只统计匹配的行数grep -c 404 access.log-r递归搜索目录grep -r password /etc/-w整词匹配grep -w root /etc/passwd-A n显示匹配行及其后n 行 (After)grep -A 3 ERROR app.log-B n显示匹配行及其前n 行 (Before)grep -B 3 ERROR app.log-E启用扩展正则等价于 egrepgrep -E 4042. 基础正则表达式BRE常用元字符符号含义示例^行首锚定grep ^root /etc/passwd匹配以 root 开头的行$行尾锚定grep bash$ /etc/passwd匹配以 bash 结尾的行.匹配任意单个字符grep r..t file可匹配 root、rust*前一个字符出现 0 次或多次grep ab*c file[...]字符集合grep [0-9] file匹配含数字的行[^...]字符集合取反grep -v ^# nginx.conf | grep -v ^$过滤注释和空行实战示例——分析 Nginx 访问日志# 找出所有 5xx 服务端错误grep-E 5[0-9]{2} /var/log/nginx/access.log# 统计今天 404 出现的次数grep-c404/var/log/nginx/access.log# 查看某个 IP 的全部访问记录grep192.168.10.100/var/log/nginx/access.log六、sed流式文本编辑器sedStream Editor逐行读取文本按规则进行增、删、改、查适合批量、非交互式的文本修改。1. 核心语法sed [选项] 动作 文件2. 替换最常用# 格式s/旧内容/新内容/标志# 只替换每行第一个匹配项默认seds/error/ERROR/app.log# g 标志替换每行所有匹配项seds/8080/9090/gnginx.conf# -i直接修改文件内容不带 -i 时只在屏幕预览不改原文件建议先预览再加 -ised-is/SELINUXenforcing/SELINUXdisabled//etc/selinux/config# 修改前自动备份原文件为 .baksed-i.baks/8080/9090/gnginx.conf3. 删除与按行操作# 删除第 5 行sed5dfile# 删除所有空行sed/^$/dfile# 删除所有注释行sed/^#/dnginx.conf# 只打印第 10~20 行配合 -n 抑制默认输出sed-n10,20papp.log4. 实战示例# 快速查看配置文件有效内容去掉注释和空行grep-v^#nginx.conf|grep-v^$|seds/^[ \t]*//# 批量把日志中的手机号脱敏扩展正则用 -r 或 -Esed-rs/(1[0-9]{2})[0-9]{4}([0-9]{4})/\1****\2/guser.log七、awk字段级文本处理与统计awk把每行文本按分隔符切分成字段列可精确取列、计算、汇总是处理日志和报表的瑞士军刀。![请添加图片描述](https://i-blog.csdnimg.cn/direct/5f071630c22d484d8883ab73c142643b.png1. 基本概念awk [选项] 模式 {动作} 文件默认以**空白字符空格/Tab**为分隔符-F可自定义$0表示整行$1、$2… 表示第 1、2… 列$NF表示最后一列NR当前行号NF当前行的字段数2. 取列最常用# 打印第 1 列查看所有用户名awk-F:{print $1}/etc/passwd# 打印第 1 列和第 3 列自定义输出格式awk-F:{print 用户: $1, UID: $3}/etc/passwd# 找出 UID 大于等于 1000 的普通用户条件过滤awk-F:$3 1000 {print $1}/etc/passwd3. 统计分析日志场景# 统计 access.log 中各 HTTP 状态码出现的次数awk{print $9}access.log|sort|uniq-c|sort-rn# 统计访问量最高的前 10 个 IPawk 内建数组直接完成awk{count[$1]} END {for (ip in count) print count[ip], ip}access.log|sort-rn|head-10# 计算某列总和统计磁盘各分区使用量之和df-m|awkNR1 {sum $3} END {print 总使用: sum MB}# 找出响应大小超过 1MB 的请求awk$10 1048576 {print $7, $10}access.log4. BEGIN / END 块# BEGIN 在处理前执行一次END 在处理完执行一次 —— 适合做表头和汇总awk-F:BEGIN {print 用户列表 } {print NR. $1} END {print 共 NR 个用户}/etc/passwd八、组合实战一次完整的日志排查假设线上接口报错需要排查 Nginx 日志典型排查链路如下# 1. 先看错误日志最近的 50 条记录tail-50/var/log/nginx/error.log# 2. 实时跟踪日志排障必备CtrlC 退出tail-f/var/log/nginx/access.log# 3. 定位今天 15 点左右的所有 500 错误并保存到文件备查grep30/Sep/2026:15access.log|grep 500 |tee500_errors.txt# 4. 统计这些错误是由哪些 IP 触发的按次数排序grep 500 access.log|awk{print $1}|sort|uniq-c|sort-rn|head# 5. 错误请求和正常流量分开归档重定向分离grep 500 access.log500.loggrep-v 500 access.lognormal.log这套组合拳就是 Linux 日志处理的核心思路grep 负责找sed 负责改awk 负责算重定向和管道负责串联与落盘。九、本篇小结知识点核心内容三种数据流0 标准输入、1 标准输出、2 标准错误默认分别指向键盘和终端输出重定向覆盖、追加、2重定向错误、/21合并输出输入重定向从文件读入、此处文档管道与 teegrep按行过滤-v/-n/-c/-i/-E高频选项配合正则精确匹配sed流式编辑s/old/new/g替换d删除-i落盘前先预览awk按列处理-F指定分隔符$1取列支持数组统计与汇总掌握这些命令后面对任何日志文件都能快速完成检索 → 过滤 → 统计 → 归档的完整处理流程这也是 SRE/运维日常排障的基本功。
RELATED

相关推荐

AI原生测试范式与实战:2026年测试工程师的新边界

AI原生测试范式与实战:2026年测试工程师的新边界

2026年,软件测试行业正在经历一场从“脚本时代”到“智能时代”的剧烈换挡。AI原生范式不是简单的自动化升级,而是把测试的底层逻辑都改掉了。过去我们测的是确定逻辑,今天测的是概率输出;过去维护的是用例库,今天维护…

📅 2026/10/1 14:23:12
UART串口通信从原理到实战:帧结构、波特率与调试技巧

UART串口通信从原理到实战:帧结构、波特率与调试技巧

还记得第一次调串口输出的时候,我对着满屏的乱码折腾了整整一个下午。明明代码看着没问题,硬件连接也没错,就是打印出来的东西不对。后来才明白,不是代码的错,是我压根没搞懂UART到底是怎么把数据从A点搬到B点的。UART…

📅 2026/10/1 14:23:12
eBPF实战:Nginx P99延迟飙升真凶与排查记录

eBPF实战:Nginx P99延迟飙升真凶与排查记录

1. 事故现场:P99 莫名飙高,常规排查全部落空 1.1 故障现象与监控数据 那天晚上八点刚过,运维群里就炸了。图片上传大面积转圈,接口响应时间翻着跟头往上涨。我拉出监控一看,Nginx 网关层的 P99 延迟从平日的 40ms 左右…

📅 2026/10/1 14:23:12
MORE NEWS

更多资讯

📰

YOLOv7打电话检测实战:从数据集构建到模型训练与部署

简介:面向需要YOLOv7打电话行为检测方案的开发者与AI学习者,这套资源把训练好的打电话识别权重、带标注的数据集以及PyTorch训练代码整合在一起,完整覆盖数据准备、模型训练、验证检测和落地部署环节。压缩包共统计2000个文件,图像…

📰

C语言单链表全面解析:从原理到插入删除逆序的完整实现

1. 内容整体设计与思路拆解 先聊一个经常被新手忽略的事实:单链表几乎是所有指针类数据结构里最“劝退”的一个,但它同时也是面试、课程设计、底层系统开发里出现频率最高的一种结构。很多人在学 C 语言的时候,数组用得贼溜,一碰到…

📰

Kafka与MongoDB协作架构:从数据采集到文档落库的实战指南

我去年接了一个物联网设备数据采集项目,设备端每5秒上报一次JSON格式的状态数据,高峰期每天要落库将近1亿条文档。一开始我图省事,让设备端直连MongoDB暴力写入,结果扛到第三天就出事了——写入尖峰把数据库连接池打满&#xff0c…

📰

UE到Unity资产迁移插件实战:跨引擎资源搬运的自动化转换逻辑

1. 跨引擎资产搬运:为什么总有团队需要这种插件1.1 一个做工具链的人每天面对的真实场景先说说我自己遇到的情况。工作室做了两年多的UE原型项目,里面的白盒关卡、角色动画、材质资产已经积累到几十个G。后来因为发行和招聘等原因,项目整体转…

📰

ai软件开发公司怎么选?看这3个维度不踩坑

你在挑选那个ai软件开发公司的时候, 千万别光死盯着那张报价单看。真正能帮你绕开百分之八十那些大坑的, 其实是这三样关键的东西。你要去仔细看看他们技术栈到底有多深, 他们的交付过程能不能被追溯到源头, 还有他们后续的售后服务和迭代升级的能力到底强不强。 一家公司能不能…

📰

G120变频器DDS驱动数据组配置与切换实战指南

1. 从一台挤出机的调试现场说起:为什么DDS参数组值得单独拎出来讲第一次接触G120的DDS功能,是在一条挤出机生产线上。当时设备运行状态很稳定,但每次换模具、换配方,操作工都要在BOP面板上翻十几页参数,手动改一遍电机…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬