重定向——Linux

本文详细介绍了Linux系统中的重定向概念,包括输出重定向、输入重定向和绑定重定向,以及如何利用重定向实现进程间通信。通过示例解释了不同重定向指令的用法,如`>`用于覆盖输出,`>>`用于追加输出,以及如何同时处理标准输出和错误输出。此外,还提到了`<`用于输入重定向和管道符`|`的应用,后者允许命令的输出成为另一个命令的输入,实现命令链的组合操作。

 

目录

前言

重定向

指令

    相关函数

     管道符 |


前言

    重定向在linux中的应用比较多,重定向就是把原本要写入A的数据,不写入A,反而写入B了,在linux中可以用重定向来完成进程间通信(使用管道)。

重定向

    重定向就是将原本要输入A的数据,不写入A,而是写入B。对linux来说键盘、鼠标就是一种输入设备,也叫标准输入设备,显示器,屏幕,音响等就是标准输出设备,重定向就是将本应该由标准输入/输出设备要输入的数据,转由其他文件或设备输入/输出

    文件标识符:linux用整数来指明与特定进程间的数据流,一般是0~9,其中系统在打开任意一个进程时都会默认打开三个文件:stdin(标准输入,0)、stdout(标准输出,1)、stderr(标准错误,2),所以如果要给进程打开其他文件,则只能从3开始。

    另外一提,通常向文件写入数据时,会先将数据写入缓冲区,但对于系统调用接口(open、read、write等)没有缓冲区,是直接写入/打印文件,但printf、fprintf、fwrite等是有缓冲区的,如果在不刷新缓冲区就退出进程的情况下,缓冲区里的数据会丢失。

指令

    ~ 输出重定向

    Command > filename 将标准输出重定向到一个新文件

    Command >> filename 将标准输出以追加的方式重定向到一个新文件

    Command > filename 2>&1 将标准输出和标准错误一起重定向到一个新文件中

    Command 2 > filename 将标准错误重定向到一个新文件中

    Command 2 >> filename 将标准错误以追加的方式重定向到一个新文件中

    Command >> filename 2>&1 将标准输出和标准错误以追加的方式重定向到一个新文件中

   ~ 输入重定向

    Command < filename > filename2: command命令以filename作为标准输入,以filename2作为标准输出

    Command < filename:以filename作为标准输入

    Command < delimiter:从标准输入中读入,直到遇到delimiter分界符

   ~ 绑定重定向

    Command > &m:将标准输出重定向到文件描述符m中

    Command < &-:关闭标准输入

    Command 0 > &-:关闭标准输入

    举例:

    ls 1 > test.txt:将标准输出重定向到text.txt文件

    2 > &1 :&1表示标准输出,该指令表示将标准错误重定向到标准输出

    ./main > /dev/null  2 > &1 :将标准错误标准输出都重定向到/dev/null文件,该指令是先将1重定向到文件,再将2重定向到1,所以,1和2其实都重定向到了文件

 

    ./main 2 > &1 > /dev/null :将标准错误重定向到标准输出,然后将标准输出重定向到/dev/null,该指令和上面一条并不一样。这个是先将2重定向到1也就是显示器,再将1重定向到文件,1和2最终指向不一样

 

    相关函数

      int dup2(int oldfd,int newfd):让newfd和oldfd都指向oldfd所代表的文件,相当于把newfd重定向到oldfd,如果newfd本身代表了一个已经打开的文件,则重定向前会释放其文件。

     管道符 |

      管道就是重定向的一种表现,可以将一个命令的输出作为下一个命令的输入,可通过多个命令相互配合来完成比较复杂的内容。

### Linux Shell脚本中管道和重定向的用法 在Linux Shell脚本中,管道和重定向是非常重要的概念。它们允许用户将命令的输出捕获到文件中或作为另一个命令的输入,从而实现复杂的数据处理任务。 #### 一、重定向操作 重定向用于改变标准输入(stdin)、标准输出(stdout)和标准错误输出(stderr)的方向。以下是常见的重定向符号及其功能: - `>`:将输出重定向到文件,覆盖原有内容[^2]。 - `>>`:将输出追加到文件末尾,不会覆盖原有内容[^2]。 - `<`:将文件内容作为命令的标准输入[^2]。 - `2>`:将错误信息重定向到指定文件[^2]。 - `&>`:将标准输出和错误输出同时重定向到同一文件。 例如,以下命令将`ls`命令的输出保存到`file_list.txt`中: ```bash ls > file_list.txt ``` #### 二、管道操作 管道是一种将一个命令的输出直接作为另一个命令的输入的方法。通过使用竖线`|`,可以将多个命令连接起来形成一个管道链。其基本语法为: ```bash command1 | command2 [ | commandN... ] ``` 每个命令的输出都会成为下一个命令的输入[^3]。 例如,以下命令将`ls`命令的输出传递给`grep`命令,筛选出包含`.txt`的文件名: ```bash ls | grep ".txt" ``` #### 三、结合重定向与管道 在实际应用中,通常会结合重定向和管道来完成更复杂的任务。例如,以下命令将`ls`命令的输出通过`grep`筛选后,保存到`result.txt`文件中: ```bash ls | grep ".txt" > result.txt ``` 此外,还可以将错误输出重定向到文件中。例如,以下命令将`ls`命令的错误信息保存到`error.log`中: ```bash ls non_existent_file 2> error.log ``` #### 四、Shell脚本中的管道与重定向 在Shell脚本中,可以利用管道和重定向来实现自动化任务。例如,以下脚本将目录中的所有`.txt`文件名保存到`output.txt`中: ```bash #!/bin/bash ls | grep ".txt" > output.txt ``` 此脚本的第一行`#!/bin/bash`指定了脚本的运行环境,确保脚本由`/bin/bash`解析执行。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值