与DOS相似,Shell 程序一般自动打开3个标准文档:标准输入文档(stdin)、标准输出文档(stdout)和标准错误输出文档(stderr)。其中 stdin 通常对应终端键盘,stdout 和 stderr 对应终端屏幕。进程从 stdin 获取输入内容,将执行结果输出到stdout,若是有错误信息,同时输出到 stderr。多数状况下使用标准输入输出做为命令的输入输出,但有时可能要改变标准输入输出,这就涉及到重定向和管道。命令行
1.输入重定向
主要用于改变命令的输入源,让输入不要来自键盘,而来自指定文件。基本用法:code
命令 < 文件名
例如,wc 命令用于统计指定文件包含的行数、字数和字符数,直接执行不带参数的 wc 命令,将等待用户输入内容以后,按+结束输入后才对输入的内容进行统计。而执行下列命令经过文件为 wc 命令提供统计源。blog
2.输出重定向
主要用于改变命令的输出,让标准输出不要显示在屏幕上,而是写入到指定文件中。基本用法:
命令 > 文件名
例如,ls 命令在屏幕上列出文件列表,不能保存列表信息。要将结果保存到指定文件,就可以使用输出重定向,下列命令将当前目录中的文件列表信息写到所指定的文件中。进程
ls > /home/nnp/myml.list
若是要写入已有文件,则将该文件重写(覆盖)。要避免重写破坏原有数据,可选择追加功能,将 > 改成 >>,下列命令将当前目录中的文件列表追加到指定文件的末尾。文档
ls >> /home/nnp/myml.list
以上是对标准输出来说的,至于标准错误输出的重定向,只须要换一种符号,将 > 改成 2> ,将 >> 改成 2>>。将标准输出和标准错误输出重定向到同一文件,则使用符号 &>。class
3.管道
管道用于将一个命令的输出做为另外一个命令的输入,使用符号 “|” 来链接命令。能够将多个命令依次链接起来,前一个命令的输出做为后一个命令的输入。基本用法:搜索
命令1 | 命令2 ....... | 命令n
在Linux命令行中,管道操做很是实用。例如,如下命令将 ls 命令的输出结果提交给 grep 命令进行搜索。终端
ls | grep "ab"
在执行输出内容较多的命令时能够经过管道使用 more 命令进行分页显示,例如:分页
cat /etc/log/message | more
4.命令替换
命令替换与重定向有些相似,不一样的是命令替换将一个命令的输出做为另外一个命令的参数,经常使用命令格式以下:grep
命令1 '命令2'
其中命令2的输出做为命令1的参数,注意这里的符号是指反引号,被它括起来的内容做为命令执行,执行的结果做为命令1的参数。例如如下命令将 pwd 命令列出的目录做为 cd 命令的参数,结果仍停留在当前目录下。
cd 'pwd'