Linux标准I/O和管道

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/Real_cTo/article/details/97611838

标准输入和输出

程序=指令+数据
Linux给程序提供三种 I/O 设备

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

I/O重定向:改变默认位置
重定向操作符:

> 把标准输出重定向到文件 ls -lh > /data/ls.log ,重定向到已存在文件,原文件内容会被覆盖
2> 把标准错误重定向到文件 ls xxx 2> /data/err.log 把错误输出保存到data下的err.log文件中,文件已存在则会覆盖原有文件内容
2>>追加重定向错误输出数据流
&> 把所有输出重定向到文件 (cat /etc/issue;ls xxx) &> /data/sum.log
>> 原有内容基础上,追加文件内容 ls -li >> /data/ls.log 追加ls.log的内容
< 标准输入 cat < /etc/shadow 将shadow文件输出
<<终止符 多行输入重定向,以终止符结束 cat<<EOF >Test ,输入字符,以EOF结束,并保存在新生成的Test文件中

标准输出和错误输出各自定向至不同位置 :
ls -li /etc/issue /data/xxx >/data/f1.log 2>/data/f2.logh 或
ls -li /etc/issue /data/xxx >/data/f3.log 2>&1

tr 转换和删除字符

-d --delete:删除所有属于第一字符集的字符 tr -d abc //删除字符中出现的a、b、c字符
-s --squeeze-repeats:把连续重复的字符以单独一个字符表示
-t --truncate-set1:将第一个字符集对应字符转化为第二字符集对应的字符
使用 < 来重定向标准输入
某些命令能够接受从文件中导入的标准输出
tr ‘a-z’ ‘A-Z’< /etc/issue
该命令会把/etc/issue中的小写字符都转换成大写字符
tr -d abc < /etc/fstab 删除fstab文件中的所有abc中任意字符
tr ’ ’ ‘+’ <num.txt>num.bak #把num.txt文件里的空格替换成+,重新生成num.bak

管道

管道(使用符号“|”表示)用来连接命令
命令1 | 命令2 | 命令3 | …将命令1的输出发送给命令2的输入,命令2的输出发送到命令3的输入
STDERR默认不能通过管道转发,可利用2>&1 或 |& 实现
who | tr ‘a-z’ ‘A-Z’ > /who.log 把who输出命令中所有小写字母替换成大写字母并保存在新生成的who.log 文件中
echo {1…100} | tr ’ ’ + | bc 计算1到100之和

tee 定向到多个目标

命令1 | tee [-a ] 文件名 | 命令2 把命令1的输出保存在文件中,做为命令2的输入
ls | tee -a ls.log ls命令输出的同时,输出结果保存到ls.log 文件中
功能:

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

猜你喜欢

转载自blog.csdn.net/Real_cTo/article/details/97611838