再见西城 发表于 2015-1-16 16:11:00

来讲讲:Linux体系下管道被承受方封闭的成绩

功能实在太强了,在配合exec参数或者通过管道重定向到xargs命令和grep命令,可以完成非常复杂的操作,如果同样的操作用图形界面的工具来完成,恐怕要多花十几陪的时间。
Linuxshell中的管道|长短常便利的功效,能够将一个程序的输入作为别的一个程序的输出,如许我们能够将多个命令“拼”在一同,省往了一时文件的烦琐。windows中也有相似的用法,好比dir|more,学过dos命令的应当都晓得吧。
既然是管道,那末就有一个出口和一个出口,各自对应一个使用程序,一般的情形下,出口使用程序的输入应该被出口使用程序全体承受,但在一些特别情形,出口使用程序会提早封闭管道,好比在查询svn的更新日记,只取前己行的时分:
$svnlog|head
----------------
r137|Fwolf|2007-05-2813:38:47+0800(Mon,28May2007)|4lines
更新纪录。
svn:Writeerror:Brokenpipe
因为head只必要用到输出的前10行(默许行数,也可由用户指定),再吸收剩下的输入也是过剩,便提早封闭了管道,管道出口的使用程序svn发明以后,便报错加入了。在这个例子中,毛病信息十分分明,但不是一切使用程序都如许的,好比上面这个:
$find.-name"*rc"|xargs-icat{}|head-1

xargs:cat:terminatedbysignal13
毛病信息仿佛其实不太好了解,实践上它的意义是:xargs发明它的子历程cat因为旌旗灯号13被中断了。因为xargs自己属于轮回操纵,发明毛病以后就中断了轮回,这是其一;旌旗灯号13是在cat试图向一个已封闭的pipe管道中写数据的时分,体系发生的,cat收到以后就中断了。相似于在cat输入的过程当中,用户按下ctrl+c的效果。
怎样制止这类成绩呢?很复杂,管道前面利用不会提早封闭管道的程序便可,特别是分离xargs利用的时分,它发明堕落就不持续了。好比要用到head能够如许:
$catfile|head-1
固然cat仍旧会被signal13封闭,但bash是不会报错的,以是也只能针对一个文件举行操纵,即便是利用了通配符也只能head到第一个文件。假如要加上对文件的遍历,能够用到for:
$forfilein.*rc;docat$file|head-1;done
cat仍然会被封闭,可是for不会剖析它,持续轮回。head也能够间接指定文件名,如许我们就能够抛开cat了:
$find.-name"*rc"|xargs-ihead-n1{}
团体以为这是一种最完善的办理体例,便可以用到find壮大的搜刮指令,还不会触及到管道的成绩。不外假如文件名没有甚么特别请求,另有一种更复杂的体例:
$head-n1.*rc
在head的参数中间接用通配符指定文件

</p>
虽然Linux桌面应用发展很快,但是命令在Linux中依然有很强的生命力。Linux是一个命令行组成的操作系统,精髓在命令行。

分手快乐 发表于 2015-1-18 16:31:11

我是学习嵌入式方向的,这学期就选修了这门专业任选课。

莫相离 发表于 2015-1-22 22:40:44

任何一个叫做操作系统的东西都是这样子构成的:内核+用户界面+一般应用程序。

若天明 发表于 2015-1-31 14:17:29

Windows?是图形界面的,Linux类似以前的?DOS,是文本界面的,如果你运行了图形界面程序X-WINDOWS后,Linux?也能显示图形界面,也有开始菜单、桌面、图标等。

admin 发表于 2015-2-6 19:51:57

可以说自己收获很大,基本上完成了老师布置的任务,对于拔高的题目没有去做,因为我了解我的水平,没有时间和精力去做。?

冷月葬花魂 发表于 2015-2-18 11:51:35

熟悉操作是日常学习Linux中的三大法宝。以下是作者学习Linux的一些个人经验,供参考:

深爱那片海 发表于 2015-3-6 07:07:45

甚至目前许多应用软件都是基于它的。可是没有哪一个系统是十分完美的。

不帅 发表于 2015-3-12 22:23:22

然我们对Linux的学习首先是通过对它的产生,发展,到今天仍然在不断完善开始的。

透明 发表于 2015-3-20 04:20:34

Linux只是个内核!这点很重要,你必须理解这一点。只有一个内核是不能构成一个操作系统的。
页: [1]
查看完整版本: 来讲讲:Linux体系下管道被承受方封闭的成绩