Linux 学习笔记 正则、管道、进程与任务定时

news2024/12/24 9:01:50

一、筛选与搜索

1.1 grep 命令 筛选数据

grep 是 Globally search a regular expression and print 的缩写。意思是全局搜索一个正则表达式,并且打印。

考虑这样的一个名为 a.txt 的文件:

 执行 grep apple ./a.txt 即可匹配所有含有 apple 的字符

 默认情况下,grep 命令是区分大小写的,加上 -i 参数即可忽略大小写

 加入 -n 参数可以显示行号

 使用 -v 参数是反选,匹配搜索不到的行

 使用 -r 可以在所有子目录下查找文本

比如:grep -r "apple" folder/ 命令即在整个 folder 下文件夹匹配 apple 这个关键词。

1.2 使正则与 grep 命令

正则表达式高深莫测,在这里只列举一些常用的使用方式。

使用 grep 命令的 -E 参数可以使用正则表达式:

.匹配除 “\n” 之外的任何单个字符
^匹配行首(匹配输入字符串的开始位置)
$匹配行尾(匹配输入字符串的结束位置)
[ ]       在中括号的任意一个字符
?问号前面的元素出现零次或一次
*星号前面的元素可能出现零次,一次或多次
+加号前面的元素必须出现一次以上(包含一次)
|逻辑或
( )

表达式的分组(表示范围和有限度)

grep -E ^apple ./a.txt 命令 即匹配以 apple 开头的一行数据

grep -E [Aa] ./a.txt 命令 即匹配 A 或 a 任意一个字符

 

grep -E [a-e1-9] ./a.txt 命令 匹配 a~e 和 1~9 之间的字符 

二、管道

管道符号 | ,管道就是把两个命令连接起来使用,一个命令的输出作为另一个命令的输入。

比如我们有这三个文件,使用命令 ls | grep “.txt” 即可匹配到含有 .txt 的文件

 

 wc -l 命令可以统计行数,我们在之后加入 ls | grep “.txt” | wc -l 即可统计匹配到的文件个数

 有一些命令原生不支持管道符,考虑这样的命令:find -name *.txt” |  ls -l 作用是将找到所有的 *.txt 然后交给 ls -l 详细输出。

但是输出效果却强差人意,是因为 ls 命令不支持管道符输入,他没有接收管道之前的命令,直接执行了 ls -l。

此时在命令加入 xargs 它的作用是将参数列表转换成小块分段传递给其他命令,以避免参数列表过长的问题。

 find -name *.txt” | xargs ls -l 执行,可见效果符合我们的预期。

 

三、重定向

grep a a.txt > b.txt 命令即可将a.txt 中匹配到的字符不在终端输出,从而输出到 b.txt 里。这一过程被称为重定向。

注意!如果 b.txt 不存在即会创建,存在则会被覆盖掉!

3.2 重定向到文件末尾

如果我们只想追加到文件末尾,可以使用 >> 符号。

基于上边的案例,grep t a.txt >> b.txt

 

3.3 重定向错误输出

在Linux下,当一个用户进程被创建的时候,系统会自动为该进程创建三个数据流。(在下一章将会主要讲解进程这一概念,目前可以先把进程理解为一条命令)。分别是:

stdin、stdout、stderr 三种,分别是标准输入流,标准输出流,标准输出错误流。

一般来说,终端命令所反馈的东西都输出到标准输出流中,比如我们执行 date

 这个日期被输出到标准输出流中,但是一些错误信息会被输出到标准错误流:

即使是执行 find c.txt > b.txt 这行错误信息也会在终端打印出来,因为 > 符号只能重定向标准输出流。

 

  

3.3.1 文件描述符

文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。通过这个索引值我们就可以获得其中的内容。

文件描述符名字解释
0stdin标准输入
1stdout标准输出
2stderr标准错误输出

 如果需要将标准错误流输出到指定文件,只需将原来的 > 改写成 2> 也就是在前面加上了标准错误流的文件描述符。其实 > 符也等价于 1> ,两者并无区别。

