Linux入门之进程、重定向和管道指令

本文探讨了进程的本质,如何通过ps和top命令查看与管理,重点讲解了管道的工作原理、重定向的应用以及管道在排序、去重、筛选和计数等场景中的实践。此外,还介绍了FIFO、tee和xargs指令在Linux中的巧妙运用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

文章的内容来源拉钩教育上的课程学习,通过写博客的方式,更好的提高对该知识的掌握。

一、进程是什么?

  • 应用的可执行文件是放在文件系统里,把可以执行文件启动,就会在操作系统里面(具体是内存)形成一个应用副本,这个副本就是进程。

什么是进程?
进程是应用的执行副本;而不要回答是操作系统分配资源的最小单位,前者是定义,后者是作用。

  • 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 指令的能力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值