Linux的重定向、管道和xargs.docx

  1. 1、本文档共2页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
我回电脑报论坛来,说实话,就是为了打发时间的。 魔兽没动力了,人人没意思了,糗百堕落了。回 来凑凑热闹而已。这几天比较闲,居然写上瘾了。前后时间比较长,这几天忙了, 也因为举实际例子 要慢慢想 个人主页: / --- 进去帮忙点广告啊,哈哈哈哈哈 本文纯属原创,转载注明出处和作者 重定向、管道和xargs命令都是在命令之间传递数据的方式。 Linux的最初的理念就是 KISS, Keep It Simple, Stupid!的缩写。命令行命令都只做一样事情,但是要完成得非常岀色。给我最深刻印象是tar 命令。tar命令的目的只是将几个文件连接在一起组成一个大文件而已。而压缩的程序只能压缩单个 文件。肯定有人会有疑问,tar命令的-z和-j之类的参数也可以压缩啊。其实 tar本身没有压缩代码, tar是通过调用外部的gzip、bzip2之类的压缩命令来完成工作的。 KISS的理念得到了广泛的支持。 好多Linux命令都只会做一件事情。而复杂的事情则需要通过各种命令的组合来完成。各命令之间的 通信,除了中间临时文件以外,Linux还提供了管道来完成直接的数据传输。 重定向可以将标准输入、 标准输入或标准错误重定向到文件或设备(这里涉及到Linux另外一条设计理念,就是一切都是文件, 设备都是文件)。xargs可以将标准输入的内容转变成命令的命令行参数。 重定向 在讲重定向之前,我想说说什么叫标准输入, 标准输岀和标准错误。在Linux里,进程间通信(IPC) 最基本的一种方法是通过管道(其他还有消息、共享内存等)。管道就像流水线一样,单向的, 不用 关心管道另外一边是谁。系统给每一个命令行程序默认三条管道与用户交互,就是标准输入,标准输 岀和标准错误。标准输入指的是用户按键盘给程序输入数据。 标准输岀是指程序正常打印给用户的信 息,是打印到shell上的。标准错误跟标准输岀在本质上是相同的, 都是输岀信息给用户。不同的是, 两个管道是分开的,可以用来打印不同种类的信息,比如说标准错误通常用来打印错误信息。因为使 用管道不用关心另外一边是谁,所以把管道接到别的地方,程序也不会知道。 Linux用了这种特性来 实现了管道的重定向。 默认情况,三个默认管道是跟用户交互的。 因为在Linux下,每个命令都只做一件事情。 有些情况下, 用户想让程序跟程序之间交互通过默认管道交互, 比如说想把一个命令的输岀接到另外一个命令的输 入里面。重定向的方法如下: file name,重定向标准输岀到文件,覆盖文件。 file name ,重定向标准输岀到文件,追加模式。 2 file name,重定向标准错误到文件。 file name ,重定向标准输入和标准错误到文件。 相当于同时使用 和2。(感谢yszzf友情提供) file name,重定向标准输入自文件 举个例子,在用find的时候,有的目录不允许访问,find就输岀很多行的错误,真正的搜索结果就看 不到了。这时我会把标准错误重定向到空设备去。 复制代码 1. find / -name filename 2 /dev/null 再比如在用gdb进行自动测试的时候,把命令写到一个文件里,然后送入 gdb。 复制代码 1. gdb program test_script.gdb 管道 管道的原理上面基本介绍清楚了。管道是让用户将不同程序间的标准输入、 标准输岀连接起来,而不 单单是重定向到文件。用法是在命令间用 “ I连接起来。 appl | app2 我最常用的几个情况: 程序输岀太多,用less慢慢看。 1. verbose_app | less 复制代码 在程序输岀里面进行搜索。一种方法可以送到less里面在用less搜索。这里用另外一个命令,grep。 verbose_app | grep patter n # pattern是被搜索的内容。如果有空格,用双引号括起来。如果想使用扩展正则表达式,用grep -E。 因为在重定向了以后,被重定向的管道就不再打印到屏幕了。如果又想打印到文件,又想打印到 屏幕,可以用tee命令 verbose_app | tee file name | ano ther_app xargs 如果后面的程序必须要命令行参数,而不接受管道传参数,就要使用 xargs。 先演示一下原理。 echo arg1 arg2 | xargs app #相当于 app arg1 arg2 用find或者ls查找文件,然后将所有文件 tar 了。 find . -type f | xargs tar -cvzf output.tar.gz 计算源文件行数。这里要用到一个叫 wc的命令,是用来计算文件单词数、字符数和行数的。 如果 管道到wc的话,wc会将数据当

文档评论(0)

niupai11 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档