【Linux基础】重定向与管道

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是分页显示内容。
 
本文转载于唯C教育,【Linux基础】重定向与管道
http://www.weicedu.com/forum.php?mod=viewthread&tid=91&fromuid=4
(出处: http://www.weicedu.com/)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值