欢迎 chinavb 加入本站!
 免费注册  用户登陆  汇款方式  汇款确认  产品报价  联系我们  帮助中心
加入收藏
设为首页
会员体系
申请VIP
网站首页 光盘超市 软件下载 技术文章 专题 用户中心 VIP会员 技术论坛 网站留言 娱乐中心 卓越资源
今天是:2009年01月08日 星期四  您现在位于: 首页 → 技术文章 → 善用重定向提高工作效率
   善用重定向提高工作效率
作者:  出处:Unix爱好者家园unix-cd.com  更新时间: 2005年12月27日 

文件的输入/输出重定向是 Linux 系统中一个重要的机制。借助于重定向用户往往可以比较轻松地完成某些任务, 从而提高工作效率。本文结合作者的使用经验, 列举和总结了一些使用输入/输出重定向的实例和技巧。

文件输入,输出和错误输出

当 Shell 运行一个新的应用程序或命令时,它会为进程自动创建三个文件描述符,即标准输入(stdin),标准输出(stdout)和标准错误输出(stderr)。它们被分别赋值为 0,1 和 2。标准输入通常默认为终端的键盘,标准输出和标准错误输出通常默认为终端的屏幕。在默认情况下,应用程序会从 stdin 中取得输入数据,并把输出数据和出错信息分别传送给 stdout 和 stderr。重定向就是要改变这些 stdin、stdout 及 stderr 默认的去向。重定向包括输入重定向和输出重定向。

输出重定向

简单地说,输入重定向就是把应用程序的标准输出或标准错误输出重新定向到某个指定的文件,而不是原来默认的标准输出,比如屏幕。它的操作符是">"或">>"。运用输出重定向可以比较方便地生成,编辑某些文件;比较容易地和系统中的某些设备文件进行交互。下面是一些实例。

列出 home 目录下所有的 csv 文件并把结果保存到文件 csv.out 中:

 


            [wei@amt55  home]#  find  /home  -name  "*csv"  >  csv.out
            

获取系统内存使用信息并追加到文件 sysinfo.out 中:

 


            [root@amt55  info]#  cat  /proc/meminfo  >>  sysinfo.out
            

如果不想让别人在网络上 ping 到自己的机器,可以这么做:

 


            [root@amt55  /]#  echo 1  >  /proc/sys/net/ipv4/icmp_echo_ignore_all
            

如果不想看到某个命令执行的结果,可以这样将其丢弃:

 


            [root@amt55  /]#  ls  -aR  /home/wei   >  /dev/null
            

把文件 backup.tar 拷贝到软盘里:

 


            [root@amt55  ladungmss]#  cat  backup.tar  >  /dev/fd0
            

迅速清空文件 parametertest.in 中的内容:

 


            [root@amt55  ladungmess]#  cat  /dev/null  >  parametertest.in
            

想播放声音文件 wallstart.au 吗,太简单了:

 


            [root@amt55  sounds]#  cat  wallstart.au  >  /dev/audio
            

直接把文件 dma.ps 送到打印设备去打印:

 


            [root@amt55  ladungmess]#  cat  dma.ps  >  /dev/lp
            

在当前目录 ladungmess 下快速创建一个名为 rawdata.csv 的空文档:

 


            [root@amt55  ladungmess]#  cd  /home  >  rawdata.csv  或者[root@amt55  ladungmess]#  cp wei001.csv  /home/  >  rawdata.csv
            

这是因为命令 cd 或 cp 是不产生输出的,所以把它们运行的结果重定向到一个文件,文件自然是空的。下一节还将介绍一个利用输入重定向来创建空文件的例子。

将当前目录下包含的所有内容备份为一个文件 backup.tar:

 


            [root@amt55 ladungmess]#  tar  cf  -  .  >  backup.tar
            

上面的命令巧妙地运用了两个输出重定向,即"-"和">"。对"-"的解释可以参见下一节中关于 tar 的例子。

输入重定向

输入重定向是把应用程序的标准输入重新定向到指定的文件。这就可以使程序的输入源不限于键盘,也可以来自文件。输入重定向的操作伏符是"<"或">>"。与输出重定向相比,输入重定向运用的地方要少一些。不过在某些情况下使用它们可以起到很好的效果。下面是一些实例。

在当前目录下快速创建一个空文档 rawdata.dat:

 


            [root@amt55  ladungmess]#  cat  >  rawdata.dat  <  /dev/null
            

在局域网上给其他人发送信息:

 


            [root@amt55  ladungmess]#  mail  -s  "The experiement results"   user1  user2   <  rawdata.dat
            

统计文件 ladvertest.out 中的行数和字数:

 


            [root@amt55  ladungmess]#  wc  -l  -w  <  ladvertest.out
            

利用 Here 文档把两个分隔符 END 之间的文本保存到文件 expfile:

 


            [root@amt55  ladungmess]#  cat  >  expfile  << END
            <  The experiment file
            <   ladvertest.in ladvertest.out
            <   END
            

将当前目录 ladungmess 下的所有东西打包压缩,快速移动到另一个目录 backup 下:

 


            [root@amt55  ladungmess]#  tar  cf  -  .  |  (cd  /home/wei/backup;   tar  xvfp  -)
            

