shell脚本学习---005(重定向以及管道命令解释)
stdout 是标准输出流,它显示来自命令的输出。它的文件描述符为 1。
stderr 是标准错误流,它显示来自命令的错误输出。它的文件描述符为 2。
stdin 是标准输入流,它为命令提供输入。它的文件描述符为 0。
ls x* z* >output.txt 2>&1
>> 和 > 都是重定向的意思,区别是>>表示如果文件不存在这新建文件并输出,如果文件存在这在文件末尾添加 ,>新建文件并输出会覆盖原有文件 。
上命令相当于:ls x* z* 1>output.txt 2>&1 将stdout(1)输出到output.txt中,将stderr(2)输出到1(既是stdout)中,默认重定向的是stdout,是以第一个1可以省略不写 。
PS :/dev/null 表示linux下的一个空文件,可以定向到这里面表示不输出 。
管道 (|):
在两个命令之间使用管道 | 操作符将的一个命令的 stdout 指向第二个命令的 stdin。您可以通过添加更多的命令和管道操作符来构造更长的管道线。
任何命令都可能包含选项或参数。许多命令使用连字符 (-) 取代文件名作为一个参数,用于表示输入来自 stdin 而不是文件。查看手册页确保正确使用命令。构造由多个命令(每个命令都有特定的功能)组成的长管道线是在 Linux 和 UNIX? 中用于完成任务的常见方法。在清单 10 的假设管道线中,command2 和 command3 都带有参数,但 command3 仅使用 - 参数表示来自 stdin 的输入。
需要说明的是,管道线仅将 stdout 导向 stdin。您不能使用 2| 单独导出 stderr,至少使用我们目前所了解的工具还不能这样做。如果 stderr 已被重定向到 stdout,那么两个流都会被通过管道导出。
在清单 11 中,我们展示了一个不太现实的 ls 命令,它有 4 个不是按字母顺序出现的通配符参数,然后使用一个管道对包含正常和错误输出内容的进行分类。
command1 | command2 paramater1 | command3 parameter1 - parameter2 | command4
eg..
ps auxf | grep "com.analyse.news.server.NewsServer" | grep -v "grep"| awk '{print $2}'
ps auxf列出所有的进程,将输出从定向到grep的输入,然后查找包含“com.analyse.news.server.NewsServer”的行,再将输出重定向到grep -v “grep”中(因为grep会找出自己(字符串作为参数)),然后再将输出重定向到awk命令中 。
参考网页:http://www.ibm.com/developerworks/cn/linux/l-lpic1-v3-103-4/