标准IO重定向和管道

标准I/O重定向和管道

1 标准输入和输出

程序:指令+数据

读入数据:Input

输出数据:Output

打开的文件都有一个fd:file descriptor(文件描述符)

Linux给程序提供三种I/O设备

  • 标准输入(STDIN) -0 默认接受来自终端窗口的输入
  • 标准输出(STDOUT) -1 默认输出到终端窗口
  • 标准错误(STDERR) -2 默认输出到终端窗口

    范例:文件描述符

2 I/O重定向redirect

I/O重定向:将默认的输入,输出或错误对应的设备改变,指向新的目标

2.1 标准输出和错误重新定向

STDOUT和STDERR可以被重定向到指定文件,而非默认的当前终端

格式:

命令 操作符号 文件名

支持的操作符号包括:

1> 或>        把STDOUT重定向到文件
2>            把STDERR重定向到问及爱你
&>            把所有输出重定向到文件

以上如果文件已存在,文件内容会被覆盖

set -C    禁止将内容覆盖已有文件,但可追加,利用>|仍可强制覆盖
set +C    允许覆盖,默认

追加

“>>” 可以在原有内容基础上,追加内容

把输出和错误重新定向追加到文件

>>    追加标准输出重定向至文件
2>>   追加标准错误重定向至文件

标准输出和错误输出各自定向至不同位置

COMMAND > /path/to/file.out 2> /path/to/error.out

合并标准输出和错误输出为同一个数据流进行重定向

&> 覆盖重定向

&>> 追加重定向

COMMAND > /path/to/file.out 2>&1 (顺序很重要)

COMMAND >> /path/to/file.out 2>&1

合并多个程序

(CMD1;CMD2......)或者{CMD1;CMD2;......;}合并多个程序的STDOUT

2.2 标准输入重定向

从文件导入STDIN,代替当前终端的输入设备,使用<来重定向标准输入

某些命令能够接受从文件中导入的STDIN

2.2.1 tr命令

tr 转换和删除字符

tr [OPTION]... SET1 [SET2]

选项:

-d  --delete:删除所有属于第一字符集的字符
-s  --squeeze-repeats:把连续重复的字符以单独一个字符表示,即去重
-t  --truncate-set1:将第一个字符集对应字符转化为第二字符集对应的字符
-c  -C --complement:取字符集的补集

    \NNN           character with octal value NNN(1 to 3 octal digits)
    \\             backslash
    \a             audible BEL
    \b             backspace
    \f             form feed
    \n             new line
    \r             return
    \t             horizontal tab
    \v             vertical tab

[:alnum:]:字母和数字
[:alpha:]: 字母
[:digit:]: 数字
[:lower:]: 小写字母
[:upper:]:大写字母
[:space:]:空白字符
[:print:]: 可打印字符
[:punct:]:标点符号
[:graph:]:图形字符
[:cntrl:]:控制(非打印)字符
[:xdigit:]:十六进制字符

标准输入重定向

利用”<“可以将标准输入重定向

比如:

cat   >  file
mage
wangxiaochun

按ctrl+d离开,可以使用文件来代替键盘的输入

cat <file1 >  file2
cat <file1 >> file1

2.2.3把多行重定向

使用”<<终止词“命令从键盘把多行重导向给STDIN,直到终止词位置之前的所有文本都发送给STDIN,有时被称为就地文本(here documents)

其中终止词可以是任何一个或多个符号,比如:!,@,$,EOF(End Of File),magedu等,其中EOF比较常用

3 管道

3.1 管道

管道(使用符号”|“表示)用来连接多个命令

格式

命令1 | 命令2 | 命令3 | ...

功能说明:

  • 将命令1的STDOUT发送给命令2的STDIN,命令2的STDOUT发送到命令3的STDIN
  • 所有命令会在当前shell进程的子shell进程中执行
  • 组合多种工具的功能

    注意:STDERR默认不能通过管道转发,可利用2>&1或|&实现,格式如下:

命令1  2>&1   | 命令2
命令1   |&    命令2

3.2 管道中-符号

管道中有时会使用-符号

示例:

将/home里面的文件打包,但打包的数据不是记录到文件,而是传送到stdout,经过管道后,将tar-cvf-/home传送给后面的tar-xvf-,后面的这个-则是取前一个命令的stdout,因此,就不需要使用临时file了

tar -cvf - /home | tar -xvf -

3.2 tee命令

利用tee命令可以重定向到多个目标

格式:

命令1 | tee [-a] 文件名 | 命令2

以上可以把命令1的STDOUT保存在文件中,作为命令2的输入

选项:

-a 追加

功能:

  • 保存不同阶段的输出
  • 复杂管道的故障排除
  • 同时查看和记录输出

原文地址:https://www.cnblogs.com/dadadezhang/p/12596412.html

时间: 2024-10-08 12:07:51

标准IO重定向和管道的相关文章

bash的基本特性之文件名通配 及IO重定向,管道详解

