云网牛站
所在位置:首页 > Linux命令 > 命令行快速提示:在Fedora系统中使用管道(pipes)连接工具

命令行快速提示:在Fedora系统中使用管道(pipes)连接工具

2019-08-31 10:04:58作者:叶云稿源:云网牛站

Linux最强大的概念之一是从其前身UNIX开始的,您的Fedora系统有许多有用的单用途实用程序,可用于各种简单操作,与构建块一样,您可以以创造性和复杂的方式附加它们,管道(pipes)是这个概念的关键。但是,在听说管道(pipes)之前,了解输入和输出的基本概念是有帮助的,Fedora系统中的许多实用程序都可以对文件进行操作,但是他们经常可以获取未存储在磁盘上的输入,您可以将输入自由地流入流程,例如实用程序作为其标准输入(有时也称为stdin)。同样,默认情况下,工具或流程可以向屏幕显示信息,这通常是因为其默认输出连接到终端,您可以将流程的自由流动输出视为​​其标准输出(或stdout — go figure!)。

命令行快速提示:在Fedora系统中使用管道(pipes)连接工具

 

标准输入和输出的示例

通常在运行工具时,它会输出到终端,以seq工具为例,这个简单的序列命令:

$ seq 1 6

1

2

3

4

5

6

输出只是计算从1到6的整数,每行一个数字,进入屏幕,但您也可以使用>字符将其发送到文件,shell解释器使用此字符表示“将标准输出重定向到名称跟随的文件(redirect standard output to a file whose name follows)”。因此,此命令将输出放入名为six.txt的文件中:

$ seq 1 6 > six.txt

请注意屏幕上没有任何内容,您已将ouptut发送到文件中,如果运行命令cat six.txt,则可以验证。

您可能还记得以前的文章中使用grep命令的简单方法(参考:在Linux系统下使用grep命令搜索文件的详细用法),您可以通过简单地声明文件名来要求grep在文件中搜索模式,但这只是grep中的一个便利功能,从技术上讲,它是为了获取标准输入而构建的,并进行搜索。

shell使用<字符类似意味着“从名称跟随的文件重定向标准输入(redirect standard input from a file whose name follows)”,所以你也可以这样在文件six.txt中搜索数字4:

$ grep 4 < six.txt

4

当然,默认情况下,此处的输出是具有匹配项的任何行的内容,因此grep在文件中找到数字4并将该行输出到标准输出。

 

引入管道(pipes)

现在想象一下:如果您使用一个工具的标准输出,而不是将其发送到终端,那么您将其发送到另一个工具的标准输入中会怎么样?这是管道的本质。

你的shell使用垂直条字符|表示两个命令之间的管道,您可以在反斜杠\字符上方的大多数键盘上找到它,它的使用方式如下:

$ command1 | command2

对于大多数简单的实用程序,您不会在command1上使用输出文件名选项,也不会在command2上使用输入文件选项。(但是,您可以使用其他选项)而不是使用文件,您将command1的输出直接发送到command2,您可以根据需要连续使用多个管道,从而连续创建多个命令的复杂管道。

这个示例结合了上面的命令:

$ seq 1 6 | grep 4

4

seq命令输出整数1到6,一次一行,grep命令逐行处理输出,在数字4上搜索匹配,并输出任何匹配的行。

这是一个稍微有用的例子,假设您想知道TCP 22端口(ssh端口)是否在您的系统上打开,您可以通过查看其丰富的输出,使用ss命令*找到它,或者你可以找出它的过滤语言并使用它,或者你可以使用管道,例如,通过grep管道查找ssh端口标签:

$ ss -tl | grep ssh

LISTEN  0    128     0.0.0.0:ssh       0.0.0.0:*

LISTEN  0    128     [::]:ssh          [::]:*

注:那些熟悉古老的netstat命令的读者可能会注意到它已经过时了,参考用ss、netstat、lsof、fuser、nmap、systemctl看进程占用的端口号

这比阅读多行输出容易得多,当然,您可以组合重定向器和管道,例如:

$ ss -tl | grep ssh > ssh-listening.txt

 

相关主题

在Linux中下载及安装Ultimate Plumber浏览管道命令结果

Linux命令子频道
精选文章
热门文章