这个命令对于在不同目录之间转移文件很有用。需要注意的是这里的重定向与前面那些例子不太一样,其标志是符号"-"'。 第一个"-"是一个输出重定向,它要求 tar 的输出(压缩的包)不是某个磁盘文件,而是 stdout,这个 stdout 通过管道变为第二个命令 tar 的 stdin; 第二个"-"是一个输入重定向,它要求第二个 tar 的输入不是来自某个磁盘文件,而是来自 stdin,也就是由管道传来的第一个 tar 的 stdout。

最后介绍一个目前实验数据处理中碰到的使用重定向的例子。为了从测量数据中得中纳米颗粒的电荷分布,需要运行某些与用户交互的程序。其中的一个程序是parameter,是用 C++ 编写的。它用来读取实验数据,并按照用户提供的与颗粒有关的各种参数去拟合出一个与实验数据最接近的分布。这实质上是一个不断尝试(trial-and-error)的过程。因为不能保证只通过一次或几次运行程序就得到理想的结果。每次运行 parameter 我都要连续从键盘输入十一个参数 (为了便于理解,我把 parameter 的源程序放在 这里)。这样做有几个不合适的地方: 一是参数比较多,输入一次要占用不少时间。其次大部分参数在调整几次后就不需要再变了,而文件名在某次实验中一直都是不变的,但是下一次运行程序时所有这些都还要重新输入。再有多次输入也容易发生输错的情况。输入重定向帮我很好解决了这一问题: 把这十一个参数按照它们在程序中出现的次序放在一个名为 parametertest.in 的文件中,格式如下(对应其中某一次输入,第一行 parametertest.csv 是实验数据文件名):

 


            prametertest.csv11-6000  -5400
            1.05  1.20.066  0.0681e3  1e5
            

然后运行:

 


            [root@amt55  ladungmess]#  ./parameter  <  parametertest.in
            

现在立刻就可以获得计算结果了。如果不满意,下一次尝试我只要在文件 parametertest.in 中修改那些需要改变的参数就行了。很明显,由于输入重定向接管了每次从键盘输入的工作,所以运行程序的效率大大提高了。如果对输入的参数满意了,可以再使用一个输出重定向:

 


            [root@amt55  ladungmess]#  ./parameter < parametertest.in  >  parametertest.out
            

把计算结果保存到文件 parametertest.out 中。

结论

重定向能够运用的场合很多,上面列举的十几个例子只是其中很小的一部分。不过从这有限的例子中不难发现,运用重定向处理某些问题是相当巧妙和简洁的,善于利用重定向往往会给工作带来许多方便,从而显著地提高工作效率。

参考资料

 

关于作者
韦建明,目前在德国 Duisburg-Essen 大学学习,Ph.D. Candidate。很喜欢 Linux 和 open source 软件。电子邮件: wei@uni-duisburg.de
 (本文已被浏览 1793 次)
 发布人:sdccf
 → 推荐给我的好友
上篇文章:Grub安装.配置及使用汇总
下篇文章:几个shell程序设计小知识
 相关文章:
很强悍!Ubuntu也能玩Photoshop CS2 35款Linux发行版名字的含义
Sybase Ase 12.5 for Linux全攻略 SYBASE 12.5 for Linux安装
红旗软件宣布推出支持英特尔MID的Midinux操作系统 使用Windows Vista引导Linux
Linux下的绘图程序-Gogh Linux DOSBOX 运行DOS游戏
VMware 6 Linux 版本下载安装配置编译序列号注册码 2007年八款最令人上瘾的Linux游戏
Linux系统下的攻击软件全接触 远程网络安装RedHat Linux系统的方法
六脉神剑捍卫企业 Linux系统(三) 六脉神剑捍卫企业 Linux系统(二)
在Linux高负载下mysql数据库彻底优化 VMware下编译Linux内核(2.4.32)全过程
Linux截图与考屏方法总结 基于网络的RedHat Linux无人值守安装
用比较法学Linux基本命令 Linu系统管理新手要了解的十个知识点

相关搜索
查看百度中关于善用重定向提高工作效率的更多内容
查看google中关于善用重定向提高工作效率的更多内容
   文章分类
操作系统 |
SCO_UNIX  Sun_Solaris  IBM_AIX  HP_UX  Linux  BSD  Tru64_UNIX 
通用UNIX知识  Windows  Minix 
程序设计 |
Shell编程  C/C++  汇编  PHP  JAVA  Perl  Python 
ASP/HTML  XML  中间件 
数据库 |
Oracle  Informix  Sybase  Fox  DB2  SQL  MySQL 
PostgreSQL 
网络应用 |
网络应用 
计算机硬件 |
计算机主机  打印机  路由器  交换机  终端  磁带机  MO 
刻录机  终端服务器  调制解调器 
   文章评论
  → 评论内容 (点击查看)   共0条评论,每页显示5条评论   浏览所有评论
(没有相关评论)
  → 发表我的评论
您的姓名: 您的Email:
评论内容:
250字内
发表评论:      发表评论须知 →
  • 尊重网上道德,遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法;
  • 本站有权保留或删除您发表的任何评论内容;
  • 关于我们 ┋  网站留言 ┋  网站地图 ┋  友情链接 ┋  与我在线 ┋  汇款确认 ┋  管理 ┋  TOP
    Unix爱好者家园  http://www.unix-cd.com/
    联系我们:sdccf@163.com
    腾讯QQ: 7644599
    备案序号:鲁ICP备05000455号
    Copyright (c) 2001-2008 Unix-cd.com. All Rights Reserved.