本篇博文依然涉及到bash的基本特性 文件名通配,并讲解IO重定向以及管道的使用 管道配合tr命令的应用 bash的基础特性之一:文件名通配 globbing:文件名通配(整体文件名匹配,而非部分) 匹配模式:元字符 *:匹配任意长度的任意字符 pa*,*pa*,*pa,*p*a* ?:匹配任意单个字符 pa?,??pa,p?a,p?a? []:匹配指定范围内的任意单个字符 有几种特殊字符: [a-z],[A-Z],[0-9],[a-z0-9] [[:upper:]]:所有大写字母 [[:low

Linux中IO重定向和管道

IO重定向和管道 根据冯诺依曼原理的知识,计算机运行有数据流的输入和输出,称之为IO. Linux中一切皆文件思想,表现为具体的文件. 在linux中打开的文件都有一个fd(File Descriptor):文件描述符 程序:指令+数据 读入数据:Input 输出数据:Output Linux给程序提供三种I/O设备: 1. 标准输入(STDIN): -0 默认为接受键盘输入2. 标准输出(STDOUT):-1 默认为输出到终端窗口3. 标准错误(STDERR):-2 默认为输出到终端窗口注:标

Linux基础入门--IO重定向及管道

IO重定向及管道 一直都提到,程序:指令+数据 其实程序也有IO,数据的来源有多个地方:文件.外部 可用于输入的设备:文件(linux一切皆文件) 键盘设备.文件系统上的常规文件加载内容.网卡等: 可用于输出的设备:文件(linux一切皆文件) 显示器.文件系统上的常规文件输出保存.网卡等: 程序的数据流有三种: 输入的数据流:<-- 标准输入(stdin),是键盘: 输出的数据流:--> 标准输出(stdout),显示器: 错误输出流:  --> 错误输出(stderr),显示器: f

Linux上的IO重定向及管道-&&gt; &&gt;&gt; 2&gt; 2&gt;&gt; 2&gt;&1 2&gt;&gt;&1 | tee tr

IO重定向: 输出重定向:> 特性:覆盖输出 输出重定向:>> 特性:追加输出 # set -C 禁止覆盖输出重定向至已存在的文件: 此时可使用强制覆盖输出:>| # set +C 关闭上述特性 错误输出流重定向:2>, 2>>  只会将错误的信息输出到指定的地方 合并正常输出流和错误输出流: (1) &>, &>> (2) COMMAND > /path/to/somefile 2>&1 COMMAND &g

Linux基础之IO重定向及管道详解(涉及tr、tee命令)

我在刚开始接触IO重定向时,经历了由懂到不懂然后了然的过程,当然现在的我也不可能说对于IO重定向就彻底懂了,只是在解决一些问题或实现某些结果时不会因为IO重定向的问题而迷惑了.     什么叫IO重定向? 为了解释这个问题,我们要先明白什么叫IO,什么叫做程序的数据流. 什么叫IO? 在Linux或计算机领域IO指的是信息的输入和输出. 在Linux中可用于输入的设备:文件(Linux中一切皆文件) 具体包括:键盘设备.文件系统上的常规文件.网卡等. 在Linux中用于输出的设备:文件 具体包括

linux下的IO重定向与管道相关的知识简析

一.bash重定向部分简单翻译 1.1.bash手册关于重定向短短的注解(因为过于经典,所以摘录出来) 我的翻译要开始毁经典啦... 参考:https://blog.csdn.net/spch2008/article/details/51433353/ https://www.cnblogs.com/lqminn/archive/2013/05/30/3108283.htmlhttps://bash.cyberciti.biz/guide/Here_stringshttps://bbs.csdn

IO重定向及管道

程序:指令+数据 程序:IO 可用于输入的设备:文件 键盘设备.文件系统上的常规文件.网卡等: 可用于输出的设备:文件 显示器.文件系统上的常规文件.网卡等: 程序的数据流有三种: 输入的数据流:<-- 标准输入(stdin),键盘: 输出的数据流:--> 标准输出(stdout),显示器: 错误输出流:  --> 错误输出(stderr),显示器: fd: file descriptor,文件描述符 标准输入:0 标准输出:1 错误输出:2 IO重定向: 输出重定向:> 特性:覆

IO重定向及管道操作

运算器.控制器: CPU 存储器:RAM 输入/输出设备 程序:指令和数据 控制器:指令 运算器 存储器: 地址总线:内存寻址 数据总线:传输数据 控制总线:控制指令 寄存器:CPU内部的一个暂时存储器 I/O INPUT设备 OUTPUT设备 如果程序没有指定设备,就从默认输入设备获取,输出时则输出到默认输出设备 系统设定: 默认输出设备:标准输出:STDOUT ,1 默认输入设备:标准输入:STDIN , 0 标准错误输出:STDERR , 2 标准输入:键盘 标准输出和错误输出:显示器 I

linux基础篇-11,IO重定向和管道

################################################ >:覆盖输出 >追加输出 set -c :禁止覆盖 set +c:关闭禁用覆盖 ################################################ 2>:重定向错误覆盖 2>:重定向错误追加输出 ################################################ &>:错误正确都重定向到一个文件 [[email