Windows 命令提示符(CMD)内容补缺输入输出重定向及管道

Windows 命令提示符(CMD)内容补缺输入输出重定向及管道 大家好你们可以叫我凌是个16岁的网络安全学习者。我们继续来讲操作系统基础这次的将对上篇内容忘记写的进行补充以及讲解输出输入重定向与管道。那么废话不多说我们直接开始吧前篇内容遗漏补充echo 命令——发声器过会在讲重定向 时我们会反复用 echo 来快速创建带内容的文件但它本身的功能不止于此。核心功能在命令行上“说话”echo Hello, World!这条命令会让系统在屏幕上原样输出 Hello, World!。它的核心作用是向“标准输出”发送文本。输出变量值echo 可以解析并显示变量这是调试脚本时最重要的手段。echo %USERNAME% // 显示当前用户名echo %PATH% // 显示系统的路径环境变量% 括起来的部分会被 CMD 解释为变量名echo 会输出它的值。创建文件结合重定向符号 覆盖写入和 追加写入echo 是生成文本文件的最快方式。echo 这是第一行 report.txtecho 这是追加行 report.txt输出空行一个很实用的技巧可以在输出的文本中增加可读性。注意 echo 和 “.” 之间绝对不能有空格。echo. // 正确输出一个空行echo . // 错误输出 .more 命令——分页阅读器当用 dir 列出一个巨大目录或用 type 查看一个长日志文件时屏幕会瞬间被刷满。more 就是用来解决这个痛点的。核心功能分页显示它可以让内容在一屏的末尾停下等你敲下空格键再翻到下一屏。# 直接从文件中读取并分页more C:\Windows\WindowsUpdate.log# 从管道接收其他命令的输出并分页最常用的场景dir C:\Windows\System32 | more常用参数参数功能示例/c显示每页前先清空屏幕more /c log.txt/s将连续多个空行压缩显示为一行more /s log.txt/n直接从文件的第 n 行开始显示more /100 log.txt空格键向下翻一整页/回车键向下滚动一行/Q 键立刻退出 more不再显示后续内容/输入输出重定向与管道思考我们会了用 md、del、copy 等命令对文件和目录进行管理。这些命令执行后结果都直接显示在屏幕上。但如果我们想把结果保存下来或者把一个命令的结果直接交给另一个命令去处理该怎么办必须理解的前置概念标准输入输出在操作系统眼中每个正在运行的程序一出生就自带三条数据通道通道名称编号默认方向通俗理解标准输入0键盘 → 程序程序“听”你说话的地方标准输出1程序 → 屏幕程序正常“回答”你的地方标准错误2程序 → 屏幕程序“报错”的地方理解要点- 当你敲 dir文件列表显示在屏幕上——这是 dir 命令把结果通过标准输出通道1送给了屏幕。- 当你敲错命令出现“不是内部或外部命令”——这是 CMD 通过标准错误通道2送给屏幕的报错信息。- 当一个命令需要你输入比如输入密码它就在等待标准输入通道0。重定向就是人为改变这些通道的默认方向。比如把本该显示在屏幕上的内容存进文件或者把报错信息单独保存到一个日志里。 和 的本质区别这两个符号都叫“重定向操作符”作用是把命令的标准输出送到文件里。但它们的区别至关重要。“”覆盖式重定向命令 文件含义把命令的标准输出覆盖写入到指定文件中。- 如果文件不存在系统会创建它。- 如果文件已经存在系统会**先清空文件内容再写入新内容**。实验演示echo 这是第一行内容 test.txttype test.txt输出这是第一行内容再来一次写入不同的内容echo 这是第二行内容 test.txttype test.txt输出:这是第二行内容注意 “这是第一行内容”彻底消失了被“第二行内容”覆盖了。这就是 的覆盖特性。追加式重定向命令 文件含义把命令的标准输出追加到文件末尾。- 如果文件不存在系统会创建它。- 如果文件已经存在新内容会接在原有内容的后面不会删除旧内容。实验演示echo 这是第一行内容 test.txtecho 这是第二行内容 test.txttype test.txt输出这是第一行内容这是第二行内容两行都在 这就是 “” 和 “” 的核心区别操作符行为使用场景覆盖写入只需要最新的一份数据如导出当前系统配置追加写入持续记录日志、累计数据如审计日志标准错误的重定向标准错误通道2有自己的重定向方式命令 2 文件 把错误信息覆盖写入文件命令 2 文件 把错误信息追加写入文件实验演示dir 一个不存在的文件夹 正常输出.txt 2 错误信息.txt- 因为文件夹不存在dir 报错。- 报错信息进入了 错误信息.txt。- 正常输出.txt 被创建了但内容为空因为没有正常输出。用 type 验证type 错误信息.txt你会看到类似“系统找不到指定的文件”这样的错误信息。以防万一再查看“错误信息.txt”文件把标准输出和标准错误都放进同一个文件命令 全部.txt 2121 的含义是把通道2标准错误的流向指向通道1标准输出当前去的地方。因为通道1已经被 指向了 全部.txt所以通道2也跟着进去了。记忆技巧“21” 可以理解为“让错误跟着正常输出走”。注意这里的“正常输出.txt”内容里面并非空空如也这里系统将报错以外的内容即标准输出仍旧放进了“正常输出.txt”因此会出现以下内容终端助于理解管道符 “|”将两个命令串联起来如果说重定向是“命令到文件”管道就是 “命令到命令”。管道的工作原理命令A | 命令B含义把命令A的标准输出不显示在屏幕上而是直接“喂”给命令B作为命令B的标准输入。最经典的例子防止刷屏dir C:\Windows\System32这条命令会输出几千个文件名屏幕瞬间被刷满你根本来不及看。使用管道配合 more 命令解决dir C:\Windows\System32 | moremore 是个分页显示工具。它接收 dir 的输出然后一页一页地显示等你按空格键继续。more 前面有讲过这里就不进行描述了管道 vs 重定向一句话区分很多初学者容易混淆。记住这个区分就永远不会错操作符功能数据流向重定向命令 → 文件追加重定向命令 → 文件|管道命令 → 命令管道和重定向可以组合使用dir C:\Windows | findstr System 结果.txt这条命令做了什么1. dir 列出 C:\Windows 的内容。2. 管道 | 把输出交给 findstr只保留包含 System 的行。3. 把过滤后的结果写入 “结果.txt”。findstrCMD 下的文本过滤器如果说管道是数据的传送带findstr 就是传送带旁边的质检员。它从输入中逐行读取只让匹配特定模式的行通过。基本用法findstr 关键词 文件名示例findstr Failed system.log这条命令在 system.log 中搜索所有包含 Failed 的行并显示。当然Windows并不存在system.log这个东西我将会创建其他文件进行实验来加深理解从管道接收数据findstr 可以不指定文件名直接从管道接收数据效果和上面完全一样type 输出文件内容管道交给 findstr 过滤。type system.log | findstr Failed显示当前目录下所有名字里包含 txt 的文件和文件夹。dir | findstr txt显示所有和 443 端口相关的网络连接。这是排查 Web 服务时的常用命令。netstat -ano | findstr 443常用参数详解参数含义示例应用场景/i忽略大小写findstr /i error log.txt不管日志里写的是 Error、ERROR 还是 error都能匹配/v反向匹配显示不包含关键词的行findstr /v 成功 log.txt排除干扰信息只看异常的/c精确匹配整段字符串包含空格也看作整体findstr /c:Access Denied log.txt关键词有空格时不用 /c 会被拆开搜索/n显示匹配行的行号findstr /n Error log.txt快速定位日志中错误发生的位置/s在当前目录及所有子目录中搜索findstr /s password *.txt在大量文件中批量搜索敏感信息/m只显示包含匹配内容的文件名不显示具体行findstr /m password *.txt先看看哪些文件有问题再逐个细查参数可以组合使用findstr /i /n /c:access denied *.log在所有日志文件中忽略大小写地搜索 access denied并显示文件名和行号。综合实验任务用重定向和管道完成一次完整的“日志分析与报告生成”流程。步骤第一步创建实验素材echo 系统启动成功 system.logecho 用户admin登录成功 system.logecho 连接数据库失败超时 system.logecho 文件上传成功 system.logecho 密码验证失败用户名或密码错误 system.logecho 用户guest登录失败账户已禁用 system.logecho 操作完成 system.log第二步用 findstr 直接过滤findstr 失败 system.log你应该看到三行包含“失败”的日志。第三步用管道实现同等效果type system.log | findstr 失败效果完全相同但这种方式更灵活——你可以用任何命令产生文本然后交给 findstr。第四步生成错误汇总报告echo 错误日志汇总 错误汇总.txtecho 生成时间%DATE% %TIME% 错误汇总.txtecho. 错误汇总.txttype system.log | findstr /n 失败 错误汇总.txtecho. 错误汇总.txtecho 汇总完毕 错误汇总.txttype 错误汇总.txt第五步反向过滤——看看正常的日志type system.log | findstr /v 失败第六步忽略大小写搜索echo ERROR: 磁盘空间不足 system.logtype system.log | findstr /i error注意我们新增了一个大写的 ERROR用 /i 参数后findstr 会同时匹配 error 和 ERROR。第七步清理实验环境cd ..del system.log