Linux中IO重定向和管道

IO重定向和管道
根据冯诺依曼原理的知识,计算机运行有数据流的输入和输出,称之为IO.
Linux中一切皆文件思想,表现为具体的文件。
在linux中打开的文件都有一个fd(File Descriptor):文件描述符
程序:指令+数据
读入数据:Input
输出数据:Output

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

1、 标准输入(STDIN): -0 默认为接受键盘输入
2、 标准输出(STDOUT):-1 默认为输出到终端窗口
3、 标准错误(STDERR):-2 默认为输出到终端窗口
注:标准错误是解释器辅助输出,并不是命令本身输出。
I/O重定向:改变默认数据流向

重定向

STDOUT和STDERR可以被重定向至文件
格式:命令 操作符号 文件名
原有内容被覆盖:
1.>或1>:将标准输出重定向至文件,文件原内容被覆盖,1>前面的1可以省略。
2.2>: 把标准错误重定向至文件
原有内容保留,其后追加:
1.1>>或1>>:把STDOUT重定向至文件,在文件原有内容后追加
2.2>>: 把标准错误重定向至文件,在文件原有内容后追加

合并STDOUT和STDERR重定向至同一文件:
&>:把STDERR和STDOUT一起重定向至文件,文件原有内容会被覆盖
&>>:把STDERR和STDOUT一起重定向至文件,在文件原有内容后追加
COMMAND > FILE.OUT 2&>1:将STDOUT覆盖重定向至FILE.OUT,并将STDERR转化为STDOUT,结果为STDOUT和STDERR一同被覆盖重定向至FILE.OUT;
COMMAND >> FILE.OUT 2&>1:将STDOUT追加重定向至FILE.OUT,并将STDERR转化为STDERR,结果为STDOUT和STDERR一同被追加重定向至FILE.OUT
set -C: 禁止覆盖重定向
set +C:解除禁止覆盖重定向

|:强制覆盖重定向
标准输出和错误输出分别重定向到不同文件中:
COMMAND > /PATH/TO/FILE.OUT 2> /PATH/TO/FILE.ERROR
合并输出流重定向,是2&>1还是1&>2,顺序很重要;
多个命令合并输出,需要加括号(CMD1;CMD2...)>file

特殊设备:/dev/null
eg:head -1 /etc/passwd &> /dev/null 加上命令echo $?判定是否成功执行。

重定向标准输入:
COMMAND < FILE.IN
cat < file1 > file2
将file1中的内容覆盖重定向至file2
cat < file1 >> file1
将file1的内容追加重定向至file1,如果不停止该命令会一直循环执行下去。(快速生成大文件)
多行输入重定向:

Here Document:<<EOF(此处EOF称为终止符End Of File即告诉程序内容输入完毕。)
LINE1
LINE2
...
EOF

tr命令:

功能:转换或删除字符的处理工具
格式:tr [OPTION]..SET1 [SET2]
把输入的数据当中的字符,凡是在SET1定义范围内出现的,通过对位转换为SET2出现的字符
选项:
-c -C --completment:取字符集的补集
-d --delete:删除所有属于SET1字符集中的字符
-s --squeeze-repeats:把所有连续重复的字符以单独一个字符表示
-t --trucate-set1:将SET1中的字符集对应转换为SET2中的字符集
用法1:
tr SET1 SET2 < /PATH/FROM/SOMEFILE
用法2:
tr -d SET1 < /PATH/FROM/SOMEFILE
注意:不修改原文件
a、替换字符:tr a-z A-Z </etc/issue
b、删除字符:tr -d ‘abc‘ < /etc/issue

特殊字符集:
[:alnum:]:字母和数字
[:alpha:]: 大写和小写字母
[:upper:]:大写字母
[:lower:]: 小写字母
[:digit:]: 数字
[:punct:]:标点符号
[:graph:]: 图形字符
[:print:]:可打印字符
[:space:]:空白字符
[:cntrl:]: 控制(非打印)字符
[:xdigit:]:十六进制字符
写法:
tr ‘a-z‘ ‘A-Z‘
将需处理文本中的小写字母转换为大写字母
tr 执行时,
如果字符个数SET1>SET2,则转换时SET2中最后一位字符作为SET1中最后几位无法一一对应字符的转换字符;

