如何在linux上使用管道

使用Linux管道编排命令行实用程序如何协作。通过利用一组独立命令并将它们转化为一个专注的团队,简化复杂的流程并提高生产率。我们教你怎么做。...

使用Linux管道编排命令行实用程序如何协作。通过利用一组独立命令并将它们转化为一个专注的团队,简化复杂的流程并提高生产率。我们教你怎么做。

到处都是管道

管道是Linux和类Unix操作系统最有用的命令行特性之一。管道的使用方式不计其数。看看任何网站上的任何Linux命令行文章,不仅仅是我们的,您会发现管道出现的频率比没有出现的频率要高。我回顾了How To Geek的一些Linux文章,它们中都以某种方式使用了管道。

Linux管道允许您执行shell不支持的开箱即用操作。但是,由于Linux的设计理念是让许多小型实用程序能够很好地执行它们的专用功能,而且没有不必要的功能“做一件事,把它做好”的口号,因此您可以将命令字符串与管道连接在一起,以便一个命令的输出成为另一个命令的输入。你的每一个命令都会给球队带来独特的天赋,很快你就会发现你已经组建了一支获胜的队伍。

一个简单的例子

假设我们有一个目录,里面有许多不同类型的文件。我们想知道那个目录中有多少特定类型的文件。有其他方法可以做到这一点,但是本练习的目的是引入管道,所以我们将使用管道来实现。

我们可以使用ls轻松获得文件列表:

ls

如何在linux上使用管道

为了区分感兴趣的文件类型,我们将使用grep。我们想找到文件名或文件扩展名中有“页”这个词的文件。

我们将使用shell特殊字符“|”将ls的输出通过管道传输到grep中。

ls | grep "page"

如何在linux上使用管道

grep打印出与其搜索模式匹配的行。所以这给了我们一个只包含“.page”文件的列表。

如何在linux上使用管道

即使是这个微不足道的例子也显示了管道的功能。ls的输出没有发送到终端窗口。它作为grep命令使用的数据发送给grep。我们看到的输出来自grep,它是这个链中的最后一个命令。

延伸我们的链条

让我们开始扩展管道命令链。我们可以通过添加wc命令来计算“.page”文件。我们将在wc中使用-l(行计数)选项。注意,我们还为ls添加了-l(长格式)选项。我们很快就会用到这个。

ls - | grep "page" | wc -l

如何在linux上使用管道

grep不再是链中的最后一个命令,因此我们看不到它的输出。grep的输出被输入wc命令。我们在终端窗口中看到的输出来自wc。wc报告目录中有69个“.page”文件。

让我们再扩展一下。我们将从命令行中删除wc命令并用awk替换它。ls的输出中有9列带有-l(长格式)选项。我们将使用awk打印第五列、第三列和第九列。这些是文件的大小、所有者和名称。

ls -l | grep "page" | awk '{print $5 " " $3 " " $9}'

如何在linux上使用管道

对于每个匹配的文件,我们会得到这些列的列表。

如何在linux上使用管道

现在我们将通过sort命令传递该输出。我们将使用-n(数字)选项让sort知道第一列应该被视为数字。

ls -l | grep "page" | awk '{print $5 " " $3 " " $9}' | sort -n

如何在linux上使用管道

输出现在按文件大小顺序排序,我们自定义选择了三列。

如何在linux上使用管道

添加其他命令

最后我们将添加tail命令。我们将告诉它只列出最后五行输出。

ls -l | grep "page" | awk '{print $5 " " $3 " " $9}' | sort -n | tail -5

如何在linux上使用管道

这意味着我们的命令会转换为类似“show me the five largest”.page“这个目录中的文件,按大小排序。”当然,没有命令可以完成这一点,但是通过使用管道,我们创建了自己的文件。我们可以将此命令或任何其他长命令添加为别名或shell函数,以保存所有键入的内容。

以下是输出:

如何在linux上使用管道

我们可以通过在sort命令中添加-r(reverse)选项,并使用head而不是tail从输出的顶部拾取行来反转大小顺序。

007Ys3FFgy1gp62qr8qd2j30hy025jrd

这一次,从大到小列出了五个最大的“.page”文件:

如何在linux上使用管道

最近的一些例子

这里有两个有趣的例子来自最近的How To geek文章。

