精选文章 第五章-重定向和管道

第五章-重定向和管道

作者:muzikou2007 时间: 2016-08-01 04:12:27
muzikou2007 2016-08-01 04:12:27

标准输入和输出

程序:指令+ 数据

读入数据:Input

输出数据:Output


打开的文件都有一个fdfile descriptor ( 文件描述符)


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

标准输入(STDIN        0 默认接受来自键盘的输入

标准输出(STDOUT       1 默认输出到终端窗口

标准错误(STDERR       2 默认输出到终端窗口


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


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

STDOUT STDERR 可以被重定向到文件:

命令操作符号 文件名

支持的操作符号包括:

STDOUT重定向到文件

2> STDERR重定向到文件

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


文件内容会被覆盖

#set –C:禁止将内容覆盖已有文件,但可追加

强制覆盖:>|

#set +C:允许覆盖


>> 原有内容基础上,追加内容

2> 覆盖重定向错误输出数据流;

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

find /etc -namepasswd 2> /dev/null

 

() :合并多个程序的STDOUT

(cal 2007 ; cal 2008 ) > all.txt


追加信息到文件中

echo “hello world” >> fa.txt    >> 是追加信息到fa.txt

 

标准输入重定向

cat < xxx                     xxx文件标准输入到cat

cat < xxx > yyy           xxx文件标准输入到cat,在标准输出到yyy

 

合并文件

cat xxx aaa > bbb     xxx文件和aaa文件合并到bbb

 

cat既有标准输入,又有标准输出

cat是单行处理的,必须使用ctrl+c终止程序


设置结束符,多行重定向

cat << eof

[root@localhost testdir]# cat << eof

> abc

> 123

> eof

abc

123

 

设置不可覆盖文件,可以追加

[root@localhost testdir]# set -C

[root@localhost testdir]# echo 'helloworld' > fa.txt

-bash: fa.txt: cannot overwrite existingfile

[root@localhost testdir]#

[root@localhost testdir]# echo 'helloworld' >> fa.txt

[root@localhost testdir]#

[root@localhost testdir]# cat fa.txt

bash: aaa: command not found...

hello world

 

set–C情况下也可以强制覆盖,使用 >|

[root@localhost testdir]# echo 'welcomehehe' >| fa.txt

[root@localhost testdir]#

[root@localhost testdir]# cat fa.txt

welcome hehe

 

set +C允许覆盖

针对当前shell,执行脚本前先关闭,执行后在开启。


tr 命令

tr –  转换和删除字符

tr [OPTION]...SET1 [SET2]

    选项:

-c   --complerment :取字符集的补集

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

-s   --squeeze-repeats :把连续重复的字符以单独一个字符表示

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


删除补集,删除abc的补集,其实就是只保留abc

[root@localhost testdir]# echo 'abc123' |tr -cd 'abc'

abc


从文件中导入STDIN

使用< 来重定向标准输入

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

[root@localhost ~]# tr 'a-z' 'A-Z'

\S

KERNEL \R ON AN \M

HELLO \N \T \L

该命令会把/etc/issue 中的小写字符都转换成写写字符

 

tr –d abc < /etc/fstab  删除fstab文件中的所有abc中任意字符

 

[root@localhost ~]# cat > filea

mage

wangxiaochun

 

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

[root@localhost~]# cat > filea < fileb


把多行发送给STDIN

使用“<< 终止词”命令从键盘把多行重导向给STDIN

直到终止词 位置的所有文本都发送给STDIN

有时被称为就地文本(heretext

[root@localhost ~]# mail -s "PleaseCall" admin@magedu.com <<><>

> Hi Wang,

> Please give me a call when you get in.We may need

> to do some maintenance on server1.

> Details when you're on-site,

> Zhang

>END


管道

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

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

将命令1STDOUT发送给命令2STDIN,命令2STDOUT发送到命令3STDIN

STDERR 默认不能通过管道转发,可利用2>&1 |& 实现

最后一个命令会在当前shell 进程的子shell 进程中执行用来组合多种工具的功能

    ls| tr 'a-z' 'A-Z


[root@localhost testdir]# echo $USER | tr'a-z' 'A-Z'

ROOT

 

把错误的信息通过标准输出的方式传给管道

[root@localhost testdir]# ls /err |& tr'a-z' 'A-Z'

LS: CANNOT ACCESS /ERR: NO SUCH FILE ORDIRECTORY

 

[root@localhost testdir]# aaa 2>&1 |tr 'a-z' 'A-Z'

BASH: AAA: COMMAND NOT FOUND...


tee命令

重定向到多个目标

$ 命令1 | tee 文件名命令2

把命令1 STDOUT 保存在文件名中,然后管道输入给命令2

使用:

  保存不同阶段的输出

  复杂管道的故障排除

           同时查看和记录输出


勿删,copyright占位
分享文章到微博
分享文章到朋友圈

上一篇:重定向、管道和用户管理练习题

下一篇:上传文件api测试

您可能感兴趣

  • 论文|从DSSM语义匹配到Google的双塔深度模型召回和广告场景中的双塔模型思考...

    点击标题下「搜索与推荐Wiki」可快速关注 ▼ 相关推荐 ▼ 1、基于DNN的推荐算法介绍 2、传统机器学习和前沿深度学习推荐模型演化关系 3、论文|AGREE-基于注意力机制的群组推荐(附代码) 4、论文|被“玩烂”了的协同过滤加上神经网络怎么搞? 本文包含(文章较长,建议先收藏再阅读,点击文末的阅读原文,查看更多推荐相关文章): DSSM DSSM的变种 MV-DNN Google Tw...

  • 适合新手练习的Python项目有哪些?

    适合新手练习的Python项目有哪些?简单易上手的Python项目汇总:Web 项目设计:内容聚合器、正则表达式查询工具、网址缩短、便利贴、功能、测验、GUI 项目设计:MP3 播放器、闹铃提醒工具、文件管理器、记账功能、命令行项目设计:通讯录、网站连接检查、批量文件重命名工具、目录树生成器。   一、Web 项目设计:内容聚合器(Content Aggregator)   该项目设计的主要...

  • 2020起重机司机(限桥式起重机)模拟考试及起重机司机(限桥式起重机)证考试

    题库来源:安全生产模拟考试一点通公众号小程序 2020起重机司机(限桥式起重机)模拟考试及起重机司机(限桥式起重机)证考试,包含起重机司机(限桥式起重机)模拟考试答案解析及起重机司机(限桥式起重机)证考试练习。由安全生产模拟考试一点通公众号结合国家起重机司机(限桥式起重机)考试最新大纲及起重机司机(限桥式起重机)考试真题出具,有助于起重机司机(限桥式起重机)模拟考试系统考前练习。 1、【判断...

  • 华为、苹果、三星的手机终结之战

    过去10年中,智能手机的快速普及,改变了全世界大多数人的生活和工作方式,而在这场变革背后,苹果、三星、华为这些科技巨头的积极推动作用不容忽视。 其中三星起到的作用尤其不容小觑,2011年之后,全球智能手机市场中三星份额整体超过苹果,以每年2、3亿部出货量,在全球数十亿用户群体中不断扩散影响力。单从智能手机出货量这个方面考虑,过去9年,三星是全球市场中无可争议的霸主。 数据来自IDC 自201...

  • 对云桌面、桌面云、私有云的一些看法

    最近整理了一下自2017年以来自己对私有云服务平台构建的一些认识,并以刚刚为某后勤保障部队单位提供的小规模私有云服务平台为例阐述。 私有云平台、云计算服务与虚拟化: 我个人认为这三个名称分别指涉了三个不同的事物: 私有云平台:在实践中,私有云平台时包含了服务端软硬件集成和客户端软硬件集成的一整套特定业务需求场景的、已经处于落地实施阶段的解决方案项目。 比如某后勤保障部队为简化征兵流程、节省相...

  • 你知道认知智能是什么吗? 全新的时代已经到来!

    道翰天琼认知智能简介 认知智能是计算机科学的一个分支科学,是智能科学发展的高级阶段,它以人类认知体系为基础,以模仿人类核心能力为目标,以信息的理解、存储、应用为研究方向,以感知信息的深度理解和自然语言信息的深度理解为突破口,以跨学科理论体系为指导,从而形成的新一代理论、技术及应用系统的技术科学。 认知智能的核心原理范畴包括:1.宇宙、信息、大脑三者关系;2.人类大脑结构、功能、机制;3.哲学...

  • 武田宣布2020财年第一季度业绩;确认管理层指引,并提高全年列报运营利润和列报净利润

    日本大阪--(美国商业资讯)--武田药品工业株式会社(Takeda Pharmaceutical Company Limited, TOKYO:4502/NYSE:TAK)(简称“武田”)今天宣布了2020财年第一季度(截至2020年6月30日)的财务业绩。基于第一季度的业绩,该公司确认了管理层指引,并提高了全年的列报运营利润和列报净利润。该公司还宣布了其研发产品线的最新消息,强调了其研发动...

  • 认知智能来了!为您全方位解密认知智能核心体系!道翰天琼认知智能。

    认知智能整体术体系简介 认知智能是计算机科学的一个分支科学,是智能科学发展的高级阶段,它以人类认知体系为基础,以模仿人类核心能力为目标,以信息的理解、存储、应用为研究方向,以感知信息的深度理解和自然语言信息的深度理解为突破口,以跨学科理论体系为指导,从而形成的新一代理论、技术及应用系统的技术科学。 认知智能实现落地四步走:1.认知宇宙世界。支撑理论体系有三体(宇宙、信息、大脑)论、易道论、存...

华为云40多款云服务产品0元试用活动

免费套餐,马上领取!
51CTO

51CTO

51CTO是一家综合的IT技术用户服务平台,立足满足用户多维度需求,为技术用户成长赋能。2005年成立至今,拥有专业主流技术媒体51CTO企业信息化媒体CIOAge中国最大的IT在线教育平台51CTO学院。