重定向和管道
廖家龙 用心听,不照做

I/O是输入/输出(input/output)的缩写,I/O重定向可以把命令行的输入重定向为从文件中获取内容,也可以把命令行的输出结果重定向到文件中,如果我们将多个命令行关联起来,将形成非常强大的命令:管道

标准输出重定向:I/O重定向功能可以重新定义标准输出内容发送到哪里,使用重定向操作符“>”,后面接文件名,就可以把标准输出重定向到另一个文件中,而不是显示在屏幕上,主要用于把命令的输出内容保存到一个文件中


标准错误重定向:

将标准输出和标准错误重定向到同一个文件:
1)传统的方法,在旧版本的shell中使用

2)在这个例子中,只使用一个标记符“&>”就把标准输出和标准错误都重定向到了文件中

处理不想要的输出:
有时候沉默是金,命令执行后我们并不希望得到输出,而是想把这个输出丢弃,尤其是在输出错误和状态信息的情况下更为需要。系统提供了一种方法,即通过把输出重定向到一个称为/dev/null的特殊文件中来实现它,这个文件是一个称为位桶(bit bucket)的系统设备,它接受输入但是不对输入进行任何处理

标准输入重定向:

cat file..:合并文件,读取一个或多个文件,并把它们复制到标准输出文件中





管道:命令从标准输入到读取数据,并将数据发送到标准输出的能力是使用了名为管道的shell特性,使用管道操作符“|”可以把一个命令的标准输出传送到另一个命令的标准输入中

command | command【标准输出—>标准输入】

通过使用该技术,可以很方便的检查任意一条生成标准输出的命令的运行结果

过滤器:管道功能经常用来对数据执行复杂的操作,也可以把多条命令合在一起构成一个管道,这种方式中用到的命令通常被称为过滤器(filter),过滤器接受输入,按照某种方式对输入进行改变,然后再输出它

sort:假设要把/bin和/usr/bin目录下的所有可执行程序合并成一个列表,并且按照顺序排列,最后再查看这个列表

uniq:经常和sort命令结合使用,uniq可以接受来自于标准输入或者一个单一文件名参数对应的已排好序的数据列表,默认情况下,该命令删除列表中的所有重复行

wc(字数统计,word count):用来显示文件中包含的行数、字数和字节数

grep:在文件中查找匹配文本

head/tail:打印文件的开头部分/结尾部分:
head命令将输出文件的前10行,tail命令则输出文件的最后10行,可以通过-n选项来调整输出的行数

这些命令选项也可以应用在管道中:

tee:读取标准输入,再把读到的内容复制到标准输出(允许数据可以继续向下传输到管道中)和一个或更多的文件中去【标准输入—>标准输出】

在使用grep命令过滤管道内容之前,先使用tee命令来获取整个目录列表并输出到ls.txt文件中: