本文共 2509 字,大约阅读时间需要 8 分钟。
Shell命令在执行时,会自动打开三个标准文件,即标准输入文件(stdin),一般对应终端的键盘;标准输出文件(stdout)和标准出错输出文件(stderr),这两个文件对应终端的屏幕。但在实际应用中,这三个文件常常需要按照新的格式进行定向,从其它文件中导入内容或将内容导出到其它文件中,此过程就是重定向;使内容按一定格式输出,这就是管道。 执行命令时,这个命令会通过键盘读入数据,经过处理后,再将数据输出到屏幕上。数据流重定向就是命令执行后,从某文件中读入数据,经过处理后,再将数据输出到另一文件中。其执行过程如下图示: 重定向可分为输出重定向、错误重定向与输入重定向。下面将举例分析: 通过重定向符“>”或“>>”将命令的标准输出重新定向到指定文件中。 “>”与“>>”都能将内容重新写入到文件中,但如果文件中有内容,执行“>”完后新的内容将会覆盖掉原来的内容,而“>>”则是将新的输出内容附加到原来内容的结尾。 [root@localhost shell]# ls [root@localhost shell]# ps > test [root@localhost shell]# ls [root@localhost shell]# cat test 将ps命令的内容重定向到test文件中,执行完命令后,终端上确实没有输出内容,而当前目录下却多了test文件,再利用cat可以看到内容的确写到里面去了。 [root@localhost shell]# ls -a >> test [root@localhost shell]# cat test 用“>>”将当前目录下的所有文件名写入到实验1中创建的test文件中,执行完命令后用cat命令查看,新的内容的确是添加到文件原有内容的尾部。 通过重定向符“2>”或“2>>”将命令的标准错误输出重新定向到指定文件中。 [root@localhost shell]# cat ./jingzhao cat: ./jingzhao: 没有那个文件或目录 [root@localhost shell]# cat ./jingzhao > test cat: ./jingzhao: 没有那个文件或目录 [root@localhost shell]# cat ./jingzhao 2> test [root@localhost shell]# ls [root@localhost shell]# cat test cat: ./jingzhao: 没有那个文件或目录 由于当前目录中不存在文件jingzhao,用cat命令输出其中内容时会在终端上打印出错信息。改用输出重定向符号时错误信息还是没能重定向到test中,最后利用错误重定向符号将错误提示输出到test文件中。 从上面也可以知道,采用“>”或“>>”是不能将错误的信息重定向的。 通过重定向符“<”将命令的标准输入重新定位到指定文件中。 [root@localhost shell]# ls [root@localhost shell]# cat sh.sh echo "your working directory is `pwd` " echo "the time is `date`" [root@localhost shell]# bash < sh.sh your working directory is /shell the time is 四 7月 29 15:16:23 CST 2010 Shell命令解析程序将从脚本程序sh.sh中读取命令行,并加以执行。 Linux下可以采用管道操作符“|”来连接多个命令或进程,如下图示: 在连接的管道线两边,每个命令执行时都是一个独立的进程。前一个命令的输出正是下一个命令的输入。这些进程可以同时运行,并且随着数据流在它们之间的传递可以自动地进行协调,从而能够完成较为复杂的任务。 一般形式:[命令1] | [命令2] | [命令3] [root@localhost shell]# ls /etc/ 因为/etc下面的文件太多了,当利用ls /etc/来查看时发现整个屏幕都被塞满了文件,非常不方便,可利用more来分页显示。 [root@localhost bin]# ls /etc |more 命令ls /etc显示/etc目录的内容,命令more是分页显示内容。 本文转载于,【Linux基础】重定向与管道 (出处: )