标准输入输出和管道

Posted 爱吃山楂果

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了标准输入输出和管道相关的知识,希望对你有一定的参考价值。

一、Linux提供三种输入/输出

标准输入STDIN

标准输出STDOUT

标准错误STDERR 

 1 标准输出和标准错误能重定向到文件中
 2 # 命令  操作  文件名
 3 支持操作包括:
 4 >    重定向标准输出到文件,等同于1>
 5 2>    重定向标准错误到文件
 6 &>    重定向所有的输出到文件
 7 文件内容模式被覆盖.>>用在追加.
 8 例子:
 9 #ls /etc -l 1> /tmp/ls.txt
10 #ls /etc/asdb /etc/passwd /asdfa &> /tmp/all.txt  //将所有的输出都指向到all.txt文件中
>覆盖前面的文件
>>追加新增内容到文件中。当然也存在1>>和2>>,类似1>和2>,只是这个是追加。是不存在&>>符号的。

二、重定向标准输出给一个程序(Piping)

管道(|字符)可以连接命令:

command1|command2

发送command1标准输出给command2的标准输入而不是终端屏幕。

标准错误不会通过贯通传递

通常用于组合多个命令处理功能

command1|command2|command3...

 1 实例:
 2 #ls /etc/ -l | less  使用GG和gg跳转结尾和开头,鼠标上下移动
 3 #cat /etc/passwd | grep student
 4 mail:通过邮件发送输入:
 5 $echo "test email" | mail -s "test" user@example.com
 6 lpr:发送输入到一台打印机
 7 $echo "test print" | lpr
 8 $echo "test print" | lpr -P printer_name
 9 更改密码:
10 可以使用passwd 里面的--stdin来做,如:
11 #echo "redhat" | passwd --stdin user
12 cmd1|cmd2| tee file.txt | cmd3   //tee file.txt将前面cmd1|cmd2的结果输出到文件file.txt文件中,后续将结果送过cmd3处理
eg:#cat etc/passwd | grep ro |tee /tmp/filter.ro.txt | grep roo | tee /tmp/filter.roo.txt | grep root 

组合输出和错误:
1.一些操作同时影响标准输出和标准错误
  &>:重定向所有输出:
    $find /etc -name passwd &>find.all
  2>&1:重定向标准错误到标准输出    //当输出有错误的时候,使用这个可以把错误的输出变成正确的输出
2.通过管道发送所有的输出非常有用
  &find/etc -name passwd 2>&1 | less
  ():组合多个程序的标准输出
    (cal 2007;cal 2008)| less
/dev/null黑洞
从一个文件中重定向标准输入:
  重定向标准输入使用<
  一些命令可以接受来自于文件重定向的数据:
    .$tr\'A-Z\'\'a-z\'<.bash_profile
      这条命令转换了在.bash_profile中的大写字母为小写字母
    .等同于:$cat.bash_profile  | tr\'A-Z\'\'a-z\'
  tr命令可以用来加密,如#tr \'ahtn\' \'@1$#\' < /etc/password > /tmp/tr.txt,将字母ahtn按照对应规则转换成@1$#,并将结果输入到/tmp/tr.txt
  用重定向来实现cp、如#cat < /etc/passwd > /tmp/passwd
  #cp /etc/passwd /tmp/passwd将会看到文件已经存在在/tmp/passwd
发送多行给标准输入:
  从键盘中重定向多行给标准输入,使用 <<WORD
    .直到WORD的所有文本将发送给标准输入
    .有时候也称呼为heretext
  .$mail -s "Please Call" jane@example.com <<END>Hi Jane,
  .>
  .>Please give me a call when you get in,We may need
  .>to do some maintenance on server1.
  .>
   >Details when you\'re on-site,
  .>Boris
  .>END

 

 


以上是关于标准输入输出和管道的主要内容,如果未能解决你的问题,请参考以下文章

数据流重定向和管道命令(bash学习02)

标准输入输出和管道

标准输入输出和管道

谈谈Linux下的数据流重定向和管道命令

aplay 管道使用文件而不是标准输入和标准输出来记录

如何使用 Python 将标准输入/标准输出通过管道传输到 Perl 脚本