【Linux】重定向(输入重定向 | 输出重定向)

这篇具有很好参考价值的文章主要介绍了【Linux】重定向(输入重定向 | 输出重定向)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

摘要

为了有效地让 Linux 程序协同工作,我们需要对命令输入输出进行重定向(Redirection),并将一个命令的输出通过管道(Pipes)连接到另一个程序的输入。本文将介绍如何在 Linux 中使用输入输出重定向。

引言

输入输出文本流(I/O Stream)

表1 bash 使用的三种标准输入输出流
字段 描述 文件描述符
stdin 标准输入流 0
stdout 标准输出流 1
stderr 标准错误输出流 2

命令执行过程(Command Execution)

对于任何一条 Linux 命令执行,都是这样一个过程:用户从键盘或其它输入设备输入,输入通过 stdin 交给命令,命令执行。如果命令执行成功,会把成功结果通过 stdout 输出到输出设备上;如果命令执行出错,会把错误结果通过 stderr 也输出到输出设备上。

用法

输出重定向(Output Redirection)

将某个命令默认指向 stdout 或 stderr 的输出文件转而指向一个文件,即使得命令输出到某个指定文件中,而不是输出到终端屏幕或终端窗口。Linux 中使用 > 和 >> 来重定向标准输出。

  • ls 1>stdout.txt:重定向标准输出到 stdout.txt 文件。若该文件原本不存在,则文件将被创建;否则,文件内容将被强制覆盖。当然,如果不想文件内容被覆盖,可以使用将 > 改为 >>,该命令将标准输出追加到文件末尾。
  • ls 4.txt 2>stderr.txt:重定向标准错误输出到 stderr.txt 文件。其它用法同上。
  • ls 1.txt 4.txt 1>stdout.txt 2>stderr.txt:分别重定向标准输出到 stdout.txt 文件,标准错误输出到 stderr.txt 文件。其它用法同上。
  • ls 1.txt 4.txt &>std.txt:使用 & 重定向标准输出和错误输出到同一个文件。其它用法同上。
$ ls # 重定向前的成功输出(直接在终端窗口显示)
1.txt  2.txt  3.txt
$ ls 4.txt # 重定向前的错误输出(直接在终端窗口显示)
ls: 无法访问 '4.txt': 没有那个文件或目录
$ ls 1>stdout.txt # 重定向标准输出到 stdout.txt
$ cat stdout.txt
1.txt
2.txt
3.txt
stdout.txt
$ ls 1>>stdout.txt
$ cat stdout.txt
1.txt
2.txt
3.txt
stdout.txt
1.txt
2.txt
3.txt
stdout.txt
$ ls 4.txt 2>stderr.txt
$ cat stderr.txt
ls: 无法访问 '4.txt': 没有那个文件或目录
$ ls 1.txt 4.txt 1>stdout.txt 2>stderr.txt
$ cat stdout.txt
1.txt
$ cat stderr.txt
ls: 无法访问 '4.txt': 没有那个文件或目录
$ ls 1.txt 4.txt &>std.txt
$ cat std.txt
ls: 无法访问 '4.txt': 没有那个文件或目录
1.txt

文件输出重定向的应用

  1. 结合 echo 命令创建文本文件
  • echo -e "1 apple\n2 pear\n3 banana":输出信息到终端窗口
  • echo -e "1 apple\n2 pear\n3 banana" > fruit.txt:重定向输出信息到文本文件
$ echo -e "1 apple\n2 pear\n3 banana"
1 apple
2 pear
3 banana
$ echo -e "1 apple\n2 pear\n3 banana" > fruit.txt
$ cat fruit.txt
1 apple
2 pear
3 banana
  1. 忽略命令错误输出
  • ls 1.txt 4.txt 2>stderr.txt:将错误输出重定向到 /dev/null,只查看正确输出。(/dev/null 是一个非常特殊的块设备文件。可以视为系统的黑洞,写入到这个文件中的东西都会被丢弃掉,因此可以用来写入想忽略的错误输出)
