管道和输入输出

1、管道

(1)管道使用“|”作为操作符,这个符号通常位于键盘上的Enter或者退格键BackSpace附近。管道的格式为:

#command1 | command2 | command3 ...

系统执行上面的命令时,会先执行命令command1,并通过管道将command1的输出结果交给命令command2处理.然后再将command2的结果传给下一个命令command3,这样一直将结果传递下去,直到最后一个命令.在这个过程中,管道后面的命令总是使用管道前面的命令输出作为命令的输入.

(2)许多时候需要在某个命令的输出中筛选结果,这是管道最常见的用法之一。例如查看系统中是否已经安装了gcc编译器软件包:

[root@localhost ~]# rpm -aq | grep gcc
gcc-c++-4.1.2-14.el5
libgcc-4.1.2-14.el5
gcc-4.1.2-14.el5
gcc-gfortran-4.1.2-14.el5

上面这条命令中,先使用命令rpm -aq输出系统中已安装的所有软件包,然后利用管道将结果传递给下一条命令grep gcc。后者将从已安装的软件包列表中筛选出名称中含有gcc的行并输出。

(3)管道的另一个常见的用法是辅助处理命令输出。

2、命令的输入、输出和错误

标准输入(默认为键盘):文件描述符为0

标准输出(默认为显示器):文件描述符为1

标准错误输出(默认为显示器):文件描述符为2

3、重定向命令的输入、输出和错误

(1)输出重定向

>   :覆盖式写入

>> :追加式写入

提示:如果要向系统配置文件(特别是/etc目录中的文件)添加内容,通常应该使用追加的方式,以免损坏系统。

(2)输入重定向

<   :大多时候输入重定向使用的是一个文件

<< :这个操作符被形象地称为here document(这儿文档),下面以一个示例进行讲解

[root@localhost ~]# cat <<END
> This is the first line.
> This is the second line.
> This is the last line.
> END
This is the first line.
This is the second line.
This is the last line.

在上面这条命令中,cat命令用于输出文本,<<操作符后面的END指示了结束输入的标记。按Enter键之后用户就可以开始输入文本,直到输入的字符为END时,输入过程才会结束。

(3)错误重定向

执行一个命令时可能会有很多输出,由于命令的输出信息和错误信息混合在一起,可能无法看到错误的信息,这时可以将标准错误重定向到文件中,以便于用户查看。例如将错误信息重定向到文件error中:

[root@localhost ~]# ls
anaconda-ks.cfg  Desktop  install.log  install.log.syslog
[root@localhost ~]# rm abcd 2>error
[root@localhost ~]# ls
anaconda-ks.cfg  Desktop  error  install.log  install.log.syslog
[root@localhost ~]# cat error
rm: cannot lstat `abcd': No such file or directory

默认情况下,重定向符“<”和“>”表示重定向输入和输出,因此在重定向错误时必须使用“2>”明确表示将标准错误进行重定向。

技巧:当我们不想看到错误信息时(例如在系统启动脚本中运行某个命令可能会产生错误),可以将错误信息重定向到系统垃圾池/dev/null。

有时某条命令会产生很多条错误,为了不让后一条错误信息覆盖前面记录的文本,此时应该使用“2>>”将错误追加到文件最后。

(4)输出和错误同时重定向

可以使用“2>&1”或者“&>”

[root@localhost ~]# ping 192.168.1.1 -c3 > /dev/null 2>&1

[root@localhost ~]# ping 192.168.1.1 -c3 &>/dev/null

技巧:制作系统监控脚本、自动任务脚本时,经常需要将可预见的命令输出和错误重定向到系统垃圾池中。这样做的目的是避免产生的输出、错误干扰用户正在进行的工作。

也可以同时重定向命令的输入和输出,例如:

[root@localhost ~]# sed '1,300d' <netstat.txt >netstat_1

将命令的输出和错误同时重定向是管理和维护Linux系统过程中最常见的用法之一。

原文地址:https://www.cnblogs.com/nufangrensheng/p/3454604.html