Linux之标准IO、重定向与管道符

Linux之标准IO、重定向与管道符


标准IO

在Unix中,每个基于文本的程序都应该能够从任何源接受输入,并向任何目标写入输出。这个概念/思想称之为标准IO

这意味着我们的程序既可以从键盘读取输入,也可以从文件读取输入。同时,也既可以向屏幕写入输出,也可以文件写入输出。

为此,Unix中设计了一种读取数据的通用方法:标准输入。还设计了两种写入数据的通用方法:标准输出标准错误


输出重定向

登陆时,shell会将标准输入设置为键盘,标准输出和标准错误设置为屏幕,从而与用户交互。

如果你需要将标准输出写入到文件中,则可以使用>,例如

date > temp

此时date的输出会写入到temp中。如果temp不存在,则会创建,如果已存在,则会覆盖。

如果你不想覆盖已有文件,而是写入到文件内容末尾,则使用>>,例如

date >> temp

如果文件不存在依旧会创建文件

如果要防止输入错误导致覆盖文件,可以开启noclobber选项,开启后,使用>将会提示无法覆盖,使用>|可以忽略noclobber,开启命令如下

set -o noclobber

重定向标准错误输出需要使用2>,2表示标准错误,1表示标准输出,但1通常省略,2不可省略。

若需要将标准输出和标准错误都重定向到同一个文件,则可以使用&>

如果你希望抛弃输出,则可以将输出重定向到/dev/null(位桶)


输入重定向

使用<可以使命令从文件中读取输入,例如排序命令sort

sort < sort_input

如果你希望同时重定向输入输出,则命令如下

sort < sort_input > sort_output

管道符

管道符|可以将上一个程序的标准输出作为下一个程序的标准输入。例如,用分页查看最后登录信息可以使用如下命令

last | less

如果希望将标准输出和错误输出都传给下一个程序,则命令如下

ls -l file1 file2 2>&1 | less

其中,2>&1表示将标准错误输出到和标准输出同一个地方,而标准输出已经作为了less的标准输入,所以标准错误也会作为less标准输入。


分流tee

命令tee会将标准输入直接作为标准输出,同时可以指定文件,将输入保存为文件,语法为

tee [-a] [file…]

例如,将打印登陆信息的同时,将登陆信息保存到temp中,可以使用如下命令

last | tee temp

若还想使用分页查看登陆信息,则可以将输出传给less

last | tee temp | less

使用tee如果文件不存在,会创建文件,否则,会覆盖文件。加上选项-a则可以添加到文件末尾。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值