Shell 不了解(管道)在unix中的用法

Shell 不了解(管道)在unix中的用法,shell,unix,pipe,Shell,Unix,Pipe,我正在我的大学学习“操作系统”考试,我很难理解管道的用法(|)。 以下是我在互联网上找到的一个例子: ps-ax | grep Finder 使用ps命令获取系统上运行的进程列表,并将该列表传递给grep以搜索包含“Finder”的行。(通常,它会找到两个:Finder和执行grepfinder的进程。) 如果我先写ps-ax,然后在下一行grep finder,会怎么样?它不会有同样的结果吗?为什么我要把它们连在一起 ps:unix shell命令的BigEnginer及其工作原理。unix是

我正在我的大学学习“操作系统”考试,我很难理解管道的用法(|)。 以下是我在互联网上找到的一个例子:

ps-ax | grep Finder
使用ps命令获取系统上运行的进程列表,并将该列表传递给grep以搜索包含“Finder”的行。(通常,它会找到两个:Finder和执行grepfinder的进程。)

如果我先写
ps-ax
,然后在下一行
grep finder
,会怎么样?它不会有同样的结果吗?为什么我要把它们连在一起


ps:unix shell命令的BigEnginer及其工作原理。

unix是一个基于文件的系统。除非您指定要重定向输出的位置,否则它将显示在屏幕上

因此,如果您键入
ps ax
,它将在屏幕上列出所有正在运行的进程。 因此,如果您先键入
ps ax
,然后键入
grep
,那么您将得到所有过程,然后您将得到错误,因为
grep
至少需要两个参数,
关键字
文件名

所以你必须做两个步骤

 ps ax > filename
 grep finder filename
这会给你结果

Pipe
|
将输出作为文件从左侧重定向到右侧命令。因此,您可以合并这两个步骤

因此,您可以说,
ps ax | grep finder
,而不是上述所有内容,它将把
ps ax
的输出作为文件传递给
grep
命令


注意,通过这种方式,您没有直接为
grep
指定文件名。相反,您告诉它使用
ps ax的输出作为文件

Unix是一个基于文件的系统。除非您指定要重定向输出的位置,否则它将显示在屏幕上

因此,如果您键入
ps ax
,它将在屏幕上列出所有正在运行的进程。 因此,如果您先键入
ps ax
,然后键入
grep
,那么您将得到所有过程,然后您将得到错误,因为
grep
至少需要两个参数,
关键字
文件名

所以你必须做两个步骤

 ps ax > filename
 grep finder filename
这会给你结果

Pipe
|
将输出作为文件从左侧重定向到右侧命令。因此,您可以合并这两个步骤

因此,您可以说,
ps ax | grep finder
,而不是上述所有内容,它将把
ps ax
的输出作为文件传递给
grep
命令


注意,通过这种方式,您没有直接为
grep
指定文件名。相反,您告诉它使用
ps ax的输出作为文件

否,在您上面提到的两种情况下,结果将不一样。试试看

ps-ax本身会将其结果发送到标准输出。
grep Finder本身根本不起作用


创建可用于进程间通信的单向数据通道。因此,
ps-ax | grep finder
,本质上是将
ps-ax
的输出作为输入流重定向到
grep finder
命令,该命令反过来搜索该流中的字符串“finder”。

不,在上述两种情况下,结果不相同。试试看

ps-ax本身会将其结果发送到标准输出。
grep Finder本身根本不起作用


创建可用于进程间通信的单向数据通道。因此,
ps-ax | grep finder
,本质上是将
ps-ax
的输出作为输入流重定向到
grep finder
命令中,该命令反过来在该流中搜索字符串“finder”。

这一切都是关于重定向输入和输出的

如果要键入
ps-ax>进程
,您将创建包含所有进程列表的文件
进程
。这是重定向输出。所有显示在屏幕上的数据都被写入一个文件

如果要键入
grepfinder
,您将在文件
processes
中搜索单词Finder。这是重定向输入

管道两者兼而有之。它在左侧重定向命令的输出,在右侧重定向命令的输入

$ ps -ax | grep Finder
就像

$ ps -ax > temp
$ grep Finder < temp
$ps-ax>temp
$grep Finder

除了在一行中没有要删除的临时文件之外,其他都是关于重定向输入和输出的

如果要键入
ps-ax>进程
,您将创建包含所有进程列表的文件
进程
。这是重定向输出。所有显示在屏幕上的数据都被写入一个文件

如果要键入
grepfinder
,您将在文件
processes
中搜索单词Finder。这是重定向输入

管道两者兼而有之。它在左侧重定向命令的输出,在右侧重定向命令的输入

$ ps -ax | grep Finder
就像

$ ps -ax > temp
$ grep Finder < temp
$ps-ax>temp
$grep Finder

除了一行中没有要删除的临时文件之外。

“如果我先写ps-ax,然后在下一行写grep finder,会不会有相同的结果?”你为什么不试试呢?我在电脑上运行putty是为了有一个类似unix的环境,目前我无法连接到它,有时会连接到它。当我可以的时候,我会尝试它。你也可以在像VirtualBox这样的虚拟机上运行Linux——如果你被迫使用Windows,这非常方便。“如果我先编写ps-ax,然后在下一行grep finder,会不会有相同的结果?”你为什么不试试呢?我在我的pc上运行putty,以获得一个类似unix的环境,目前我无法连接到它,有时会连接到它。当我可以的时候,我会尝试它。你也可以在VirtualBox这样的虚拟机上运行Linux——如果你被迫使用Windows,它会非常方便。