linux下的管道命令和xargs

linux的shell中经常会出现使用组合命令的情况。虽然过于复杂的功能还是要用shell脚本来实现。但是用一些常见的命令组合后直接使用,不但高效而且方便。可以理解为WIN下的快捷键,熟练使用后简直事半功倍。

shell中使用组合命令必不可少的是使用管道,这个东东本质上是一种IPC(网络摄像机,不是,划掉)(进程间通信)的方式。为什么使用组合命令的时候要用到它呢?要知道的是大多数shell中执行的命令的实体都是一个个精炼的小程序。

shell作为用户态与内核态沟通的窗口,这些精炼的小程序会使用简单几条系统调用来实现对用户来说操作系统的最基本功能。既然这些命令的本质依旧是程序,那么自然也是用输入和输出的。

通常单一的shell命令的输入往往是标准输入,而输出在没有重定位的前提下是标准输出(通常是屏幕)。而使用组合命令时,一种常见的情形是前一条命令的输出作为后一条命令的输入。而执行不同的两条命令,本质上是内存中运行的两个程序实体——进程。因此两个命令之间的数据传递,自然是需要采用进程间通信的方式。

管道——正是shell中最常见的进程间通信方式。其使用起来方便的一逼,“命令1 | 命令2”。这样就实现了将命令1的输出作为命令2的输入来执行。

还有一个问题是,既然shell命令本质依旧是程序实体,那么就像我们执行main函数时,总是要有函数入参的吧!shell命令的入参我们其实很熟悉,它通常被称作另外一个名字——命令参数。

那么在使用组合命令时,怎么讲前一条命令的执行结果作为后一条命令的入参呢?使用管道“|”是肯定不行的。因为其传递的是标准输入与输出,而非命令参数。因此需要使用“命令1 | xargs 命令2”来实现将命令1的输出作为命令2的命令参数的功能。

顺便一提,shell、下使用组合命令时,前后命令也不见得一定要有数据交流。因此,| ,&, ||, &&和>也是常见的命令间组合方式,具体使用请百度。

posted @ 2021-04-14 15:54  终有一刻和光同尘  阅读(190)  评论(0)    收藏  举报