前言
文章的内容来源拉钩教育上的课程学习,通过写博客的方式,更好的提高对该知识的掌握。
一、进程是什么?
- 应用的可执行文件是放在文件系统里,把可以执行文件启动,就会在操作系统里面(具体是内存)形成一个应用副本,这个副本就是进程。
什么是进程?
进程是应用的执行副本;而不要回答是操作系统分配资源的最小单位,前者是定义,后者是作用。
- ps
如果要看当前的进程,可以使用ps指令。p代表的是processes,s代表的是snapshot,快照。
-
上图,启动两个进程,ps和bash。ps就是我刚刚启动的,被ps自己捕捉到;bash是因为我开了这个控制台,操作系统上不可能只有这么几个进程,这是因为不带任何参数的ps指令显示的是一个电传打字机(TTY)的进程。TTY这个概念是一个历史概念,过去用来传递信息,现在被传真 、邮件、微信等取代。
-
操作系统的TTY是一个输入输出终端的概念,用户打开一个bash,操作系统就为用户分配了一个输入输出终端。没有加任何参数的ps只显示在同一个TTY的进程。
-
·UID指进程的所有者
·PID是进程的唯一标识
·PPID是进程的父ID
·C是CPU的利用率
·STIME是开始时间
·TTY是进程所在的TTY,如果没有就是?号
·CMD是进程启动时的命令,如果不是一个shell命令,而是用方括号括起来,那就是系统进程和内核过程
- top
数据实时更新
二、管道
-
管道的作用是在命令和命令之间,传递数据。如一个命令的结果,就可以作为另一个命令的输入。更准确的说管道在进程间传递数据。
-
输入输出流
每个进程拥有自己的标准输入流、标准输出流、标准错误流。- 标准输入流(用0表示)可以作为进程执行的上下文(进程执行执行可以从输入流获取数据)
- 标准输出流(用1表示)中写入的结果会被打印到屏幕上。
- 如果进程在执行过程中发生异常,那么异常信息被记录到标准错误流上(用2表示)
-
重定向
我们指定一个文件,如 ps -ef,结果会写入标准输出流,进而被打印。这时可以通过重定向符将结果重定向到另一个文件如ps -ef >./out,这样out文件中就会有ps -ef的结果;屏幕上也不会打印ps -ef 的结果。
- 具体来说 >符号叫做覆盖重定向 ;>> 叫做追加重定向。> 每次都会把目标文件覆盖,>>在目标文件夹中追加。
- 当输入命令不存在的时候,结果是不会存入out文件,结果会输出到标准错误流上,仍在屏幕上,这时我们可以把标准错误流重定向到标准输出流,然后再重定向到文件。
lsl &> /home/out
等价于
lsl > out 2> &1
-
管道作用和分类
有了进程和重定向的知识,我们来梳理管道的作用。管道(Pipeline)将一个进程的输出流定向到另一个进程的输入流,就像水管一个,作用就是把两个文件连接起来。如果一个进程输出一个字符x,那么另一个进程获得x这个输入。
管道和重定向很像,但是管道是一个连接一个计算,重定向是将一个文件的内容定向到另一个文件,这两者经常会结合使用。
Linux中的管道也是文件,有两种类型的管道
1.匿名管道,这种管道也在文件系统中,但是它只是一个存储节点,不属于任何一个目录。
2.命名管道,这种管道就是一个文件,有自己的路径。 -
FIFO
管道具有FIFO(First in First out),FIFO 和排队场景一样,先排到的先获得。所以先流入管道文件的数据,也会先流出去传递给管道下游的进程。
三、场景分析
-
排序
如我们使用ls,希望文件名排序倒序,可以使用管道,将ls的结果传递sort指令去排序。
-
去重
如一个字典文件,里面都是词语。
-
筛选
有时候我们根据正则模式筛选对应的内容。如我们要搜索 /home 目录下 所有文件 含有a文件名的文件。就可以用grep指令
find ./ | grep a
-
数行数
可以通过wc -l 统计一个文件内的行数
统计当前目录下文件夹的个数
-
tee
管道一个接着一个,是一个逻辑运算。有时候我们想要把中间结果保存下来,这需要用tee的指令。tee指令从标准输入流读取到标准输出流。
tee本身不影响指令,但是tee会把find的结果输出到result中。tee 这个执行就像英文字母中的T一样,连接管道两端,下面又开了口,在函数编程里面叫做副作用。 -
xargs
-
xargs指令从标准数据流中构造并执行一行行的指令。xrags从输入流获取字符串,然后利用空白、换行符等切割字符串,在这些字符串的基础上构造指令,最后一行行执行这些指令。
举个例子,我们要重命名当前目录下所有文件,想在前面添加一个前缀day1_,如1.txt要改为day1_1.txt 我们可以通过 xrags进行操作
-
ls | xargs - I GG echo "mv GG day1_GG"
·ls 找到所有文件
·-I 参数是查找替换符 ,这里我们用GG代替ls找到的结果;-I GG 后面的字符串会被替换为ls找到的结果
·echo 是一个在命令行打印字符串的指令。使用echo 主要是为了安全,帮助我们检查是否有错误。
我们用xargs构造了三条指令。如果没有用xargs指令,而是一条条命令去敲,这样就构成了样板代码。
-
xargs指令的作用
【解析】 xargs 将标准输入流中的字符串分割成一条条子字符串,然后再按照我们自己想要的方式构建成一条条指令,大大拓展了 Linux 指令的能力。