$ ls 1.txt 4.txt
ls: 无法访问 '4.txt': 没有那个文件或目录
1.txt
$ ls 1.txt 4.txt 2>>/dev/null
1.txt

输入重定向(Input Redirection)

输入重定向是指让命令从指定文件中获取输入,而非从 stdin(常常指的是键盘输入)中获取输入。Linux 中使用 < 和 << 来重定向标准输入。

文件输入重定向的应用

  1. 结合 tr 命令使用。tr 命令往往用于从标准输入中替换特定字符,并将结果写到标准输出。tar 命令的用法:tr [准备要替换的字符] [要替换成的字符]
  • tr ' ' '\t' <fruit.txt:从 fruit.txt 获取输入,并将字符替换后的结果写到标准输出。
$ cat fruit.txt
1 apple
2 pear
3 banana
$ tr ' ' '\t' <fruit.txt
1       apple
2       pear
3       banana
  1. 结合 sort 命令使用。sort 命令用于对文本文件内容按照规定字段进行排序。sort 命令的用法:sort -k [关键字字段序号] [要排序的文本文件]
  • sort -k2 <fruit.txt:直接将 fruit.txt 文件传递给 sort 进行排序。
  • sort -k2 <<EOF:将界定符 EOF 之前的内容作为一个文件传递给 sort 进行排序。
$ sort -k2 <fruit.txt
1 apple
3 banana
2 pear
$ sort -k2 <<EOF
> 1 apple
> 2 pear
> 3 banana
> EOF
1 apple
3 banana
2 pear

提示

有时候我们可能有这种需求:不仅需要将标准输出显示在终端窗口,同时还要将其保存到本地文件中,这样即使终端窗口关闭后,也能从本地文件中看到标准输出。对于该需求,在 Linux 中,我们可以借助 tee 命令来实现。

帮助文档:

$ tee --help
用法:tee [选项]... [文件]...
将标准输入复制到每个指定文件,并显示到标准输出。

  -a, --append          内容追加到给定的文件而非覆盖
  -i, --ignore-interrupts       忽略中断信号
  -p                        对写入非管道的行为排查错误
      --output-error[=模式]   设置写入出错时的行为。见下面“模式”部分
      --help            显示此帮助信息并退出
      --version         显示版本信息并退出

模式确定向输出写入出错时的行为:
  'warn'         对向任何文件输出出错的情况进行诊断
  'warn-nopipe'  对向除了管道以外的任何文件输出出错的情况进行诊断
  'exit'         一旦输出出错,则退出程序
  'exit-nopipe'  一旦输出出错且非管道,则退出程序
-p 选项的默认模式是“warn-nopipe”。
当 --output-error 没有给出时,默认的操作是在向管道写入出错时立刻退出,
且在向非管道写入出错时对问题进行诊断。

具体示例

  • ls | tee log.txt:直接在终端窗口列出文件,并将其标准输出保存至 log.txt 中。即使终端窗口关闭了,我们也可以使用 cat log.txt 查看之前的输出结果。
$ ls
1.txt  2.txt  3.txt
$ ls | tee log.txt
1.txt
2.txt
3.txt
log.txt
$ cat log.txt
1.txt
2.txt
3.txt
log.txt

此外,如果你是人工智能研究人员,大体上都会使用 Python 编程。当我们运行一个 .py 格式的文件时,搭配 tee 命令使用可以实现在终端窗口显示 print 函数的输出信息,并将这些输出信息保存到本地文件。例如:python train.py | tee train.log

参考

中国大学 MOOC | Linux系统管理 | 主题05 重定向与管道 | 小节 1 重定向文章来源地址https://www.toymoban.com/news/detail-418869.html

