博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Linux基础】重定向与管道
阅读量:4282 次
发布时间:2019-05-27

本文共 2509 字,大约阅读时间需要 8 分钟。

Shell命令在执行时,会自动打开三个标准文件,即标准输入文件(stdin),一般对应终端的键盘;标准输出文件(stdout)和标准出错输出文件(stderr),这两个文件对应终端的屏幕。但在实际应用中,这三个文件常常需要按照新的格式进行定向,从其它文件中导入内容或将内容导出到其它文件中,此过程就是重定向;使内容按一定格式输出,这就是管道。
1. 重定向
一个命令的执行可以用图 5‑2表示。

01.jpg (8.18 KB, 下载次数: 0)

6 天前 上传

执行命令时,这个命令会通过键盘读入数据,经过处理后,再将数据输出到屏幕上。数据流重定向就是命令执行后,从某文件中读入数据,经过处理后,再将数据输出到另一文件中。其执行过程如下图示:

02.jpg (10.33 KB, 下载次数: 0)

6 天前 上传

重定向可分为输出重定向、错误重定向与输入重定向。下面将举例分析:
(1)输出重定向
通过重定向符“>”或“>>”将命令的标准输出重新定向到指定文件中。
一般形式:命令 > 文件名
命令 >> 文件名
“>”与“>>”都能将内容重新写入到文件中,但如果文件中有内容,执行“>”完后新的内容将会覆盖掉原来的内容,而“>>”则是将新的输出内容附加到原来内容的结尾。
实验1:
[root@localhost shell]# ls
[root@localhost shell]# ps > test
[root@localhost shell]# ls
test
[root@localhost shell]# cat test
PID TTY TIME CMD
6459 pts/2 00:00:00 bash
6479 pts/2 00:00:00 bash
6774 pts/2 00:00:00 ps
实验解析:
将ps命令的内容重定向到test文件中,执行完命令后,终端上确实没有输出内容,而当前目录下却多了test文件,再利用cat可以看到内容的确写到里面去了。
实验2:
[root@localhost shell]# ls -a >> test
[root@localhost shell]# cat test
PID TTY TIME CMD
6459 pts/2 00:00:00 bash
6479 pts/2 00:00:00 bash
6774 pts/2 00:00:00 ps
.
..
test
实验解析:
用“>>”将当前目录下的所有文件名写入到实验1中创建的test文件中,执行完命令后用cat命令查看,新的内容的确是添加到文件原有内容的尾部。
(2)错误重定向
通过重定向符“2>”或“2>>”将命令的标准错误输出重新定向到指定文件中。
一般形式:命令 2> 文件名
命令 2>> 文件名
实验3:
[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
test
[root@localhost shell]# cat test
cat: ./jingzhao: 没有那个文件或目录
实验解析:
由于当前目录中不存在文件jingzhao,用cat命令输出其中内容时会在终端上打印出错信息。改用输出重定向符号时错误信息还是没能重定向到test中,最后利用错误重定向符号将错误提示输出到test文件中。
从上面也可以知道,采用“>”或“>>”是不能将错误的信息重定向的。
(3)输入重定向
通过重定向符“<”将命令的标准输入重新定位到指定文件中。
一般形式:命令 < 文件名
实验:
[root@localhost shell]# ls
sh.sh
[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中读取命令行,并加以执行。
2. 管道
Linux下可以采用管道操作符“|”来连接多个命令或进程,如下图示:

02.jpg (8.5 KB, 下载次数: 0)

6 天前 上传

在连接的管道线两边,每个命令执行时都是一个独立的进程。前一个命令的输出正是下一个命令的输入。这些进程可以同时运行,并且随着数据流在它们之间的传递可以自动地进行协调,从而能够完成较为复杂的任务。
一般形式:[命令1] | [命令2] | [命令3]
实验:显示/etc目录下面内容
[root@localhost shell]# ls /etc/
。。。。。。。
esd.conf pwdb.conf
exports quotagrpadmins
fb.modes quotatab
fdprm racoon
……
因为/etc下面的文件太多了,当利用ls /etc/来查看时发现整个屏幕都被塞满了文件,非常不方便,可利用more来分页显示。
[root@localhost bin]# ls /etc |more
a2ps.cfg
a2ps-site.cfg
acpi
adjtime
alchemist
aliases
aliases.db
alsa
……
--More--
命令ls /etc显示/etc目录的内容,命令more是分页显示内容。
 
本文转载于,【Linux基础】重定向与管道
(出处: )
你可能感兴趣的文章
Hadoop 2.0.0-cdh4.5.0安装
查看>>
Apache Hadoop 2.2.0 HDFS HA + YARN多机部署
查看>>
【甘道夫】info could only be replicated to 0 nodes, instead of 1
查看>>
【伊利丹】Hadoop2.0 NN HA实验记录
查看>>
ActiveMQ应用笔记四:Ajax应用
查看>>
【甘道夫】Hadoop培训讲义
查看>>
【甘道夫】NN HA 对于 Client 透明的实验
查看>>
【甘道夫】Hadoop2.2.0 NN HA详细配置+Client透明性试验【完整版】
查看>>
【甘道夫】并行化频繁模式挖掘算法FP Growth及其在Mahout下的命令使用
查看>>
no talloc stackframe at ../source3/param/loadparm.c
查看>>
【甘道夫】Sqoop1.99.3基础操作--导入Oracle的数据到HDFS
查看>>
【甘道夫】一键启动集群,包括HDFS HA + YARN相关所有程序
查看>>
AIDL
查看>>
android学习记录
查看>>
wpa_supplicant学习
查看>>
RTP
查看>>
OSS(Open Sound System)资料
查看>>
squashfs
查看>>
libtool错误的解决
查看>>
linux网络编程
查看>>