linux的输入输出重定向和管道
1. 在了解重定向之前,我们先来看看linux 的文件描述符。
linux文件描述符:可以理解为linux为了跟踪打开文件,而分配的一个数字,(人是根据文件名追踪文件,系统则是根据文件描述符),这个数字有点类似c语言操作文件时候的指针,通过指针就可以实现文件的读写操作。 用户可以自定义文件描述符范围是:3-num,这个最大数字,跟用户的:ulimit –n 定义数字有关系,不能超过最大值。
linux启动后,会默认打开3个文件描述符,分别是:标准输入standard input 0,正确输出standard output 1,错误输出:error output 2以后打开文件后。新增文件绑定描述符可以依次增加。 一条shell命令执行,都会继承父进程的文件描述符。因此,所有运行的shell命令,都会有默认3个文件描述符。
Linux 给程序提供三种I/O 设备
标准输入(STDIN )-0 默认接受来自键盘的输入
标准输出(STDOUT )-1 默认输出到终端窗口
标准错误(STDERR )-2 默认输出到终端窗口
对于任何linux命令的执行都有下面的过程:
一条命令的执行需要键盘等的标准输入,命令的执行,和正确或错误,其中的每一个双向箭头就是一个通道,所以数据流既可以流入到文件(就是重定向或管道),也可以流出到屏幕如果命令所需的输入不是来自键盘,而是来自指定的文件,这就是输入重定向。同理,命令的输出也可以不显示在屏幕上,而是写入到指定文件中,这就是输出重定向。
重定向符号
> 输出重定向到一个文件或设备 覆盖原来的文件
>! 输出重定向到一个文件或设备 强制覆盖原来的文件
>> 输出重定向到一个文件或设备 追加原来的文件
< 输入重定向到一个程序
2. 标准错误重定向符号
2> 将一个标准错误输出重定向到一个文件或设备覆盖原来的文件 b-shell
2>> 将一个标准错误输出重定向到一个文件或设备追加到原来的文件
2>&1将一个标准错误输出重定向到标准输出 注释:1就是代表标准输出
>& 将一个标准错误输出重定向到一个文件或设备覆盖原来的文件 c-shell
|& 将一个标准错误管道输出到另一个命令作为输入
接下来看看标准输入/输出重定向在构造一条Linux命令中的实际应用。
3. 输入重定向和输出重定向
第一条命令将文件aa.txt作为wc命令的输入,统计出aa.txt的行数、单词数和字符数。第二条命令将ls命令的输出保存在一个名为ls_file.txt的文件中。如果>符号后边的文件已存在,那么这个文件将被重写。
利用管道
利用Linux所提供的管道符“|”将两个命令隔开,管道符左边命令的输出就会作为管道符右边命令的输入。连续使用管道意味着第一个命令的输出会作为第二个命令的输入,第二个命令的输出又会作为第三个命令的输入,依此类推。下面来看看管道是如何在构造一条Linux命令中得到应用的。
4.利用管道将前面命令的标准输入和标准错误都输入到wc –l进行统计行数
5.将标准输入和标准错误分别进行保存至文件corr.log 和err.log
6.将标准输出和错误输出到同一个文件:
注意:上面的两种方法都行,前者是rhel5以前的版本都支持,&>>是较新的写法
7. 多行重定向:
其中enf是文本结束标识符,可以自己定义文本结束标识符
原文链接:https://blog.51cto.com/jackcui/1832389
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通