管道:在GNU / Linux中开始使用它们所需要了解的内容

管道

管道或点子e实际上是可用于UNIX / Linux的管道,非常实用。 但是要完全理解管道是什么,您应该知道在* nix环境中它具有3个内置数据流。 对于那些不知道的人来说,这意味着数据可以往返于三点。

然后,您将更好地理解这一点,但现在我想向您说明的是,使用管道可以将这些点之一引导到其他点。 这允许携带程序抛出的输出或结果,以使之使用另一个程序的输入,依此类推。 我将尝试通过一些实际的例子来解释它,以帮助您很好地理解它。

我在谈论的那些要点或 数据流,分别是:

  • 标准输入:对应于0,是标准输入。 通常,* nix系统的标准输入是键盘。 也就是说,您键入的将是所使用的信息。 她有一个与之相关的特殊设备,即/ dev / stdin。
  • 标准输出:用1标识,它是标准输出。 通常,它对应于计算机的监视器或屏幕,您可以在其中查看信息。 例如,当您运行ls命令时,目录列表将显示在屏幕上,对吗? 关联的设备是/ dev / stdout。
  • 斯特德:用2标识,它是标准错误输出,用于程序中发生错误时。 关联的设备是/ dev / stderr。

使用管道,您可以使一个命令的标准输出或标准输出直接传递到另一命令的标准输入。 也就是说,您可以使一个程序提要另一个。 管道不使用键盘输入的参数,而是通过|表示的管道传递前一个命令生成的信息。

连接器 例子 您会更好地了解它。 假设您要列出目录的内容,但是您只想查看与单词doc匹配的名称。 因此,您可以使用管道将ls的输出通过管道传递到grep过滤器的输入中,以告诉它仅显示与该模式匹配的输出:

ls -l | grep doc

因此,与其显示所有名称,不如显示您的名字 那些你真正感兴趣的。 您可以对文件的内容执行相同的操作。 想象一下,您只想查看名为firefox的进程的信息,而不是全部信息:

ps aux | grep firefox

它没有将ps程序的所有输出显示在屏幕上(stdout),而是将其引导至grep过滤器的输入,并且在这种情况下仅在输出中显示了与firefox模式相对应的内容...

如果需要,可以使用 各种管道 将一个命令的输出带到另一个第二个命令的输入,并将第二个命令的输出带到另一个第二个命令的输入,依此类推。 例如:

cat libro | grep love | more

如你所见, 可能性很多,您可以想象并允许的所有内容。 甚至只显示文件的第一行和最后一行,计算列表中进入wc的行,甚至对它们进行排序:

cat listado | head
cat listado | tail
cat listado | wc -l
cat listado | sort

您也可以与 |&错误 例如,如果脚本输出失败,请在该脚本的输出中查找单词alert:

./miscript |& grep alerta 

最后,有两个与管道紧密相关的命令 tee和xargs 并且它们可以进一步扩展这些可能性。 对于tee,它允许在标准输出上显示前一个程序的结果,以便您可以看到它,除此之外,它还可以将它通过管道传输到另一个文件。 一个例子是,如果您列出目录的内容,并且希望现在看到ls -l的输出,并且也将其保存在文件listing.txt中:

ls -l | tee listado.txt

如果您不使用tee,您将无法在控制台上看到输出输出...

Y 参数 在某些情况下甚至更有趣。 在这种情况下,它能够根据通过管道接收到的标准输入来构建命令。 换句话说,它能够捕获先前程序通过其输出启动的所有内容,并通过管道到达xargs的所有内容,然后依次将其作为参数传递给另一个命令。

还是不明白吗? 您将通过一个示例更好地看到它。 假设您要从目录,磁盘或分区中删除所有该死的thumbs.db文件。 如果有很多,可能无法使用rm命令一步一步地手动删除它们。 但是,使用xargs可以使所有操作自动化。 您可以使用find来找到它们,通过xargs的输入发送输出,这将为rm提供名称作为参数。 因此,所有找到的将被自动删除:

find ./ -name "thumbs.db" | xargs rm

例如,假设find找到/home/name/thumbs.db、/media/test/thumbs.db和/tmp/thumbs.db。 好吧,xargs会将它们作为参数传递给rm。 也就是说,就像我们已经执行过一样:rm /home/name/thumbs.db,然后rm /media/test/thumbs.db,然后rm /tmp/thumbs.db。


本文内容遵循我们的原则 编辑伦理。 要报告错误,请单击 信息.

3条评论,留下您的评论

发表您的评论

您的电子邮件地址将不会被发表。 必填字段标有 *

*

*

  1. 负责资料:AB Internet Networks 2008 SL
  2. 数据用途:控制垃圾邮件,注释管理。
  3. 合法性:您的同意
  4. 数据通讯:除非有法律义务,否则不会将数据传达给第三方。
  5. 数据存储:Occentus Networks(EU)托管的数据库
  6. 权利:您可以随时限制,恢复和删除您的信息。

  1.   何塞

    太好了,这个信息对我们Linux用户来说非常重要

  2.   丹尼尔

    现在,我正在Linux命令行书中学习I / O重定向,这是一篇不错的文章。 对于管道(管道)和三个数据流,这对我来说更清楚。 感谢您的贡献。 问候。

  3.   01101001b

    带有xargs的示例像手套一样适合我。 正是在今天,我正在处理必须“部分”发送的多次退出的细节。 xargs走了pinturita。
    超级感谢!