热门标签 | HotTags
当前位置:  开发笔记 > 程序员 > 正文

unix中管道符让输入源不起作用

文章标题:unix中管道符让输入源不起作用。Linux是中国IT实验室的一个技术频道。包含桌面应用,Linux系统管理,内核研究,嵌入式系统和开源等一些基本分类

    在Unxi操作系统中,标准输入和标准输出是外壳程序中可以单独使用的两个独立流。但是有时候系统工程师需要让某些特定的输入源不起作用。当系统工程师在开发一些实用的脚本程序的过程中,经常需要用到。

  一、在什么时候需要让输入源不起作用?

  在什么时候需要让输入源不起作用呢?这个是举不胜举呀。笔者在这里就举两个比较简单的例子。

  一是在统计文件大小的时候需要用到。如现在系统工程师需要统计当前目录下所有文本文件的大小,通常情况下可以使用wc ?c *.txt命令。利用这个命令后,操作系统会显示当前目录下所有的文本文件以及对应的大小,然后在最后以行再统计文本文件的总大小。但是在编写一些脚本程序的时候可能只需要用到文件的总大小即可,而不需要每个文件的大小。如在Unix操作系统上部署了Oracle数据库以后,会产生一些日志文档。数据库管理员为了安全等方面考虑,需要定期对这些日志进行清理。此时数据库管理员可能要求Unix系统工程师让操作系统每天统计一下这些日志文件的大小,当这些文件的容量达到一定的数值时就能够自动通知数据库管理员让他进行处理。由于这个脚本程序中涉及到一个逻辑判断的问题,为此在返回的结果中只需要有最终的文件总大小即可。如果又有明细、又有总大小的话,反而不能够用来做逻辑运算符的参数。所以此时需要让某些输入源不起作用。类似的情况还有很多。如在编写磁盘限额管理工具时,当用户从网络上或者其他地方下载复制文件之前,先需要统计目标文件的总大小。如果目标文件的总大小要比可用的空间少的话,那么就直接拒绝,而不是等到放不下的时候再向用户说明。这就会浪费用户的时间。此时也只需要用到一个文件的总大小即可。

  二是需要过滤一些错误信息输入流。

      如在使用find命令查找文件的时候,如果需要查找的目录当前用户没有相关的权限,则系统提示一些错误信息。但是如果当用户的权限比较小而且用户又在整个操作系统内查找的话,则错误信息就会比较多,会影响用户的阅读。此时也需要让这些错误信息输入流不起作用。

  综上所述,在很多地方都需要让输入源不起作用。那么在Unix操作系统中是如何实现这个目标的呢?

  三、如何通过管道符让输入源不起作用?

  在Unix操作系统中,可以通过管道符来让某些输入源不起作用。Unix操作系统中的管道是指标准输入和标准输出的第三种源和目标。简单的说,管道符可以把标准输入流与标准输出流进行合并;或者把某个命令的标准输出流作为另外一个命令的标准输入流。而这个管道符跟其他命令结合使用的话,能够实现一些比较复杂的需求。

  如现在系统工程师想统计Oracle数据库目录下文本文件的大小,那么系统工程师就可以先切换到Oracle数据库的目录下,然后使用cat *.txt | wc ?c命令。这个命令就是通过管道符把两个基本命令结合起来,让操作系统显示文件总的大小。那么这个命令具体是如何实现这个功能的呢?

  首先,cat *.txt命令会把当前目录下所有txt文件进行合并。Cat命令主要用来读取文件的内容。这个命令可以同时打开多个文件。如果同时打开多个文件的话,则cat命令会把文件的内容进行合并。即把第二个文件的内容直接加入到第一个文件的后面。在中间的话不会加入任何提示符。虽然这对于阅读可能不怎么方便的,但是却最真实的反映出来了文件本身的内容,没有经过任何的修饰。

  其次管道符的作用就是把cat命令的标准输出流当作wc命令的一个标准输入流。而wc命令加上-c选项就是用来统计标准输入流的大小。所有这个命令就可以统计出Oracle目录下所有txt文件的大小,而不是统计每个文件的大小。也就是说起到了让某系输入源不起作用的目标。得到这个数值之后,系统工程师就可以通过IF判断语句或者其他命令来实现一些特定的目的。

  四、管道符的使用有哪些注意事项?

  管道符是Unix操作系统中的一个重要工具,是Windwos操作系统不具备的一个重大改进。众所周知,Unix操作系统在设计的时候,遵循的是小就是没的设计原则,每个命令只完成一些简单的功能。如上面这个例子中,Unix操作系统设计者完全可以在wc命令中加入一个参数,让wc命令只显示最终结果,而不显示明细。但是设计者却没有这么做。因为如果要这么处理的话,那么就需要给很多命令都加入这个选项。那就破坏了Unix操作系统小即是美的设计原则。为此Unix系统设计者推进系统工程师采用管道符把多个流合并起来,让一个命令的输出作为另一个命令的输入,来实现命令之间的组合。为此管道符是Unix操作系统中的核心。基本上每一个实用的脚本程序都能够看到管道符的存在。为此作为系统工程师,必须要了管道符的用法。根据笔者的经验,从理论上来说管道符很简单。在任何一本教科书上,对于管道符的介绍估计都不会超过五页。但是管道符的内容远远比这些书上说的要多。也就是说,系统工程师要用好管道符,主要是要靠日后工作中经验的积累。说句比较具有哲理的话,就是管道符的应用只可意会、不可言传。为此笔者觉得管道符的应用效果直接跟系统工程师的工作经验有关。为此笔者建议,大家要提高对管道符的认识的话,那么最好的方法就是去看一些过来人编写的脚本程序。从这些脚本程序中,系统工程师可以有不少的收获。笔者现在也经常看一些恐龙级专家所编写的程序,还往往能够从中学到一些管道符的应用经验。总之,从书本上基本上学不到管道符的高级技巧。要成为一个管道符应用的高手,夺取观摩专家写的程序是一个捷径。

  另外笔者再跟大家介绍一条管道符应用的基本规则。掌握这条规则无论是对于大家观摩其他人写的程序,或者是自己在用到管道符时都非常的有用。这条规则就是管道符左侧的命令必须使用标准输出,而右侧的命令必须使用标准输入。也就是说,系统工程师看到一个比较复杂的命令,有五六个管道符组成。此时不用慌,只需要从左到右一个个看下去即可。前一个命令是一个标准输出,其输出的结果就是下一个命令的输入参数,以此类推即可。

  通过管道符可以把一些简单的命令组合起来实现复杂的功能。为此有些专家也把Unix操作系统形象的比喻从搭积木的游戏。一个个小木块就是Unix操作系统的命令,如果把这些木块通过插口(管道符号)把他们组合成一个好看的模型玩具(负责的功能),这不仅要求用户有比较扎实的基本知识,了解各个命令的用法;而且还要求系统工程师具有一定的想象力。因为只有具有想象力,才能够把本来互不相关的命令结合起来,以完成一些复杂的功能。恐怕这也是Unix操作系统对于系统工程师提出的一个比较特殊的要求。其他开发语言或则操作系统对于这方面的要求估计都没有Unix操作系统这么强烈。为此系统工程师在使用管道符的时候,要具有创造性,要敢于尝试。

  为此笔者认为系统工程师在使用管道符的时候,要善于从其他专家的程序中取经、要善于想象,并遵循管道符应用的基本规则。只有如此,系统工程师才有可能成为管道符应用层面的专家。

  四、有否其他的解决方式?

  通过管道符可以让某些输入源不起作用。不过在Unix操作系统中还提供了一个特殊的文件,也可以实现过滤的作用。这个文件就是/dev/null文件。这是Unix操作系统中的一个特殊文件,其回接受任何流的输入,但是不会增加文件的大小。但是这个文件的用途远远没有管道符的作用大。通常情况下,如果用来过滤一些标准的错误信息,那么采用这个文件的话比较合适。在其他情况下如果要让输入源不起作用的话,那么笔者建议系统工程师利用管道符来实现。

 


