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

一、筛选与搜索

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 命令 定时执行命令

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值