如果字符个数SET1<=SET2,则转换时一一对应OK

管道

概念:使用管道命令可以将多个命令连接到一起,将 | 前面的命令的执行结果输出到 | 后面的命令,作为它的输入,可以实现多种工具组合以完成复杂任务
格式:COMMAND1 | COMMAND2 | COMMAND3 | ...
功能:将命令1的标准输出作为命令2的标准输入,命令2的标准输出作为命令3的标准输入
STDERR默认不能通过管道转发,但可以通过&>或2>&1实现
管道中最后一个命令会在当前shell进程的子shell进程中执行
pstree -p 查看
举例: ls | tr ‘a-z‘ ‘A-Z‘
此命令将ls的输出结果发送给tr命令,从而实现将显示出的当前目录下的文件名由小写转为大写的功能
典型用法:echo "pwssword1" | passwd --stdin user1

重定向到多个目标

格式: COMMAND1 | tee [-a] FILE | COMMAND2
功能:将命令1的STDOUT输出到FILE中,并作为COMMAND2的输入
作用:
可同时查看和记录输出
保存不同阶段的输出
复杂管道的故障排除
多次管道输出,体现linux思想,组合小程序实现复杂功能
df -h|grep "\<[0-9].*" df.txt | tr -s " " ":"|cut -d: -f5|sort -un|tail -1
附加:某面试题:
以下四个哪个结果不一样
1 cmd &> file
2 cmd > file 2>&1

3 cmd 2>&1 > file xxx

4 cmd 2>file 1>&2

原文地址:https://blog.51cto.com/yesppg/2364762

时间: 2024-10-08 08:42:22

Linux中IO重定向和管道的相关文章

linux中的重定向和管道的使用方法

一个程序运行就必须要有指令和数据或者说数据结构和算法.程序处理的数据来源和处理后存放在哪,是程序员必须要考虑额问题.每个程序都有读入数据和输出数据的需求,但是为了便捷,程序允许缺省输入和输出,也就是使用默认的输入输出.一般称之为标准输入和标准输出. 对于用户来说,访问文件是通过文件名来进行的,但对于内核来说则是一个非零整数,这个数字叫做文件描述符(file descriptor,fd),打开已存在的文件或新建一个文件时,内核会返回一个文件描述符,读写文件也需要使用文件描述符来指定带读写的文件.

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基础概念-----Linux I/O重定向 ,管道

标准输入:键盘 标准输出:显示器 错误输出:显示器 FD:文件描述符:让程序可以文件交互,并且便于内核识别文件,打开的每一个文件都有一个描述符 程序在和文件交互式,通过文件描述符来进行交互,而非文件名,文件名是方便用户分别文件. Linux一切皆文件,所以标准输入,标准输出都有各自的文件描述符 标准输入描述符:0 标准输出描述符:1 标准错误输出描述符:2 将其默认数据流改为其他设备:IO重定向 输出重定向 > 覆盖重定向 >> 追加重定向 /dev/null  黑洞 只针对当前Shel

[Linux 005]——IO重定向

通常在 Shell 中执行命令的时候,我们会在输入命令的下方看到执行结果,操作系统默认将命令的执行结果输出到显示器上.当然,我们也可以手动的指定输出路径,或者输入路径,这就是 I/O 重定向. 1.标准输出重定向 使用 cat 命令,命令的执行结果将会打印在屏幕中. 我们使用 > 来进行输出重定向,此时屏幕上不再打印命令执行结果了,而是将执行结果保存到了 ./target.xxx 文件中. 来看一下 ./target.xxx 文件中的内容: 2.标准输入重定向 tr 命令可以从键盘上读取标准输入

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重定向及管道详解(涉及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

linux的输入输出重定向和管道

1. 在了解重定向之前,我们先来看看linux 的文件描述符. linux文件描述符:可以理解为linux为了跟踪打开文件,而分配的一个数字,(人是根据文件名追踪文件,系统则是根据文件描述符),这个数字有点类似c语言操作文件时候的指针,通过指针就可以实现文件的读写操作. 用户可以自定义文件描述符范围是:3-num,这个最大数字,跟用户的:ulimit –n 定义数字有关系,不能超过最大值. linux启动后,会默认打开3个文件描述符,分别是:标准输入standard input 0,正确输出st