0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

在bash中如何进行各种文件重定向呢?

dyquk4xk2p3d 来源:ytcoode 2023-08-25 09:31 次阅读

0x01 测试程序

本文会用以下测试程序,来演示在bash中,如何进行各种文件重定向:

66ad7562-42d7-11ee-a2ef-92fbcf53809c.png

上图是一段rust代码,其主要逻辑是,从标准输入读取数据,然后将这些数据分别写到标准输出和标准错误输出里。

0x02 将标准输入重定向到 /dev/null

66bc5762-42d7-11ee-a2ef-92fbcf53809c.png

/dev/null 是linux下的一个特殊文件,从该文件读取数据时,内核会直接返回EOF,即读不到任何数据,所以在上图中,stdout/stderr行的输出都为空。

0x03 将标准输入重定向到普通文件

66d0399e-42d7-11ee-a2ef-92fbcf53809c.png

上图先用echo命令,把hello字符串写到stdin.log,然后执行测试程序,把它的标准输入重定向到stdin.log,此时stdout/stderr行就都输出了hello字符串。

0x04 将标准输出重定向到普通文件

66d99c78-42d7-11ee-a2ef-92fbcf53809c.png

上图把标准输出重定向到了stdout.log,所以终端只输出了stderr行,而stdout行被写到了stdout.log文件中。

0x05 将标准错误输出重定向到普通文件

66fb9b20-42d7-11ee-a2ef-92fbcf53809c.png

这次把标准错误输出也做了重定向,所以终端上没有任何输出,所有输出都保存到了各自的文件里。

因为标准错误输出的文件描述符是2,所以上面用了 2> 这种符号重定向标准错误输出。

0x06 将标准输出及错误输出重定向到同一文件

670b4dea-42d7-11ee-a2ef-92fbcf53809c.png

上图先把标准输出重定向到hello.log,然后再通过 2>&1 这个符号,把标准错误输出的文件描述符2,指向当前标准输出的文件描述符1指向的文件,即hello.log,这样标准错误输出就也指向了hello.log。

这里需要注意重定向操作符的顺序,比如下面这个就是错的:

6714a32c-42d7-11ee-a2ef-92fbcf53809c.png

上图中先通过 2>&1,把标准错误输出的文件描述符2,指向当前标准输出的文件描述符1指向的文件,因为当前文件描述符1和2都指向终端,所以这一步是没有任何效果的。

然后,再将标准输出重定向到hello.log

通过上述步骤,标准输出内容就写到了hello.log里,但标准错误输出内容,还是写到了终端里,所以这个写法是不行的。

除了上述方式外,我们还可以用下面的方式,将标准输出/错误输出都重定向到同一文件:

6723fd68-42d7-11ee-a2ef-92fbcf53809c.png

0x07 将标准输出及错误输出追加到同一文件

以上介绍的,将输出重定向到文件的方式,都会覆盖掉原文件的内容,如果不想覆盖原文件的内容,而是想把新的输出追加到该文件,可以用下面的方式:

67452d62-42d7-11ee-a2ef-92fbcf53809c.png

和覆盖原文件使用的命令差不多,只是多了一个大于号而已。

0x08 将指定字符串作为标准输入内容

6754448c-42d7-11ee-a2ef-92fbcf53809c.png

上面只是将单行字符串作为标准输入内容,如果想把多行字符串作为标准输入内容,可以用以下方式:

676dc75e-42d7-11ee-a2ef-92fbcf53809c.png

上图中,先将各种输出都重定向到hello.log,然后再将两个xxx之间的内容,作为标准输入。

注意,xxx这个字符串是可以任意指定的。

0x09 将标准输出及错误输出重定向到指定tcp服务器

先用ncat命令开启一个tcp服务器,监听端口9999:

6781e540-42d7-11ee-a2ef-92fbcf53809c.png

然后用以下命令,将所有输出都重定向到该服务器:

678a9a0a-42d7-11ee-a2ef-92fbcf53809c.png

上图中,localhost指定的是目标服务器的地址,9999指定的是目标服务器的端口,其余部分是固定的。

在执行完该命令后,查看ncat命令那张图,就能看到对应的输出了。






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux系统
    +关注

    关注

    4

    文章

    567

    浏览量

    26923
  • TCP通信
    +关注

    关注

    0

    文章

    145

    浏览量

    4138
  • bash终端
    +关注

    关注

    0

    文章

    7

    浏览量

    1961
  • rust语言
    +关注

    关注

    0

    文章

    58

    浏览量

    2958

原文标题:bash中奇奇怪怪的文件重定向

文章出处:【微信号:良许Linux,微信公众号:良许Linux】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    请问S3C2440为什么重定向时要注释掉u-boot自带的重定向代码

    Flash的数据,那为什么重定向时要注释掉u-boot自带的重定向代码?自带u-boot代码:copy_loop:ldmiar0!, {r3-r10} /* copy from
    发表于 09-16 10:29

    如何对Linux Bash输入输出重定向

    Linux - Bash - 输入输出重定向
    发表于 04-27 09:01

    标准的c库函数printf进行重定向

    了很大的变化。  有的同学在学习STM32的时候,可能会遇到一个问题那就是串口通信printf重定向。st官方并没有提供printf函数给我们用,这时候如果想要使用printf向串口打印日志的话那就需要对printf进行重定向
    发表于 08-20 06:54

    实现printf函数的重定向

    目录重定向函数属性设置重定向函数配置好串口之后需要在相关文件添加以下函数以实现printf函数的重定
    发表于 08-24 07:09

    如何对printf函数的输出进行重定向

    怎样去使用printf函数打印基本的显示信息?如何对printf函数的输出进行重定向
    发表于 11-30 07:29

    怎样去重定向fputc函数

    为什么要将fputc函数重定向?怎样去重定向fputc函数
    发表于 11-30 07:02

    如何对printf()函数或scanf()函数进行重定向

    怎样用串口来测试代码的正确与否?如何对printf()函数或scanf()函数进行重定向
    发表于 11-30 07:41

    如何对printf函数进行重定向

    为什么要对printf函数进行重定向?如何对printf函数进行重定向
    发表于 12-01 07:26

    如何使用KEIL5对stm32的printf函数进行重定向

    能不能用串口实现类似windows的Console的printf?如何使用KEIL5对stm32的printf函数进行重定向
    发表于 12-01 08:09

    如何在Keil下去使用STlink对printf进行重定向

    如何在Keil下去使用STlink对printf进行重定向?对printf重定向有哪些步骤?
    发表于 12-01 06:48

    如何对重定向到printf()后的串口进行调试

    什么是预定义宏?预定义宏有哪些?如何对重定向到printf()后的串口进行调试
    发表于 12-01 08:11

    如何对printf重定向进行STM32CubeIDE配置

    如何对printf重定向进行STM32CubeIDE配置
    发表于 12-02 06:42

    怎样Ubuntu+vscode环境下对printf进行重定向

    怎样Ubuntu+vscode环境下添加stdio.h?怎样Ubuntu+vscode环境下对printf进行重定向
    发表于 12-02 07:00

    如何对printf进行重定向进行打印

    如何对STM32F103串口时钟进行配置?如何对printf进行重定向进行打印
    发表于 12-02 07:25

    如何对printf函数进行重定向

    如何对printf函数进行重定向?怎样使用printf函数通过串口打印调试信息
    发表于 01-27 06:58