来执行 find c.txt 2> error.log 可见标准错误没有输出到终端,但是输出到了文件夹。

如果使用 find c.txt 2>&1 a.txt 这样无论是标准输出还是标准错误输出都会输出到 a.txt 里。

四、进程管理

linux 是多任务多用户的操作系统。

多任务:linux 可以管理多个同时运行的程序。

多用户:多个用户可以在不同地方通过网络连接到同一个 linux 网络。

4.1 w 和 who 命令查看当前登录的用户

w 命令用于显示目前登入系统的用户信息。

执行后会提示出当前计算机的平均负载、当前时间、登录用户列表等信息。

对于单核 CPU 的 linux 电脑来说,负载为 1 即为满载。双核 2 为满载。同理,假设有50核,那么50 才是满载。

 同时还有一个更纯净的 who 命令,他将只显示当前登录用户不显示别的:

4.2 ps 和 top 命令,列出运行的进程

进程就是加载到内存的程序。大多程序只在内存中加载一个进程,当然也可以使用多个进程。

2.2.1 ps 命令

ps 命令会列出当前用户,在当前终端所运行的程序,并不会列出其他用户的。

第一列 PID:为进程唯一标号

第二列 TTY:程序运行所在的终端

第三列 TIME:进程运行多久

第四列 CMD:产生这个进程的程序名,如果有好几个都是同样的程序名,那就是同一个程序产生了很多的进程

ps -ef 命令即可显示所有用户,所有终端的进程。

PPID 是进程的父进程号

STIME 为进程启动时间

4.2.2 top 命令

 使用 top 命令可以实时看到更详细的说明,并且定时更新。摁q键可以退出

 

4.3 kill 命令 终止进程

信号编号信号名含义
0EXIT 程序退出时收到该信息。
1HUP挂掉电话线或终端连接的挂起信号,这个信号也会造成某些进程在没有终止的情况下重新初始化。
2INT表示结束进程,但并不是强制性的,常用的 "Ctrl+C" 组合键发出就是一个 kill -2 的信号。
3QUIT退出。
9KILL杀死进程,即强制结束进程。
11SEGV 段错误。
15TERM正常结束进程,是 kill 命令的默认信号。

kill 命令可以向内核发送一个信号量,内核根据信号量的指示做出相应的操作,而这些命令多是终止进程的。在上表已经列出了较为常用的信号量。

kill 不加参数默认信号量15正常结束命令,信号量15有时候不能结束程序,此时可以使用 kill -9 强制结束,这也是比较常用的参数。

4.4 将进程放置到后台运行

考虑执行 find / -name "*.log" 这样的一个命令,其作用是搜索找所有 *.log 的文件。

他会把所有输出的值打印在终端。

如果想要终止这种操作可以摁 ctrl + c 终止这个进程。

 在 linux 中,任何命令后接一个 & 符号即可放置到后台运行

我们来执行 find / -name "*.log" & 但是其结果还是输出到终端了。这是因为程序虽然在后台运行,但是命令本身就是被设定为输出终端。转到后台并不影响其设定。

 

来改进一下: find / -name "*" > output_find 2>&1 & 其作用是寻找根目录下所有的文件写入到 output_find 文件中,错误输出也输出到另一个文件中。这样就不会打印在终端。

可见执行后输出了进程号 2331 并且之后我还执行了 date 命令,也是正常的。

4.5 nohup 命令 使进程与终端分离

在上面命令后加 & 转到后台有一个缺点,如果关闭终端,此命令也会终止。

nohup 用法很简单,只需要在命令前加上 nohup 即可。

nohup find / -name "*" > output_find 2>&1 &

4.6 ctrl + z 将前台程序转到后台

执行命令 find / -name "*" > output_find 2>&1 请注意,此命令没有在末尾加入 & 也就是他将在前台运行,摁 ctrl + z 后,提示 [1]+ 已停止。此进程后台编号为 1 (并不是PID进程编号),这是这条命令被放置在后台并暂停运行。

 在此刻使用 ps -l 命令查看当前用户当前终端的进程详细情况查看:此进程当前在状态列显示 T 为stop 暂停的缩写,表示此进程暂停。

