Linux的重定向、管道和xargs_第1页
Linux的重定向、管道和xargs_第2页
Linux的重定向、管道和xargs_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、我回电脑报论坛来,说实话,就是为了打发时间的。魔兽没动力了,人人没意思了,糗百堕落了。回来凑凑热闹而已。这几天比较闲,居然写上瘾了。前后时间比较长,这几天忙了,也因为举实际例子要慢慢想。个人主页: <-进去帮忙点广告啊,哈哈哈哈哈本文纯属原创,转载注明出处和作者。重定向、管道和xargs命令都是在命令之间传递数据的方式。Linux的最初的理念就是KISS,“Keep It Simple, Stupid!”的缩写。命令行命令都只做一样事情,但是要完成得非常出色。给我最深刻印象是tar命令。tar命令的目的只是将几个文件连接在一起组成一个大文件而已。而压缩的程序只能压缩单个文件。肯

2、定有人会有疑问,tar命令的-z和-j之类的参数也可以压缩啊。其实tar本身没有压缩代码,tar是通过调用外部的gzip、bzip2之类的压缩命令来完成工作的。KISS的理念得到了广泛的支持。好多Linux命令都只会做一件事情。而复杂的事情则需要通过各种命令的组合来完成。各命令之间的通信,除了中间临时文件以外,Linux还提供了管道来完成直接的数据传输。重定向可以将标准输入、标准输入或标准错误重定向到文件或设备(这里涉及到Linux另外一条设计理念,就是一切都是文件,设备都是文件)。xargs可以将标准输入的内容转变成命令的命令行参数。重定向在讲重定向之前,我想说说什么叫标准输入,标准输出和标

3、准错误。在Linux里,进程间通信(IPC)最基本的一种方法是通过管道(其他还有消息、共享内存等)。管道就像流水线一样,单向的,不用关心管道另外一边是谁。系统给每一个命令行程序默认三条管道与用户交互,就是标准输入,标准输出和标准错误。标准输入指的是用户按键盘给程序输入数据。标准输出是指程序正常打印给用户的信息,是打印到shell上的。标准错误跟标准输出在本质上是相同的,都是输出信息给用户。不同的是,两个管道是分开的,可以用来打印不同种类的信息,比如说标准错误通常用来打印错误信息。因为使用管道不用关心另外一边是谁,所以把管道接到别的地方,程序也不会知道。Linux用了这种特性来实现了管道的重定向

4、。默认情况,三个默认管道是跟用户交互的。因为在Linux下,每个命令都只做一件事情。有些情况下,用户想让程序跟程序之间交互通过默认管道交互,比如说想把一个命令的输出接到另外一个命令的输入里面。重定向的方法如下:> filename,重定向标准输出到文件,覆盖文件。>> filename,重定向标准输出到文件,追加模式。2> filename,重定向标准错误到文件。&> filename,重定向标准输入和标准错误到文件。相当于同时使用>和2>。(感谢yszzf友情提供)< filename,重定向标准输入自文件举个例子,在用find的时候,

5、有的目录不允许访问,find就输出很多行的错误,真正的搜索结果就看不到了。这时我会把标准错误重定向到空设备去。1. find / -name "filename" 2> /dev/null复制代码再比如在用gdb进行自动测试的时候,把命令写到一个文件里,然后送入gdb。1. gdb program < test_script.gdb复制代码管道管道的原理上面基本介绍清楚了。管道是让用户将不同程序间的标准输入、标准输出连接起来,而不单单是重定向到文件。用法是在命令间用“|”连接起来。app1 | app2我最常用的几个情况:1. 程序输出太多,用less慢慢看。1

6、. verbose_app | less复制代码2. 在程序输出里面进行搜索。一种方法可以送到less里面在用less搜索。这里用另外一个命令,grep。verbose_app | grep pattern# pattern是被搜索的内容。如果有空格,用双引号括起来。如果想使用扩展正则表达式,用grep -E。3. 因为在重定向了以后,被重定向的管道就不再打印到屏幕了。如果又想打印到文件,又想打印到屏幕,可以用tee命令verbose_app | tee filename | another_appxargs如果后面的程序必须要命令行参数,而不接受管道传参数,就要使用xargs。1. 先演示一

7、下原理。echo "arg1 arg2" | xargs app# 相当于app arg1 arg22. 用find或者ls查找文件,然后将所有文件tar了。3. 计算源文件行数。这里要用到一个叫wc的命令,是用来计算文件单词数、字符数和行数的。如果管道到wc的话,wc会将数据当做文本来进行计算。文件名只有从命令行传递find . ( -name "*.c" -o -name "*.h" -o -name "*.cpp" -o -name "*.hpp" -type f | xargs wc -l# 或者find . -type f | grep -E ".ch(pp?$" | xargs wc -l重定向的>,2>,<之类的原理是把标准输入等用新的管道来取代。我一开始是这样写的command >/dev/null 2>&1这样写的问题是,>已经将标准输出用null设备替换了,然后2>&1将标准错误接到“标准输出”上,而“标准输出”现在已经变成了n

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论