linux的输入、输出重定向是什么?怎么理解?输入、输出和管道符有什么关系?

IT人常常听到输入输入出(I/O:information input \ information out)这两个词汇。其实这个输入输出流是相对于信息而言的(信息的别名就是数据,常常也称之为数据流)。信息流就是信息传输流,流就是信息传输的过程,将这个过程唤作'流'。

目录

本文理解要点:

一、什么是输入、输出流(I/O)

二、linux中的输入输出流(I/O)

三、linux输出重定向">"

四、管道符("|")和输入输出重定向(">"、">>"、"<")之间的关系


本文理解要点:

  1. 理解什么是信息
  2. 理解什么是数据
  3. 理解重定向描述的是什么
  4. 理解管道符描述的是什么
  5. 理解计算机就是一个处理信息的逻辑体

一、什么是输入、输出流(I/O)

很多时候我们是怎么获取到信息的?是不是只有一个信息流我们接收(或者叫感受到了)就算获取到信息了吧?那么这就是信息传输到你这里来了,计算机将这个过程唤作输入。

例一、我们在计算机中打开别人的world文档的时候,其实就是计算机获取信息的过程。当我们双击查看别人的world文档的时候,计算机就要去获取文档中的信息,然后将这些信息读取到屏幕上,然后我们就可以看到了。当屏幕显示出文档信息的时候,这个信息就传输到你的眼睛里去了。这时候信息相对于我们来说是不是就是传入到我们这里来了,也就是信息向着我们来了。计算机中将信息传输过来的过程就叫输入。

现在我们将宏观上的视角切换到计算机上。

例二、计算机将数据储存到硬盘上,就是将信息传输到硬盘上储存,这个信息的储存在硬盘上的过程就是数据(信息)输出(information out)。硬盘相对于信息而言,就是信息到硬盘这里来,然后硬盘接收,就是信息输入流,就叫信息(数据)输入(information input)。

linux的输入、输出重定向是什么?怎么理解?输入、输出和管道符有什么关系?_第1张图片 信息输出

所以,cpu将处理好的新信息传输到屏幕上,就叫输出到屏幕,这时候屏幕将信息显示出来。其实这个信息传输过程相对于屏幕而言,就是信息输入到屏幕。那我们为什么平常时候说的是输出到屏幕呢。因为所有的话语都是以cpu为中心的----信息也不例外。所以以电脑cpu为信息处理中心,将信息传入到cpu的过程都叫输入,cpu将信息处理完毕输出处理的过程都叫输出。那大概说到这里应该能明白键盘、鼠标为什么叫输入设备了吧。

二、linux中的输入输出流(I/O)

也许你听到过或者知道,linux中所有的设备都是以文件的形式来管理的。

那么我们最常最常使用的设备大概就是屏幕了。那么你想过没有。命令行中你输入的命令为什么屏幕会弹出相应的提示?因为程序将执行后的信(数据)都输出到屏幕了。这时候的屏幕就是一个文件,将信息输出到文件,文件再显示出来。

这时候我们可以修改程序的信息输出到其他文件或设备中(输出重定向)。所以输出重定向就是将数据流(信息流)传输到指定的文件中去(或者叫非默认设备中去---这个非默认设备是自己定义的)。通过">"或">>"符号更改命令修改实现输出重定向。如果不使用">"命令更改命令的输出设备(设备均是文件),那么命令(程序)执行后就输出到我们的屏幕这个设备文件中,所以我们可以通过">"这个方式来改变程序输出流。

再者就是输入重定向了:"<"、"<<",不同于输出重定向的是,输入重定向的是将重定向符号后面的程序作为前一个程序(命令)的输入。

通常一个命令中同时存在输入和输出重定向符号的时候,先执行输入重定向命令。如下命令

#ls > /tmp/test < / #该行命令就表示将/输入重定向到ls命令后面的参数的输入
#ls / > /tmp/test   #该命令中ls 后面的/就是ls程序的参数,然后通过>输入到/tmp/test文件中去

 

三、linux输出重定向">"

假设我们当前的工作目录在/目录下,比如我要将执行"ls"命令输出的结果传输到/tmp/test文件中去,那么通过">"符号就可以实现:

#ls > /tmp/test #用ls将当前目录下面的文件列表以一定格式的方式输出到/tmp/test文件中去

 

被重新定义输出的程序在屏幕没有任何显示 被重新定义输出的程序在屏幕没有任何显示

执行了上述命令后。我们使用如下命令查看/tmp/test中的结果。

#cat /tmp/test #该命令用于查看/tmp/test文件中的内容

 这时候我们可以看到/tmp/test文件中的内容就是根目录(/)下面的文件或文件夹的名字.

linux的输入、输出重定向是什么?怎么理解?输入、输出和管道符有什么关系?_第2张图片 ls命令结果

我们可以验证一下我们使用ls命令查看/目录下面的的文件名字是不是都是这些:

ls命令验证输出 ls验证输出

所以,现在你是否明白了?ls是一个命令或者程序,用于查询指定位置的文件列表,这些文件的列表(清单)就是信息啊。然后ls命令查询出来后(具体查询过程忽略)就将结果输出到命令行(输出到命令行是所有需要有与用户交互的程序的默认输出设备)。之前我们通过">"命令将ls的返回(输出)的信息传输到了/tmp/test文件中,所以我们在使用以下命令的时候没有任何输出,因为输出都被我们指定到了/tmp/test文件中去了

#ls > /tmp/test
使用重定向后屏幕没有显示ls应该输出的信息 使用重定向后屏幕没有显示ls应该输出的信息

 输出重定向有两种情况,就是输出追加">>"和输出覆盖">",以及输入重定向"<"、"<<",具体用法在现在基础理论之上。所以更多的骚操作还要自己去发掘。本文只作为基础讲解什么是输入输出。

四、管道符("|")和输入输出重定向(">"、">>"、"<")之间的关系

管道符的定义:将前面程序的输出结果 作为 管道符后面 程序的输入。其实这里就说明了其实是管道符存在的意义跟输入输出重定向的意义是一样的。不过管道符有条件,不是管道符前面程序的什么输出都可以作为管道后面的输入(来自百度经验):

1.管道命令只能处理前一个命令的标准输出,而不能处理标准错误

2.管道命令右边命令必须能够接收标准输入

管道符通常用于处理前面一个命令有大量屏幕输出,管道符后通常使用grep命令进行信息筛选、过滤。管道符是继输入输出重定向之后新的使用方法(新的特性),到现在也经久不衰。

 

 

 

 

 

 

 

 

你可能感兴趣的:(linux)