1. 重定向

1.1 输出重定向

可以使用大于号(>)或者双大于号(>>)将命令的输出重定向,最常见的是重定向到文件中。大于号会在用新的文件数据覆盖旧的已经存在的文件,双大于号则是将新数据追加到已有的文件数据后面。

1.2 输入重定向

输入重定向与输出重定向相反,是将文件的内容重定向到命令,输入重定向有两种:

(1)普通的输入重定向,符号是小于号(<),格式为command < inputfile。比如:

allan@ubuntu:temp$ cat test
this is just a test.
the end.
allan@ubuntu:temp$ wc < test
 2  7 30

注:wc命令提供了对数据中文本的计数。默认情况下,它会输出3个值:

  • 文本的行数
  • 文本的词数
  • 文本的字节数

(2)内联输入重定向(inline input redirection),这种方法允许你在命令行而不是在文件指定输入重定向数据。符号是双小于号(<<),除了这个符号,还必须指定一个文本标记来划分要输入数据的开始与结尾。可以用任何字符串的值来作为文本标记,但在数据的开始和结尾必须一致,格式为:

command << marker
data
marker

比如下面的例子:

allan@ubuntu:temp$ wc << EOF
> test string 1
> test string 2
> test string 3
> EOF
 3  9 42

2. 管道

使用管道我们可以将某个命令的输出作为另一个命令的输入,虽然我们可以通过增加中间临时文件来使用重定向实现管道的功能,但显然没有管道方便。管道的格式如下:

command1 | command2 | ...

需要注意的是,

管道链接的命令并不是一个一个运行的,Linux系统实际上会同时运行多个命令,在系统内部将他们拼接起来。在第一个命令产生输出的同时,输出会被立即送给第二个命令。传输数据不会用到任何中间文件或者缓冲区域。