直播网站的建设,管理外贸网站模板,网站被黑了,网站建设公司是什么上一章#xff1a;
Shell编程(二#xff09;_做测试的喵酱的博客-CSDN博客 一、ps命令
指令#xff1a; ps作用#xff1a; 主要是查看服务器的进程信息选项含义#xff1a; -e#xff1a;等价于 ‘-A’ #xff0c;表示列出全部的进程 -f#xff1a;显示全部的列
Shell编程(二_做测试的喵酱的博客-CSDN博客 一、ps命令
指令 ps作用 主要是查看服务器的进程信息选项含义 -e等价于 ‘-A’ 表示列出全部的进程 -f显示全部的列显示全字段 二、 grep 文本过滤
grep主要用于过滤。对文本按行来过滤。如果某一行包含要搜索的关键字则会把这一整行输出出来。 2.1 grep基础使用方法
查看grep 帮助文档 grep --help
[rootecs-39233 chenshuai]# grep --help
Usage: grep [OPTION]... PATTERN [FILE]...
Search for PATTERN in each FILE or standard input.
PATTERN is, by default, a basic regular expression (BRE).
Example: grep -i hello world menu.h main.c grep应用的两种形式
形式一对一个文件/多个文件进行搜索。
grep [OPTION]... PATTERN [FILE1,FILE2 ... ]
[OPTION] 可选项可填写以下内容
PATTERN 关键字被搜索的关键字。从文件FILE1 FILE2 搜索包含关键字 PATTERN 的行。 形式二执行命令时在命令结果中搜索数据
some command | grep [option] pattern
[OPTION] 可选项可填写以下内容
PATTERN 关键字被搜索的关键字。可以有没有引号可以单引号可以双引号。
如果没有引号PATTERN 关键字中不能有空格。
单引号PATTERN 关键字中的变量不能解析搜索的什么就是什么
双引号可以解析PATTERN 关键字中的变量。
将一个命令command的输出通过管道符传给后面的grep命令。
在第一个命令的输出结果中搜索关键字pattern 选项作用-i忽略大小写-c只输出匹配行的数量-n显示行号-r递归搜索-E支持拓展正则表达式-W匹配整个单词-I只列出匹配的文件名-F不支持正则按字符串字面意思进行匹配 例子1
搜索在当前Linux系统中/etc/passwd)是否存在某一个用户。
是否存在root用户
grep root /etc/passwd
[rootecs-39233 ~]# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[rootecs-39233 ~]# 是否存在miao用户
[rootecs-39233 ~]# grep miao /etc/passwd
[rootecs-39233 ~]# 例子2
查看当前系统java进程信息
ps -ef |grep java
查看tomcat进程信息
ps -ef |grep tomcat 例子3 忽略大小写 -i
忽略大小写 -i
grep 默认不忽略大小写。 grep -i 忽略大小写。 不忽略大小写
[rootecs-39233 ~]# echo Hello world |grep hello
[rootecs-39233 ~]#
忽略大小写
[rootecs-39233 ~]# echo Hello world |grep -i hello
Hello world 例子3 统计总数量 -c
统计总数量 -c
查看Linux用户文件。/etc/passwd
[rootecs-39233 ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
这种nologin结尾的用户是没有登录权限的用户。
统计一下 /etc/passwd 中有多少个用户没有登录权限。-c
[rootecs-39233 ~]# grep -c /sbin/nologin /etc/passwd
16
例子4 搜索多个文件
1、搜索多个文件
在 test_while.sh test_read_n.sh 这两个文件中搜索/bin/bash 字符串
[rootecs-39233 ~]# grep /bin/bash test_while.sh test_read_n.sh
test_while.sh:#!/bin/bash
test_read_n.sh:#!/bin/bash 2、对目录进行过滤 -r
我想在/chenshuai 目下对所有的文件进行搜索。搜索/bin/bash 字符串
grep -r /bin/bash /chenshuai
[rootecs-39233 chenshuai]# grep -r /bin/bash /chenshuai
/chenshuai/study_shell.sh:#!/bin/bash
/chenshuai/until.sh:#!/bin/bash
/chenshuai/miao_test.sh:#!/bin/bash
3、过滤时只打印文件名称。不打印命中的字符串 -l
grep -rl /bin/bash /chenshuai
/chenshuai/study_shell.sh
/chenshuai/until.sh
/chenshuai/miao_test.sh
例子5 过滤目标行的前后数据
显示目标行的后几行数据 -A
显示目标行的前几行数据-B
显示目标行的前后各几行数据 -C
查看grep 帮助文档
grep --help 查看grep帮助文档中的-A 用法。\-A 转义
grep --help | grep \-A
[rootecs-39233 ~]# grep --help | grep \-A-A, --after-contextNUM print NUM lines of trailing context
显示目标行的后几行数据-A ,after) 查看-A 这一行及后3行数据。
grep --help | grep -A3 \-A 查看- B这一行及前4行的数据。 显示目标行的前后各几行数据 -C
查看目前行的前后各2行数据
grep --help|grep -C2 \-C 2.2 grep 正则
2.2.1 基础正则
^ 以x开头$ 以x结尾.*[][^] 在文件中搜索以r开头的字符串
grep ^r /etc/passwd 2.2.2 扩展正则 grep -E 或者 egrep 扩展正则常用 {}()|?
在 文件中匹配手机号
grep -E ^1[3456789]\d{9}$ /etc/xxx.log
egrep ^1[3456789]\d{9}$ /etc/xxx.log
2.2.3 过滤多个关键字
我想在文件中搜索 文件中包含-E -A -B 多个关键字的数据这几个关键字是或的关系
注意
过滤多个关键字需要使用正则中的管道符 表示或的关系 正则中的管道符 属于扩展正则需要使用grep -E 或者egrep
-E 需要转移 \-E
grep --help | egrep \-E|\-A\-B
grep --help | grep -E \-E|\-A|\-B 2.3 grep 编写Shell 脚本
实现功能
shell脚本实现查看cpu 核数。
Linux知识小拓展
使用top命令查看linux信息。然后按1顶部就会显示所有的cpu使用信息。
查看cpu的配置信息
cat /proc/cpuinfo
里面每一个核都有一个model name所以统计cpu核数量可以通过统计model name 文本数量实现。
grep -c model name /proc/cpuinfo 三、 sed 对文件进行增删改查处理
作用
sed流编辑器对文件进行增删改查的处理。
我们日常对文件进行处理使用vim命令。但是在shell脚本中不能使用vim处理文本vim是一个交互式的命令我们可以使用sed命令。 处理文本方式
按照行来处理文本与grep相似。 两种形式
方式一对文件进行处理
sed [option] pattern command file
[option] 可选的扩展项目如-n -f -r等
pattern 要搜索的关键词。pattern 为空的话默认是对每一行进行处理。
cmond 对命中的这一行数据做何种处理。处理命令
file 文件路径
sed打印时默认会把原数据打印出来。 方式二 对命令的输出结果做处理
some command | sed [option] pattern command 将一个命令command的输出结果传给sed处理。
sed 在这个结果中寻找匹配行然后对这一匹配行进行处理。 选项作用-n只打印模式匹配的行-f加载存放动作的文件-r支持拓展正则-i支持修改文件 3.1 打印文件
sed p /etc/passwd
没有搜索词默认对每一行都处理。
p 打印命令print简写 。
[rootecs-39233 ~]# sed p /etc/passwd
root:x:0:0:root:/root:/bin/bash
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
发现passwd文件中每一行数据都打印了两遍。因为sed打印了一遍原数据还打印了一遍命中数据所以打印了两遍。 -n 只打印模式匹配的行。(只打印1行
sed -n p /etc/passwd
[rootecs-39233 ~]# sed -n p /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
3.2 匹配词pattern 的四种类型
3.2.1 使用行号过滤pattern 为行号
方式一对文件进行操作
sed -n 第几行 操作命令 文件路径
pattern 为具体的行号。
如打印第3行内容
sed -n 3 p /etc/passwd
[rootecs-39233 ~]# sed -n 3 p /etc/passwd
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[rootecs-39233 ~]# 方式二 对一个命令的结果进行处理 cat /etc/passwd | sed -n 3 p
对cat的运行结果打印第3行的数据。
[rootecs-39233 ~]# cat /etc/passwd | sed -n 3 p
daemon:x:2:2:daemon:/sbin:/sbin/nologin 对连续的行进行处理 x,y command
如打印第4行到第8行的数据
sed -n 4,8 p /etc/passwd
[rootecs-39233 ~]# sed -n 4,8 p /etc/passwd
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
[rootecs-39233 ~]# 3.2.2 使用正则过滤pattern 为正则表达式
表达式
sed -n /正则表达式/ 操作命令 文件路径
举例打印/etc/passwd 文件中包含root的行
sed -n /root/ p /etc/passwd
[rootecs-39233 ~]# sed -n /root/ p /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin 对所有s开头的行进行打印 /^s p/
sed -n /^s/ p /etc/passwd
[rootecs-39233 ~]# sed -n /^s/ p /etc/passwd
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
遇到/要使用转义
如打印包含 /sbin/nologin 的行其中/ 需要进行转义
sed -n -e /\/sbin\/nologin/ p /etc/passwd
[rootecs-39233 ~]# sed -n -e /\/sbin\/nologin/ p /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin -r 支持拓展正则
sed 只默认只支持基本正则拓展正则需要加-r
举例
打印包含2个o的行o{2}
sed -n -r /o{2}/ p /etc/passwd [rootecs-39233 ~]# sed -n -r /o{2}/ p /etc/passwd
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin 多个正则的使用实现过滤以x行到y行的数据。
注意这里的多个正则不是或的关系而是 x行到y行 的意思。
举例我要过滤以adm开头的行到以mail开头行的数据
sed -n /^adm/,/^mail/ p /etc/passwd
[rootecs-39233 ~]# sed -n /^adm/,/^mail/ p /etc/passwd
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin 四、 awk