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