有些命令(如xargscommand)被设计为将输入通过管道传输到它们。下面是一种让wc对多个文件中的单词、字符和行进行计数的方法,方法是将ls管道化到xargs中,然后xargs将文件名列表作为命令行参数传递给wc。

ls *.page | xargs wc

如何在linux上使用管道

单词、字符和行的总数列在终端窗口的底部。

如何在linux上使用管道

下面是一种获取当前目录中唯一文件扩展名的排序列表的方法,其中包含每种类型的计数。

ls | rev | cut -d'.' -f1 | rev | sort | uniq -c

如何在linux上使用管道

这里发生了很多事情。

  • ls:列出目录中的文件
  • rev:反转文件名中的文本。
  • 剪切:在指定分隔符“.”第一次出现时剪切字符串。在此之后的文本将被丢弃。
  • rev:反转剩余的文本,即文件扩展名。
  • 排序:按字母顺序对列表排序。
  • uniq:统计列表中每个唯一项的数目。

输出显示文件扩展名的列表,按字母顺序排列,每个唯一类型的计数。

如何在linux上使用管道

命名管道

我们可以使用另一种类型的管道,称为命名管道。前面示例中的管道是shell在处理命令行时动态创建的。创建、使用然后丢弃管道。它们是短暂的,不留痕迹。它们只在使用它们的命令运行时存在。

命名管道在文件系统中显示为持久对象,因此可以使用ls查看它们。它们是持久性的,因为它们将在计算机重新启动后继续存在,尽管此时其中的任何未读数据都将被丢弃。

命名管道一次被大量使用,以允许不同的进程发送和接收数据,但我已经很久没有看到它们以这种方式使用了。毫无疑问,有人在那里仍然使用他们的伟大效果,但我没有遇到任何最近。但是为了完整起见,或者只是为了满足你的好奇心,这里有一些你可以使用它们的方法。

命名管道是使用mkfifo命令创建的。此命令将在当前目录中创建一个名为“geek pipe”的命名管道。

mkfifo geek-pipe

如何在linux上使用管道

如果将ls命令与-l(长格式)选项一起使用,则可以看到命名管道的详细信息:

ls -l geek-pipe

如何在linux上使用管道

清单的第一个字符是“p”,表示它是一个管道。如果是“d”,则表示文件系统对象是一个目录,破折号“-”表示它是一个常规文件。

使用命名管道

我们用烟斗吧。我们在前面的示例中使用的未命名管道将数据立即从发送命令传递到接收命令。通过命名管道发送的数据将保留在管道中,直到读取为止。数据实际上保存在内存中,因此无论ls列表中是否有数据,命名管道的大小都不会发生变化。

在这个例子中,我们将使用两个终端窗口。我将使用标签:

# Terminal-1

在一个终端窗口和

# Terminal-2

在另一个,所以你可以区分他们。散列“#”告诉shell后面是一个注释,并忽略它。

让我们把前面示例的全部内容重定向到命名管道中。因此,我们在一个命令中同时使用未命名管道和命名管道:

ls | rev | cut -d'.' -f1 | rev | sort | uniq -c > geek-pipe

如何在linux上使用管道

看来不会有什么大的变化。但是,您可能注意到没有返回到命令提示符,因此发生了一些事情。

在另一个终端窗口中,发出以下命令:

cat < geek-pipe

如何在linux上使用管道

我们将命名管道的内容重定向到cat中,以便cat在第二个终端窗口中显示该内容。输出如下:

如何在linux上使用管道

您将看到在第一个终端窗口中返回到命令提示符。

如何在linux上使用管道

那么,刚才发生了什么。

  • 我们将一些输出重定向到指定的管道中。
  • 第一个终端窗口没有返回到命令提示符。
  • 数据一直保留在管道中,直到从第二个终端的管道中读取为止。
  • 我们在第一个终端窗口返回到命令提示符。

您可能认为可以在第一个终端窗口中将命令作为后台任务运行,方法是在命令末尾添加一个&amp;字符。你是对的。在这种情况下,我们会立即返回到命令提示符。

不使用后台处理的目的是强调命名管道是一个阻塞进程。将某物放入命名管道只会打开管道的一端。在读取程序提取数据之前,另一端不会打开。内核挂起第一个终端窗口中的进程,直到从管道的另一端读取数据。

管道的力量

