屏幕一堆报错看花眼?一套重定向语法,把正常日志、报错彻底分家

发布时间:2026/7/18 3:23:29
屏幕一堆报错看花眼?一套重定向语法,把正常日志、报错彻底分家 屏幕一堆报错看花眼一套重定向语法把正常日志、报错彻底分家一、Linux 输入输出重定向介绍1.1 什么是标准流Linux 里程序运行时数据只会走 4 条固定通道叫做标准流一切皆文件屏幕、键盘、硬盘文件都统一当成文件处理重定向就是把数据从一个通道挪去另一个通道。1.2 四条标准通道stdin 标准输入编号 0作用程序接收输入的通道默认来源是键盘打字。特点只能读数据不能往里面写内容。举例cat不跟文件时你打字回车程序读取你输入的文字。stdout 标准输出编号 1作用程序正常运行结果的通道默认打印到终端屏幕。特点只能写数据正常打印、查询结果都走这里。举例ls、find查到的文件列表都是标准输出。stderr 标准错误编号 2作用程序报错、权限不足、找不到文件的提示通道默认也打印到屏幕。特点只输出报错信息和正常结果分开两条通道方便分开保存。举例find访问没权限的文件夹弹出「权限不够」就是标准错误。自定义文件通道3 及以上数字作用自己指定硬盘上的文件读写数据没有默认绑定需要手动写文件名。特点既能读也能写日志、配置文件都走这个通道。1.3 整体运行逻辑输入流程键盘打字 → stdin (0) → 程序读取数据输出流程程序运行分两路输出正常结果 → stdout (1) → 默认屏幕报错提示 → stderr (2) → 默认屏幕重定向核心改变默认通道目的地把本该打印屏幕的内容存到文件、管道或者直接扔掉。二、标准输出重定向到文件 / 2.1 覆盖写入1 / 清空文件再写语法简写1可以直接省略数字写成中间不能加空格[xiaomacentos7 ~18:45:49]$find/etc-namepasswdpasswd.list find: ‘/etc/grub.d’: 权限不够 find: ‘/etc/pki/CA/private’: 权限不够 find: ‘/etc/pki/rsyslog’: 权限不够 find: ‘/etc/dhcp’: 权限不够......[xiaomacentos7 ~18:47:05]$catpasswd.list /etc/pam.d/passwd /etc/passwd把 find 命令查到的正常文件列表覆盖写入 passwd.list 文件原本文件里的内容会全部清空。个人理解每次执行都会清空旧数据适合每次执行都要全新记录日志的场景。执行效果屏幕只打印报错正常查到的文件名字全部存进文件里。[xiaomacentos7 ~18:47:45]$cat/etc/fstab /etc/hostsallinone把两个配置文件的内容合并覆盖写到 allinone 文件。2.2 追加写入1 / 文件末尾接着加内容不清空[xiaomacentos7 ~18:49:11]$find/etc-namepasswdpasswd.list find: ‘/etc/grub.d’: 权限不够 find: ‘/etc/pki/CA/private’: 权限不够 find: ‘/etc/pki/rsyslog’: 权限不够 find: ‘/etc/dhcp’: 权限不够......[xiaomacentos7 ~18:50:25]$catpasswd.list /etc/pam.d/passwd /etc/passwd /etc/pam.d/passwd /etc/passwd新查到的文件名字追加写到 passwd.list 文件末尾不会删掉原来的内容。个人理解循环执行、持续记录日志用追加不会丢失之前的记录。2.3 标准错误重定向2 / 22 覆盖保存报错[xiaomacentos7 ~18:50:58]$find/etc-namepasswd2passwd.err /etc/pam.d/passwd /etc/passwd[xiaomacentos7 ~18:51:56]$catpasswd.err find: ‘/etc/grub.d’: 权限不够 find: ‘/etc/pki/CA/private’: 权限不够 find: ‘/etc/pki/rsyslog’: 权限不够......只把权限不足这类报错信息覆盖写入 passwd.err正常文件列表依旧打印在屏幕。2 追加保存报错[xiaomacentos7 ~18:51:02]$find/etc-namepasswd2passwd.err[xiaomacentos7 ~18:53:14]$find/etc-namepasswd2passwd.err /etc/pam.d/passwd /etc/passwd[xiaomacentos7 ~18:53:48]$catpasswd.err find: ‘/etc/grub.d’: 权限不够 find: ‘/etc/pki/CA/private’: 权限不够 find: ‘/etc/pki/rsyslog’: 权限不够......新报错追加到文件末尾旧报错保留。2.4 扔掉报错信息 /dev/null黑洞文件/dev/null 是系统特殊空文件任何写进去的数据都会直接消失用来屏蔽烦人的报错。[xiaomacentos7 ~18:52:26]$find/etc-namepasswd2/dev/null /etc/pam.d/passwd /etc/passwd所有报错全部丢掉屏幕只显示正常查到的文件看不到权限不足提示。个人理解批量查询不需要看报错时必用界面干净清爽。2.5 正常输出、错误输出分开存两个文件# 覆盖写法[xiaomacentos7 ~18:54:46]$find/etc-namepasswdpasswd.list2passwd.err#追加写法[xiaomacentos7 ~18:55:50]$find/etc-namepasswdpasswd.list2passwd.err正常文件列表存 passwd.list报错单独存 passwd.err屏幕无任何输出。2.6 正常、错误全部存同一个文件 / # 覆盖写法[xiaomacentos7 ~19:01:48]$find/etc-namepasswdpasswd.all# 追加写法[xiaomacentos7 ~19:02:48]$find/etc-namepasswdpasswd.all不管是正常结果还是报错全部写入同一个文件屏幕不打印任何内容。2.7 快速新建 / 清空文件# 清空已有testfile不存在就新建空文件[xiaomacentos7 ~18:56:37]$testfile# 追加空内容文件不会清空[xiaomacentos7 ~18:56:57]$testfile单独一个大于号后面跟文件名一键清空文件脚本里经常用来重置日志。三、管道符 | 标准输出重定向到另一个程序3.1 管道基础作用管道|把前一条命令的标准输出 stdout直接当成后一条命令的标准输入 stdin不用中间文件一行串联多条操作。示例 1搜索 ext4 磁盘相关手册分步写法# 1、先把所有ext4手册存文件[xiaomacentos7 ~19:30:41]$man-kext4ext4.man# 2、从文件过滤包含resize的行[xiaomacentos7 ~19:31:09]$grepresizer ext4.man resize2fs(8)- ext2/ext3/ext4filesystem resizer管道一行简写不用中间文件[xiaomacentos7 ~19:32:51]$man-kext4|grepresizer resize2fs(8)- ext2/ext3/ext4filesystem resizer前半命令输出的所有手册列表直接传给 grep 过滤只留下带 resize 的内容。示例 2提取 ens33 网卡 IP 地址[xiaomacentos7 ~19:39:14]$ipaddr|grepens33$|awk{print $2}|cut-d/-f110.1.8.103.2 管道注意点管道只传递标准输出 1不会传递标准错误 2且后面的命令必须能接收输入ls不接收管道输入所以echo /etc/passwd | ls -l不会生效。3.3 管道 错误同步传递 |普通管道看不到报错|会把标准输出 标准错误一起传给后面命令ls-lfile-{01..06}|grepfile-06找不到文件的报错、正常查到的文件信息全部交给 grep 过滤。四、tee 命令一边打印屏幕、一边存文件4.1 tee 基础覆盖保存[xiaomacentos7 ~19:43:38]$find/etc-namepasswd2/dev/null|teepasswd.list /etc/pam.d/passwd /etc/passwd[xiaomacentos7 ~19:43:49]$catpasswd.list /etc/pam.d/passwd /etc/passwdfind 查到的文件同时做两件事①打印在屏幕给你看 ②覆盖写入 passwd.list 文件。个人理解既要实时看结果又要保存日志tee 是运维高频工具不用分开两条命令。4.2 tee -a 追加保存不清空旧文件[xiaomacentos7 ~19:45:01]$find/etc-namepasswd2/dev/null|tee-apasswd.list /etc/pam.d/passwd /etc/passwd[xiaomacentos7 ~19:45:08]$catpasswd.list /etc/pam.d/passwd /etc/passwd /etc/pam.d/passwd /etc/passwd屏幕正常输出新内容追加到文件末尾不覆盖原有数据。4.3 tee 串联多级管道[xiaomacentos7 ~19:45:23]$man-kpasswd|teepasswd.man|greppasswdchgpasswd(8)- 批量更新组密码 chpasswd(8)- 批量更新密码 gpasswd(1)- administer /etc/group and /etc/gshadow.........手册内容先存进 passwd.man同时继续传给 grep 过滤关键词保存 筛选一步完成。五、标准输入重定向 / 把文件 / 多行文本传给程序5.1 单文件输入重定向[xiaomacentos7 ~19:46:45]$cat/etc/hosts127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6把 /etc/hosts 文件内容当成 cat 命令的标准输入和直接 cat /etc/hosts 效果一致。适用场景部分程序只能从 stdin 读取数据不能直接传文件路径。5.2 EOF 多行文本输入批量写入文件神器[xiaomacentos7 ~23:01:04]$catEOFhelloworldEOF hello world从 EOF开始到单独一行EOF结束中间所有文字全部写入 multi-lines.txt覆盖原有内容。追加版本 [xiaomacentos7 ~23:02:52]$catmulti-lines.txtEOFhello worldhello pythonhello linuxEOF[xiaomacentos7 ~23:04:32]$catmulti-lines.txt hello world hello python hello linux把多行文字追加到文件末尾不删除原有内容。5.3 单行字符串输入[xiaomacentos7 ~23:06:26]$cathello worldhello world直接把引号内单行文字传给 cat 打印简单单行文本快速输入。全文总结输入输出重定向是 CentOS 运维核心基础整套内容分四大模块四大标准流基础0 输入、1 正常输出、2 错误输出、3 自定义文件核心是区分正常打印和报错两条独立通道方便分开处理。文件重定向符号覆盖、追加存正常结果2/2单独存报错统一存所有输出/dev/null黑洞丢弃无用报错。管道 | 和 tee管道串联多条命令传递正常输出|同时传输出 报错tee 实现屏幕打印 保存文件双需求排查日志超实用。输入重定向 / EOF读取文件当输入 EOF批量多行写入文件写脚本、批量生成配置必备。