linux-4 输入输出的管理

       在shell脚本中,可以用几种不同的方式读入数据:可以使用标准输入—缺省为键盘,或者指定一个文件作为输入。对于输出也是一样:如果不指定某个 文件作为输出,标准输出总是和终端屏幕相关联。如果所使用命令出现了什么错误,它也会缺省输出到屏幕上,如果不想把这些信息输出到屏幕上,也可以把这些信 息指定到一个文件中。

可以通过管道把一个命令的输出传递给另一个命令作为输入。管道用竖杠 |表示。它的一般形式为:

命令1 |命令2
其中|是管道符号。
在 下面的例子中,在当前目录中执行文件列表操作,如果没有管道的话,所有文件就会显示出来。当shell看到管道符号以后,就会把所有列出的文件交给管道右 边的命令,因此管道的含义正如它的名字所暗示的那样:把信息从一端传送到另外一端。

sed、awk和grep都很适合用管道,特别是在简单的一行命令中。


如图,将ls命令的结果通过 | 传给 grep 命令



 tee


tee命令作用可以用字母T来形象地表示。它把输出的一个副本输送到标准输出,另一个副本拷贝到相应的文件中。如果希望在看到输出的同时,也将其存入一个文件,那么这个命令再合适不过了。
它的一般形式为:
tee -a files
其中,-a表示追加到文件末尾。
当执行某些命令或脚本时,如果希望把输出保存下来,tee命令非常方便。

如图,在显示/root/Desktop 下的文件的同时,将显示结果重定向给文件 file



标准输入、输出和错误


当我们在shell中执行命令的时候,每个进程都和三个打开的文件相联系,并使用文件描述符来引用这些文件。由于文件描述符不容易记忆,shell同时也给出了相应的文件名。
下面就是这些文件描述符及它们通常所对应的文件名:
文件           文件描述符
输入文件—标准输入 0
输出文件—标准输出 1
错误输出文件—标准错误 2

系统中实际上有12个文件描述符,但是正如我们在上表中所看到的,0、1、2是标准输入、输出和错误。可以任意使用文件描述符3到9。

如下图 用普通用户去搜索 passwd 时会产生一些错误输出,通过将错误重定向,达到只显示正确输出。




标准输入

标准输入是文件描述符0。它是命令的输入,缺省是键盘,也可以是文件或其他命令的输出。


标准输出


标准输出是文件描述符1。它是命令的输出,缺省是屏幕,也可以是文件。


标准错误


标准错误是文件描述符2。这是命令错误的输出,缺省是屏幕,同样也可以是文件。你可能会问,为什么会有一个专门针对错误的特殊文件?这是由于很多人喜欢把错误单独保存到一个文件中,特别是在处理大的数据文件时,可能会产生很多错误。

如果没有特别指定文件说明符,命令将使用缺省的文件说明符(你的屏幕,更确切地说是你的终端)

文件重定向



在 执行命令时,可以指定命令的标准输入、输出和错误,要实现这一点就需要使用文件重定向。以下列出了最常用的重定向组合,并给出了相应的文件描述符。在 对标准错误进行重定向时,必须要使用文件描述符,但是对于标准输入和输出来说,这不是必需的。


常用文件重定向命令
command > filename 把标准输出重定向到一个新文件中
command >> filename 把标准输出重定向到一个文件中(追加)
command 1 > fielname 把标准输出重定向到一个文件中
command > filename 2>&1 把标准输出和标准错误一起重定向到一个文件中
command 2 > filename 把标准错误重定向到一个文件中
command 2 >> filename 把标准输出重定向到一个文件中(追加)
command >> filename 2>&1 把标准输出和标准错误一起重定向到一个文件中(追加)
command < filename >filename2 把command命令以filename文件作为标准输入,以filename2文件作为标准输出
command < filename 把command命令以filename文件作为标准输入
command << delimiter 把从标准输入中读入,直至遇到delimiter分界符
command <&m 把文件描述符m作为标准输入
command >&m 把标准输出重定向到文件描述符m中
command <&- 把关闭标准输入


如下图,通过>> 将“hello word ”追加到文件 file 中


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值