标准输入及输出

linux提供三种I/O设备

标准输入stdin -0 默认接受来自终端的输入

标准输出stdout -1 默认输出到终端窗口

标准错误stderr -2 默认输出到终端窗口

I/O重定向redirect

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

标准输出和错误重定向

stdout和stderr可以被重定向到指定文件,而非默认的当前终端; 格式 :命令   操作符 文件名

1>   或   > 把stdout重定向到文件

2>            把stderr重定向到文件

&>           把所有输出重定向到文件        

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

set -c 禁止将内容覆盖已有文件,但可最佳,利用 >| 仍可强制覆盖

set +c 允许覆盖,默认设置

使用  >>可以在原有的内容上追加内容(>>            2>>     &>>)

10、标准I/O输入输出重定向及管道_标准输入

标准输出和错误输出到不同的位置

10、标准I/O输入输出重定向及管道_标准输出_02

10、标准I/O输入输出重定向及管道_标准输入_03

合并标准输出和错误输错为同一个数据流进行重定向(可以使用&>>    '1>file   2>&1')

10、标准I/O输入输出重定向及管道_标准输入_04

10、标准I/O输入输出重定向及管道_标准输入_05

10、标准I/O输入输出重定向及管道_重定向_06

合并多个程序输出  (cmd1;cmd2)或者{ cmd1;cmd2;...;}合并多个程序的stdout {}命令末尾需要有分号且cmd1前面需要有一个空格

10、标准I/O输入输出重定向及管道_Linux_07

10、标准I/O输入输出重定向及管道_标准输出_08

10、标准I/O输入输出重定向及管道_Linux_09

10、标准I/O输入输出重定向及管道_重定向_10

10、标准I/O输入输出重定向及管道_标准输出_11

清除大​文件命令(上一文已讲解)

cat /dev/null >/data/file.log

分别重定向

10、标准I/O输入输出重定向及管道_Linux_12

将输出文件进行丢弃 (\dev\null   空设备文件)

10、标准I/O输入输出重定向及管道_重定向_13

标准输入重定向

从文件中导入stdin,代替当前终端的输入设备,使用<来重定向标准输入,某些命令能够接受从文件中导入的stdin

10、标准I/O输入输出重定向及管道_标准输出_14

tr命令 (转换字符和删除字符)

tr [option] .. set1  [set2]

选项

-d  --delete:删除所有属于第一字符集的字符

10、标准I/O输入输出重定向及管道_重定向_15

-s  --squeeze-repeats:把连续重复的字符已单独一个字符表示,即去重(注:需连续,不连续不会)

10、标准I/O输入输出重定向及管道_标准输入_16

-t --truncate-setl:将第一个字符集对应字符转化为第二字符集对应的字符

10、标准I/O输入输出重定向及管道_重定向_17

-c -C --complent:取字符集的补集

10、标准I/O输入输出重定向及管道_Linux_18

10、标准I/O输入输出重定向及管道_标准输出_19

10、标准I/O输入输出重定向及管道_标准输出_20

10、标准I/O输入输出重定向及管道_Linux_21

标准输入重定向

可以利用<进行重定向

单行重定向  ctrl+d可以终止输入

10、标准I/O输入输出重定向及管道_重定向_22

10、标准I/O输入输出重定向及管道_Linux_2310、标准I/O输入输出重定向及管道_标准输入_24

10、标准I/O输入输出重定向及管道_重定向_25

多行重定向

使用 "<<终止词”命令从键盘把多行导向给stdin,知道终止词位置之前的所有文本都发送给stdin;终止词可以是一个或多个符合如 !,@,$,EOF  等其中EOF比较常用

10、标准I/O输入输出重定向及管道_标准输入_26

10、标准I/O输入输出重定向及管道_标准输出_27

10、标准I/O输入输出重定向及管道_标准输出_28

管道

管道(使用 | 表示,)可以用来连接多个命令

格式  命令1 | 命令2 | 命令3

功能说明:

将命令1的stdout发送给命令2的stdin,命令2的stdout发送到命令3的stdin

所有命令会在当前shell进程的子shell进程中执行

组合多种工具的功能

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

10、标准I/O输入输出重定向及管道_重定向_29

管道中的-符号

tar -cvf - /home | tar -xvf -

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

10、标准I/O输入输出重定向及管道_标准输入_30

tee命令

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

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

-a 追加 功能:保存不同阶段的输出  复杂管道的故障排除  同时查看和记录输出

10、标准I/O输入输出重定向及管道_标准输出_31