到了这里,关于【Linux】重定向(输入重定向 | 输出重定向)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • nohup 输出到指定文件 Linux nohup 实现命令后台运行并输出或记录到指定日志文件 设置日志结果文件名称 重定向到某个文件 标准误 标准错误输出定向 输入报错信息保留

    # yourcommand:启动对象命令。可以跟该命令需要的各种参数。 # 是指在后台运行,但当用户推出(挂起)的时候,命令自动也跟着退出. nohup与结合起来,可以实现不挂断的后台运行。 实现屏幕输出记录到日志文件 # 0 – stdin (standard input),1 – stdout (standard output),2 – stderr (standa

    2024年02月05日
    浏览(63)
  • Shell输入输出重定向

    英文是file descriptor简称fd。 文件描述符是一个非负整数。它是一个索引值,指向进程打开的文件。 Linux程序在执行任何形式的 I/O 操作时,都是在读取或者写入一个文件描述符。 每个文件描述符会与一个打开的文件相对应。 不同的文件描述符也可能指向同一个文件。 在Linu

    2024年02月07日
    浏览(42)
  • 使用重定向输入和输出创建子进程

    本主题中的示例演示了如何使用 CreateProcess 函数从控制台进程创建子进程。 它还演示了一种使用匿名管道重定向子进程的标准输入和输出句柄的技术。 请注意,命名管道还可用于重定向进程 I/O。 CreatePipe 函数使用 SECURITY_ATTRIBUTES 结构创建两个管道的读取和写入端的可继承句

    2024年02月07日
    浏览(36)
  • 文件操作--文件的随机读写、标准输入输出重定向

    目录 一、文件的随机读写 二、便准输入输出重定向         前面的例程执行的都是顺序文件处理(Sequential File Processing)。在顺序文件处理过程中,数据项是一个接着一个进行读取或者写入的。例如,如果想读取文件中的第5个数据项,那么使用顺序存取方法必须先读取前

    2024年02月15日
    浏览(42)
  • printf和scanf的串口重定向,格式化输入输出

    通过重定向C标准库的printf和scanf函数,实现串口的格式化输出; 调用MDK微库(MicroLib)的方法和调用标准库的方法。 我们使用的正点原子STM32F103RB NANO开发板上将USART1(引脚为PA9,PA10)接出 USART1并没有在PCB上连接在一起,需要通过跳线帽来连接一下。这里我们把 P5 的 RXD 和 TXD 用

    2024年02月04日
    浏览(55)
  • 【Linux学习】之将输出重定向到文件或程序

    1. 标准输入、标准输出和标准错误 进程使用称为文件描述符的编号通道来获取输入并发送输出。所有进程在开始时至少要有三个文件描述符: 标准输入(通道0 ) 从键盘读取输入。 标准输出(通道 1) 将正常输出发送到终端。 标准错误(通道 2) 将错误消息发送到终端。 如果程序

    2024年02月02日
    浏览(40)
  • 一文搞懂Linux的标准输出/错误重定向

     今天在写一个脚本时,需要将shell命令和可执行程序的输出重定向在某一个log文件中,但是遇到了点小问题,索性就研究下输出重定向到底怎么回事。  Linux系统,有一个非常重要概念,就是一切皆文件。在使用shell脚本时,系统为了能够进行接收外部输入,同时向外部输出

    2023年04月26日
    浏览(47)
  • Linux- 重定向标准输出(stdout)和标准错误(stderr)

    在Linux或Unix系统中,可以通过重定向标准输出(stdout)和标准错误(stderr)来将脚本的输出保存到一个文件中。以下是一些方法: 只重定向标准输出到文件 : 这将只捕获正常的输出(stdout),但不包括错误消息(stderr)。 同时重定向标准输出和标准错误到同一个文件 : 这

    2024年02月11日
    浏览(34)
  • linux console输出重定向到串口ttyS0

    在linux系统中使用virsh创建和管理虚拟机时,除了使用ssh 连接虚拟机,还可以使用 virsh console 虚机名 的方式连接虚拟机,不过需要在虚机镜像中开启将console重定向到串口的设置。 修改 /etc/default/grub文件: 1、将GRUB_CMDLINE_LINUX=\\\"\\\" 改为 GRUB_CMDLINE_LINUX=“console=tty0 console=ttyS0,11520

    2024年02月10日
    浏览(35)
  • Selenium定向爬取PubMed生物医学摘要信息

    目录 一、前言 1、PubMed是什么? 2、PubMed特点 二、实现代码 三、分析HTML

    2024年02月08日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包