如今,命名管道是一种新奇的行为。

另一方面,普通的老Linux管道是终端窗口工具箱中最有用的工具之一。Linux命令行开始为您带来活力,当您可以协调一组命令以产生一种内聚性能时,您将获得全新的动力。

临别提示:编写管道命令最好是一次添加一个命令并使该部分正常工作,然后在下一个命令中使用管道。

  • 发表于 2021-04-03 04:49
  • 阅读 ( 189 )
  • 分类:互联网

你可能感兴趣的文章

pipelight的终结:如何让它在linux上运行

... pipelight是如何被弃用的? ...

  • 发布于 2021-03-13 13:01
  • 阅读 ( 259 )

如何在linux中使用ls命令

如果您不知道如何使用ls命令,那么获取与存储上的文件相关的详细信息是很困难的。在这里,我们将讨论Linux上与ls命令相关的所有内容,以及它使用的一些不同的标志。 ...

  • 发布于 2021-03-26 18:01
  • 阅读 ( 186 )

如何在linux上使用seq命令

Linux seq命令可以在眨眼之间生成数字列表。但是如何将这个功能付诸实际使用呢?我们将向您展示seq如何为您带来便利。 seq命令 乍一看,Linux seq命令似乎有些奇怪。它可以让你快速生成数字序列,就这样!不过,这里的关键...

  • 发布于 2021-04-01 11:46
  • 阅读 ( 156 )

如何在linux上使用uniq命令

...行。在本指南中,我们将介绍它的多功能性和特性,以及如何充分利用这个漂亮的实用程序。 在linux上查找匹配的文本行 uniq命令是快速、灵活的,而且非常擅长它所做的事情。不过,与许多Linux命令一样,它也有一些怪癖,只...

  • 发布于 2021-04-02 16:25
  • 阅读 ( 192 )

如何在linux上使用grep命令

...列表(不考虑年份),按文件大小的升序排列。 相关:如何在Linux上使用管道 格雷普:少了指挥权,多了一个盟友 grep是一个非常好的工具,您可以随时使用。它可以追溯到1974年,现在仍然很强大,因为我们需要它所做的,没...

  • 发布于 2021-04-02 17:23
  • 阅读 ( 165 )

如何在linux上使用tail命令

...据。它甚至可以实时显示添加到文件中的更新。我们教你如何使用它。 他杀了尾巴吗? tail命令显示文件末尾的数据。通常,新数据会添加到文件的末尾,因此tail命令是查看文件中最新添加内容的一种快速简便的方法。它还可...

  • 发布于 2021-04-02 17:32
  • 阅读 ( 182 )

如何在linux上使用dmesg命令

...和术语。按less中的正斜杠“/”键启动搜索功能。 相关:如何在Linux上使用less命令 不再需要sudo 如果希望避免每次使用dmesg时都必须使用sudo,可以使用以下命令。但是,请注意:它允许任何拥有您的计算机用户帐户的人使用dmesg...

  • 发布于 2021-04-02 21:09
  • 阅读 ( 219 )

命令行:为什么人们还在为它们烦恼?

...它。你的脚本就会运行。 命令行是最小的公分母。学习如何使用它,无论Linux发行版和图形桌面环境如何,您都可以执行所需的所有任务。不同的桌面有自己的做事方式。不同的Linux发行版捆绑了各种实用程序和程序。 但是打开...

  • 发布于 2021-04-03 05:30
  • 阅读 ( 177 )

linux上的stdin、stdout和stderr是什么?

...出定向到/dev/null。 检测脚本中的重定向 我们讨论了命令如何检测是否有任何流被重定向,以及如何选择相应地改变其行为。我们能用自己的脚本来完成吗?是的,我们可以。这是一个很容易理解和运用的技巧。 在编辑器中键入...

  • 发布于 2021-04-03 06:21
  • 阅读 ( 236 )

如何在linux上使用xargs命令

...定的命令,它将默认使用echo。 我们可以用它来演示xargs如何总是生成一行输出,即使是从多行输入。 如果将-1(每行列出一个文件)选项与ls一起使用,则会得到一列文件名。 ls -1 ./*.sh 这将列出当前目录中的shell脚本文件。 ...

  • 发布于 2021-04-03 07:25
  • 阅读 ( 161 )
f857977146
f857977146

0 篇文章

相关推荐