推荐阅读
  • 本文介绍了adg架构设置在企业数据治理中的应用。随着信息技术的发展,企业IT系统的快速发展使得数据成为企业业务增长的新动力,但同时也带来了数据冗余、数据难发现、效率低下、资源消耗等问题。本文讨论了企业面临的几类尖锐问题,并提出了解决方案,包括确保库表结构与系统测试版本一致、避免数据冗余、快速定位问题等。此外,本文还探讨了adg架构在大版本升级、上云服务和微服务治理方面的应用。通过本文的介绍,读者可以了解到adg架构设置的重要性及其在企业数据治理中的应用。 ... [详细]
  • 禁止程序接收鼠标事件的工具_VNC Viewer for Mac(远程桌面工具)免费版
    VNCViewerforMac是一款运行在Mac平台上的远程桌面工具,vncviewermac版可以帮助您使用Mac的键盘和鼠标来控制远程计算机,操作简 ... [详细]
  • 本文详细介绍了华为4GLTE路由器B310的外置天线安装和设置方法。通过连接电源和网线,输入路由器的IP并登陆设置页面,选择手动设置和手动因特网设置,输入ISP提供商的用户名和密码,并设置MTU值。同时,还介绍了无线加密的设置方法。最后,将外网线连在路由器的WAN口即可使用。 ... [详细]
  • 本文讨论了前端工程化的准备工作,主要包括性能优化、安全防护和监控等方面需要注意的事项。通过系统的答案,帮助前端开发者更好地进行工程化的准备工作,提升网站的性能、安全性和监控能力。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • MyBatis错题分析解析及注意事项
    本文对MyBatis的错题进行了分析和解析,同时介绍了使用MyBatis时需要注意的一些事项,如resultMap的使用、SqlSession和SqlSessionFactory的获取方式、动态SQL中的else元素和when元素的使用、resource属性和url属性的配置方式、typeAliases的使用方法等。同时还指出了在属性名与查询字段名不一致时需要使用resultMap进行结果映射,而不能使用resultType。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 如何修改路由器密码?路由器登录密码和无线密码的修改方法
    本文介绍了修改路由器密码的两种方法:一是修改路由器登录口令,需要进入路由器后台进行操作;二是修改无线连接密码,通过进入路由器后台的无线设置和无线安全设置进行修改。详细步骤包括复位处理、登录路由器后台、选择系统工具、填入用户名和用户密码、保存修改等。 ... [详细]
  • 本文介绍了2019年上半年内蒙古计算机软考考试的报名通知和考试时间。考试报名时间为3月1日至3月23日,考试时间为2019年5月25日。考试分为高级、中级和初级三个级别,涵盖了多个专业资格。报名采取网上报名和网上缴费的方式进行,报考人员可登录内蒙古人事考试信息网进行报名。详细内容请点击查看。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 本文介绍了作者在开发过程中遇到的问题,即播放框架内容安全策略设置不起作用的错误。作者通过使用编译时依赖注入的方式解决了这个问题,并分享了解决方案。文章详细描述了问题的出现情况、错误输出内容以及解决方案的具体步骤。如果你也遇到了类似的问题,本文可能对你有一定的参考价值。 ... [详细]
  • 本文介绍了Java高并发程序设计中线程安全的概念与synchronized关键字的使用。通过一个计数器的例子,演示了多线程同时对变量进行累加操作时可能出现的问题。最终值会小于预期的原因是因为两个线程同时对变量进行写入时,其中一个线程的结果会覆盖另一个线程的结果。为了解决这个问题,可以使用synchronized关键字来保证线程安全。 ... [详细]
  • 有没有一种方法可以在不继承UIAlertController的子类或不涉及UIAlertActions的情况下 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 本文介绍了如何使用python从列表中删除所有的零,并将结果以列表形式输出,同时提供了示例格式。 ... [详细]
author-avatar
小宇宇宙2502862273
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有