如果您熟悉基本的Linux命令,您还应该了解输入和输出重定向的概念。我们都知道Linux命令的作用,它接受输入并为您提供输出。这里有一些重要的角色,我们今天将介绍这些角色。stdin、stdout和stderr当你运行一个Linux命令时,有三种数据流在其中工作:stdin:(标准输入,标准输入)是输入数据的来源。默认情况下,stdin是从键盘输入的任意文本,其流ID(streamID)为0;stdout:(标准输出,标准输出)是命令的输出。默认情况下,它会显示在屏幕上,它的流ID(streamID)为1;stderr:(标准错误,标准错误)是命令产生的错误信息(如果有的话)。默认情况下,stderr也会显示在屏幕上。它的流ID(streamID)是2。这些流包含存储在缓冲存储器中的明文数据。把它想象成水流,你需要一个水源,比如水龙头,用管道连接它,你可以把它储存在桶里(文件),你可以给你的植物浇水(打印)。如果需要,它也可以连接到另一个水龙头,即改变水流方向(重定向)。Linux中也有重定向这个概念。您可以将stdin、stdout和stderr从它们的原始目的地重定向到另一个文件或命令(甚至是像打印机这样的外围设备)。让我们来看看重定向是如何工作的,以及如何使用它。输出重定向第一种也是最简单的重定向形式是输出重定向,也称为标准输出重定向。默认情况下,命令的输出显示在屏幕上。比如我使用ls命令列出当前目录下的所有文件:[gliu@fedorawork]$lsappstxtnew.txtstatic-ip.txt通过输出重定向,可以将输出重定向到一个文件中。如果此输出文件不存在,shell将创建它。command>file比如我们把上面ls命令的输出保存到一个名为output.txt的文本文件中:[gliu@fedorawork]$ls>output.txt输出文件是预先创建的,所以输出的内容.txt文件是什么?我们用cat命令来看一下:[gliu@fedorawork]$catoutput.txtappstxtnew.txtoutput.txtstatic-ip.txt你有没有注意到它也包含了output.txt?将输出重定向到(output.txt)的文件是在运行预期命令之前创建的。为什么?因为它需要一个准备好输出的目的地,所以输出将被发送到那个目的地。添加而不是删除一个经常被忽视的问题是,如果您重定向到一个已经存在的文件,shell将首先删除该文件。这意味着输出文件的现有内容将被删除并替换为命令的输出。如果不想删除原来的内容,只想追加,可以使用>>重定向语法:command>>file可以在当前shell会话中禁用删除,使用set-C将输出重定向到一个文件,可以将输出的内容保存起来,以备后用;另外,如果输出内容过多,占用屏幕较大,将内容保存到文件中,更方便查看和分析,就像收集日志文件一样。管道重定向在介绍stdin重定向之前,我们先了解一下管道重定向,它比较常见,我们也会经常用到管道重定向。关于管道重定向,可以参考我们之前的文章:Linux中的管道是什么?管道重定向如何工作?使用管道重定向,您可以将一个命令的标准输出发送到另一个命令的标准输入。命令1|command2举个例子,如果我们想查看当前目录下的文件个数,可以使用ls-1(注意是数字1,不是字母L)来显示当前目录下的文件:[gliu@fedorawork]$ls-1appstxtnew.txtoutput.txtstatic-ip.txt我们知道wc命令是用来统计文件行数的,所以我们可以这样组合这条命令:[gliu@fedorawork]$ls-1|wc-l4使用管道,其中两个命令共享同一个内存缓冲区,第一个命令的输出存储在缓冲区中,然后用作下一个命令的输入。您将看到管道中最后一个命令的结果。这是显而易见的,因为前一个命令的标准输出被重定向到下一个命令,而不是打印到屏幕上。管道重定向或管道不限于只连接两个命令,您还可以连接多个命令,只要一个命令的输出可以用作下一个命令的输入即可。command_1|command_2|command_3|command_4注意stdout/stdin是一段数据,不是文件名一些Linux新手在使用重定向时会感到困惑,如果一个命令返回一组文件名作为输出,这些文件不能被name用作一个参数。例如,如果使用find命令查找扩展名为.txt的文件,则不能通过管道将找到的文件移动到新目录。你不能这样做:找到.-typef-name"*.txt"|mvdestination_directory这就是为什么我们经常看到find命令与exec或xargs命令结合使用的原因。这些命令可以将大量文本“文件名”转换为文件名,并且可以作为参数传递。寻找。-typef-name"*.txt"|xargs-t-I{}mv{}../new_dir关于find和exec或者xargs命令的组合可以参考我们之前的文章:find和exec命令的组合是一个强大的搜索工具如何使用xargsLinux中的命令输入重定向使用stdin重定向将文本文件的内容传递给终端命令:command