4.7 bg 命令 使进程在前后台切换

bg 命令在不加参数的时候,默认对最后一个后台进程操作。作用是将暂停的后台进程在后台运行。

下面还是先执行了 find / -name "*" > output_find 2>&1 ,之后 ctrl+z 后台暂停运行。

之后运行了 ps -l 查看此进程的状态为 S 暂停运行。

之后使用 bg 命令将其转为后台运行。

之后再使用 ps -l 查看进程状态,显示转为了 R 正在运行。

 也可以使用 %+标号使指定的程序运行:

以下执行 bg %1 可以恢复标号为1的暂停进程

 

4.8 fg 命令 使进程转到前台

在下图中首先使用了 top 命令,

然后 ctrl+z 转为后台暂停

然后执行 fg %5 转为前台运行

4.9 进程前后台转化总结

五、任务的定时与延时

5.1 date 命令 显示时间

date 命令可以定制输出

5.2 at 命令 定时执行命令

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/194802.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IDEA搭建Finchley.SR2版本的SpringCloud父子基础项目-------zuul和SpringConfig

1.Zuul是什么 Zuul包含了对请求的路由和过滤两个最主要的功能: 其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础而过滤器功能则负责对请求的处理过程进行干预,是实现请求校验、服务聚合等功能的基础. Zu…

4款实用的办公软件,每一款都让你效率翻倍,相见不易

称心的电脑使用体验,总离不开实用的工具,一款高效的工具,能让你的办公体验翻倍。 1、Mem Reduct 这是一款强大到离谱的电脑清理工具,比某安全卫士实用多,没有任何弹屏广告,完全免费使用,内存清理…

搜索算法基础

一 DFS 深度优先搜索算法(Depth First Search,简称DFS):一种用于遍历或搜索树或图的算法。 沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所在边都己被探寻过或者在搜寻时结点不满足条件,搜…

uboot的烧写及使用

目录 一、uboot概述 Bootloader Bootloader基本功能 常见的Bootloader 二、SD卡启动盘制作 三、uboot的使用 3.1uboot模式 3.2uboot帮助命令 3.3uboot环境变量命令 3.4常用环境变量 3.5网络传输命令 3.6u-boot访问存储器命令 3.7 u-boot自启动环境变量&#xff08…

人工智能趋势——2023 年综述

随着DALLE 2 于 2022 年 4 月的宣布,关于2022 年初第三个 AI 冬天——或 AI 撞墙——的预言过时得很快而且效果不佳,随后出现了更多主要由扩散模型驱动的文本到图像应用程序,这是一个非常多产的领域用于计算机视觉研究及其他领域。AI 的 2022…

SpringCloud五大核心组件

Consul 等,提供了搭建分布式系统及微服务常用的工具,如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性token、全局锁、选主、分布式会话和集群状态等,满足了构建微服务所需的所有解决方案。 服务发现——Netflix Eureka …

六百亿流量、25万出场费,袁树雄身价是《汉川》杨语莲125倍

在文章开始之前,咱们不妨先看两组数据,第一组数据是六百个亿,第二组数据则是二十五万。乍一看并没有什么特别,但是要把这两组数据,和一名音乐人联系起来的话,就会产生非常神奇的效果。 《早安隆回》的创作者…

[oeasy]python0070_ 字体样式_下划线_中划线_闪动效果_反相_取消效果

字体样式 回忆上次内容 m 可以改变字体样式 0-10 之间设置的都是字体效果 0 复原1 变亮2 变暗 从3到10 又是什么效果 呢??真的可以blink闪烁吗?👁 3m 3m 实现斜体字的效果 4m 4m 对应着下划线 控制范围 通过控制字符串的位置…

DNS服务解析与原理笔记

引言DNS介绍DNS原理与解析DNS查询DNS服务搭建DNS劫持和污染计算机面试 or 真题DNS应用扩展参考与推荐引言 我想很多人遇到过这样一种情况,电脑突然上不了网了,或者说可以登陆QQ,但是进不了网页,任何网页都会出现如下的类似截图&a…

