管道和重定向

Linux中绝大多数命令都很简单;很少有功能复杂的命令;
每个命令都只实现一个或几个简单的功能;
如果想实现复杂的功能,可以将几个简单的命令组合在一起;
管道和重定向就是将简单的命令结合在一起的技术;
 
Linux中的几乎所有的命令返回数据都是纯文本的;
而纯文本形式的数据又是大多数命令的输入格式;这让大多数命令协作成为了可能;
例如:命令 ls 是两个简单的英文字母;它输出的效果也是 纯文本的当前目录下文件信息;
 
多命令协作就是通过管道和重定向来实现的;
 
1.关于命令行的数据流
命令行数据的数据流有三种定义:
命令行通过标准输入STDIN来接收参数或数据;默认的标准输入是键盘;通过键盘输入实际上是把数据通过标准输入告诉命令行;
通过标准输出STDOUT来输出结果;如果输入的命令返回的是正常情况,就通过标准输出来返回;否则通过STDERR;
通过STDERR来输出错误信息;命令执行时出错返回报错信息; 
 
2.关于管道和重定向
通过管道和重定向可以控制命令行的数据流
1)重定向
      其中一个大于号 “>”可以将标准输出STDOUT重定向到文件;
      例如:echo 命令的作用是输出信息;默认是输出到命令行;
      重定向的命令:echo 要输出的信息>文件名
      下面的命令可以在 文件a.txt中输出 文本 so many people;
echo "so many peopel" > a.txt
    注意 “>”和“>>”只能重定向STDOUT信息;不能重定向标准错误信息;
    可以用 “2>”来重定向标准错误信息;其中的2是标准错误的编号;    
    2>可以用来做一个保存错误信息的日志;
 
    2>&1 用来将标准输入和标准输出结合在一起;也就是输出地点既可以保存正常信息也可以保存错误信息;
    
    "<"用来将重定向标准输入;
    例如:将a.txt中的内容当作标准输入重定向
grep my<b.txt
    grep命令的作用是从目标文件中获取带有关键字的那行信息;
    结果如图:
 
2)管道
管道的符号是直杠“|”;
作用是将一个命令的标准输出作为另一个命令的标准输入;
也就是将一个命令的输出信息通过管道传递个另一个命令;
例如:提取当前目录文件信息中带有关键字 26的一行
ls -l | grep 26
 
再比如:要将当前目录中属于root用户的文件中带有a.txt关键字的;
    命令 find . -user root ;找到所有当前目录中属于root用户的文件;
    命令 grep a.txt 找出带有a.txt关键字的信息;
    用管道 | 将命令组合在一起;
find . -user root | grep a.txt 
> /dev/null 重定向到/dev/null来删除;null相当于一个垃圾桶,所有重定向到null的会被删除;
 
3.管道和重定向的作用
管道常用来组合不同的命令,从而来实现复杂的功能;
重定向通常用来保存命令的输出信息或错误信息;比如记录命令执行结果或保存错误信息到指定文件;
 

猜你喜欢

转载自www.cnblogs.com/ShiningArmor/p/10471625.html