Android.mk文件编写

来源:https://www.jianshu.com/p/9aab51f4cd6f 1. Android.mk 介绍 Android.mk 是Android 提供的一种makefile 文件,注意用来编译生成 exe(二进制可执行文件)、so(动态库文件)、a(静态库文件)、jar(jar包) 和 apk 等文件。Android.mk和一个或多个.c的源…

PWN入门程序装载与虚拟内存 小白笔记

1.源代码到执行源代码test.c从磁盘中,通过gcc编译成a.out(可执行文件)。执行的时候,是将磁盘中的可执行文件(a.out)映像到内存中。2.节视图和段视图节视图(磁盘中的可执行文件)不同的…

采用消息中间件实现最终一致性的分布式事务

基于可靠消息服务的方案是通过消息中间件保证上下游应用数据操作的一致性。假设有A和B两个系统,分别可以处理任务A和任务B。此时存在一个业务流程,需要将任务A和任务B在同一个事务中处理。就可以使用消息中间件来实现这种分布式事务。 第一步&#xff…

一篇文章带你了解KendoReact DateRangePicker,让日期选择变得更酷炫!

Kendo UI致力于新的开发,来满足不断变化的需求。现在我们非常自豪地宣布,通过React框架的Kendo UI JavaScript封装来支持React Javascript框架。KendoReact能够为客户提供更好的用户体验,并且能够更快地构建更好的应用程序。理想情况下&#…

python中有哪些运算符,python里的运算符号

大家好,给大家分享一下python中有哪些运算符,很多人还不知道这一点。下面详细解释一下。现在让我们来看看! 1、Python中的算术运算符有哪些呢? 1. 比较运算符: 如果比较式成立,返回True;不成立…

[Linux系列]linux bond详解

目录 背景 简介 bond分类 1. mode0(balance-rr) 2. mode1 (active-backup) 3. mode2(balance-xor) 4. mode3(broadcast) 5. mode4(802.3ad) 6. mode5(balance-tlb)…

STL模拟实现——stack、queue和priority_queue(适配器、仿函数、反向迭代器)

适配器 适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总 结),该种模式是将一个类的接口转换成客户希望的另外一个接口。下列的这些stack、queue和priority_queue以及反向迭代器都是适配器。 stack介绍 1. sta…

数据结构-第八期——树状数组-原理区间和

目录 1、树状数组 2、基本应用 2.1、前缀和:不修改,只查询 2.2、树状数组:动态修改,求区间和 3、实现数组树状 3.1、神奇的lowbit (x)操作 3.2、tree[ ]数组 3.3、基于tree[ ]的计算 3.4 sum[]的计算 3.5、tree[]的更新…

CD3药物研发进展-销售数据-上市药品前景分析

CD3作为近几年的双抗热门靶点之一,目前在全球登记的CD3相关药物就有470个,上市的CD3药物有8款,Ⅰ期临床到Ⅲ期临床有116种,临床前及药物发现达200多种,其火热程度可想而知,笔者为方便大家更加清晰了解CD3在…

ESP-IDF:冒泡排序和选择排序测试代码

ESP-IDF:冒泡排序和选择排序测试代码 /冒泡排序/ void printarry16 (int arr[],int length) { for(int i0;i<length;i) { cout<<arr[i]<<" “; } cout<<endl; } void test16() { int arr[] {9, 8, 7, 6, 5, 4, 3, 2, 1, 0,9, 8, 7, 6, 5, 4, 3, 2…

【笔记】容器基础-容器与虚拟机

杂记&#xff1a; 容器技术的兴起源于 PaaS 技术的普及Docker 公司发布的 Docker 项目具有里程碑式的意义Docker 项目通过“容器镜像”&#xff0c;解决了应用打包这个根本性难题容器本身没有价值&#xff0c;有价值的是“容器编排”进程&#xff1a; 静态表现&#xff1a;程序…