shell-三剑客
2022-05-07 14:55:03 0 举报
AI智能生成
登录查看完整内容
linux
作者其他创作
大纲/内容
重要性
命令
elasticsearch
logstash
kql
kibana
ELK
EFK
ELK + Filebeat
ELK + Filebeat + kafka
日志平台
方式
历史业务模型可能有多个,所以需要从不同的维度(天、小时、分钟、秒)去获取业务高峰数据
说明
业务模型获取
grep、sed、awk
主要应用于查看日志、分析日志、命令监控、修改配置文件shell脚本等
三剑客
man grep
grep --help
命令参数的含义,可以参考帮助,比如:
/etc/passwd
数据1
#!/bin/bashfor (( i=1;i<=10;i++ ))doecho test_$idone
test.sh
sh test.sh > 1.txt
数据2
演示数据
编辑
n 把匹配到的内容输出打印到屏幕
p 以行为单位进行查询
a 表示新增
i 表示插入
c 表示替换
d 表示删除
s/要被取代的内容/新的字符串/g
-i 对源文件进行修改
/被搜索内容/p
sed 常用的参数有
sed
查找
grep -E 'roo|ren' /etc/passwd
-E表示或
grep -niE "exception|error" catalina.out.2020-10-25
tail -f catalina.out.2020-10-25 | grep -niE "exception|error"
tail -fn500 xxx.log |grep grep -niE "exception|error"
-i忽略大小写
排除
ps -ef|grep java |grep -v "grep"
-v输出不匹配行
无结果
grep -w 'roo' /etc/passwd
有结果
grep -w 'root' /etc/passwd
-w匹配指定字符串
grep '^roo' /etc/passwd
统计当前目录下文件个数:ls -l |grep "^-"|wc -l
-R
^匹配开头行首
cat /etc/passwd | grep nologin$
以nologin结尾的行
$匹配结尾行尾
grep -n 'ren' /etc/passwd
-n表示对提取的内容显示所在行号
参数
grep
文本与数据处理
与\合用
printf格式化列出用户名、用户标识号
printf 格式化输出,不会自动换行
awk -F ":" '{print $3}' /etc/passwd
print 打印出内容,会自动换行
输出
-F 指定分隔符
打印所有内容
awk -F ':' '{print $0}' /etc/passwd
打印日志第一列
awk '{print $1}' /usr/local/nginx/logs/access.log
$0:表示整个当前行$1:每行第一个字段$2:每行第二个字段$n:每行第n个字段
df -h | awk 'NR==6 {print $5}'
打印第六行第五列
NR:每行的行号
NF:字段数量(列数),如果是$NF,就表示最后一列
awk的内置参数
awk -F ':' '$1!~/^s.*/{print $1}' /etc/passwd
~,!~:匹配正则表达式
nobody 65534ren 1001test2 1002
显示/etc/passwd中用户名ID大于1000的用户名和ID
==,!=,:判断逻辑表达式
逻辑判断式
在读取所有行内容前就开始执行,常常被用于修改内置变量的值
以 begin 开头、end 结尾,打印第 1 列数据
awk -F : 'BEGIN{print "begin"}{print $1} END{print "end"}' /etc/passwd
BEGIN
BEGIN {FS=":"}等价于 -F ":"
cat /etc/passwd | awk 'BEGIN {FS=":"} {print $1}' |head -n3
BEGIN时定义分割符
FS
cat /etc/passwd | awk -F":" '{print $1}END{printf "执行完成"}'
结束的时候执行
END
其它
搜索
awk
提取列
cut -c 2-9 /etc/passwd
截取/etc/passwd文件从第二个字符到第九个字符
以字符为单位进行分割
-c
cut -d ':' -f 2- /etc/passwd
以':'为分隔符,截取出/etc/passwd的第二列到最后一列
指定截取区域
-f
awk默认是空格
默认为制表符,不是空格
所以,cut的缺点是,空格时候没法操作
指定分割符
-d
cut
uniq 用于检查或者统计文本出现的重复行
-c,它用于连续重复行次数的统计
常用参数
12111332
数据
3 1 2 3 1 2 1 2 1 1
uniq -c 1.txt |sort -r
示例
uniq
sort 的默认方式就是把第一列根据 ASCII 值排序输出
sort -n 是按照第一列的数值大小进行排序
-n,依照数值的大小排序;-r,以相反的顺序来排序;-k,选择以某个区间进行排序。
常用参数有
将内容倒序输出
33221111
结果
sort -r 1.txt
sort
统计指定文件中的行数、字节数、字数,并将统计结果显示输出
-l 统计行数。
wc -l /etc/passwd
统计/etc/passwd文件有多少行
find /root/test -type f -name "*.txt" -exec wc -l {} \\;
find /root/test -type f -name "*.txt" |xargs -I {} wc -l {}
find /root/test -type f -name "*.txt" |xargs -i wc -l {}
find ~/ -name "*" -ctime +20 -exec rm -f {} \\;
删除20天以前的文件
指定目录下,所有txt文件中行数
wc
按天
业务量最多的天,按小时
业务最多的天里,业务量最多的小时,统计业务比例
如果更细的维度有峰值,那么需要进一步细化,比如分、秒
其它业务量非最大天,但是其它维度是峰值的,也要考虑
补充
业务比例统计
shell简介
shell应用场景
解释器是一种命令解释器,主要作用是对命令进行运行和解释,将需要执行的操作传递给操作系统内核并执行
#!/usr/bin/python3
不指定,默认就是这个
sh test.sh
./test.sh
chmod +x test.sh
脚本执行
#!/bin/bash
指定解释器
解释器
shell的变量不需要先声明,可以直接使用
a=15,但是注意:等号两侧没有空格
$a 或者 ${a}
echo $a
echo ${a}
改为:echo ${a}a
echo $aa
调用变量
echo $?
$?, 判断上一条命令是否成功,0表示成功,其它表示不成功
$0,返回脚本的文件名称
$1-$9,返回对应的参数值
$*,返回所有的参数值
$#,返回参数的个数
#!/bin/bash#by ren echo "脚本名称:$0"echo "第一个参数是:$1"echo "第二个参数是:$2"echo "一共有多少参数:$#"echo "这些参数是:$*"
变量
> ,会覆盖原有的内容
>> ,不会覆盖原有的内容
; ,分号,执行多条命令,cat 1.txt; ls
| ,管道符,ps –ef | grep xxx
cat test.txt && ls
&& ,前面的命令执行成功,后面的才可以执行
|| ,前面的命令执行失败,后面的才可以执行
“” ,双引号中的变量输出变量值
sh test.sh 1
#!/bin/bashecho "第一个参数:$1"echo '第一个参数:$1'
‘’ ,单引号中的变量输出本身
a=`date`;echo $a
`` ,输出命令结果
常用符号
注意,[]内部左右要有空格
语法:[ 判断表达式 ]
-e 目标是否存在[ -e test.sh ] || touch test.sh
-d 是否为路径[ -d /root/test ] && echo "/root/test存在"
-f 是否为文件[ -f test.sh ] && echo "是文件"
文件目录
-r 是否有读取权限-w 是否有写入权限-x 是否有执行权限[ -x test.txt ] && echo '有执行权限'
权限
整数值:-eq 等于(equal)-ne 不等于(not equal)-gt 大于(greater than)-lt 小于(lesser than)-ge 大于或者等于(greater or equal)-le 小于或者等于(lesser or equal)
字符串:= 相等!= 不相等
比较
条件判断
语法:read -参数-p:给出提示符
#!/bin/bashread -p "请输入密码:" passwordecho '你输入的密码是:'$password
输入输出
if [ 条件判断 ];\t\t\tthen\t\t\t执行动作\t\tfi
if [ 条件判断 ];\t\t\tthen\t\t\t执行动作\t\telse\t\t\t执行动作\t\tfi
用法
sh test.sh 1 2
#!/bin/bashif [ $1 -eq $2 ]thenecho "$1 等于 $2"elseecho "$1 不等于 $2"fi
if
case 变量 in值1 )执行动作1;;值2 )执行动作2;;....esac
#!/bin/bashecho '请输入你要购买的商品编号:'read proidcase ${proid} in'1')echo '笔记本电脑';;'2')echo '华为手机';;* )echo '输入有误请重新输入';;esac
case
`seq 1 10`
等价于
$(seq 1 10)
#!/bin/bash#依次打印1-10for i in `seq 1 10`doecho $isleep 1done
www.baidu.comwww.126.comwww.cnblogs.com
#!/bin/bash#curl for i in $(cat url.txt)docurl -I $iecho -e "\"done
for 变量名 in `命令`\t\tdo\t\t执行动作\t\t\tdone
for (( 条件 ))\t\tdo\t\t执行动作\t\tdone
#!/bin/bashsum=0for ((i=1;i<11;i++))dosum=$(($sum + $i))doneecho $sum
for
while [ 条件判断式 ]\tdo\t\t执行动作\tdone
#!/bin/bashsum=0n=1while [ $n -lt 11 ];dosum=$(( $sum + $n ))n=$(( $n + 1 ))doneecho $sum
while
shell
168632201@qq.com
邮箱地址
随机编号-第08次任务
比如:016-第08次任务
主题格式
提交说明
自行实现一个功能
1、编写java请求
2、自定义一个函数
1、练习jmeter二次开发
用公司的日志平台、或者用命令,对公司日志提取出业务模型
2、业务模型提取练习
restful api,如何提取业务模型?
3、思考:
要求:
1、开机启动服务
2、定期检查服务是否存在
4、针对redis服务,写一个shell脚本
子主题
5、jmeter在linux非gui执行脚本前,要删除jtl文件、清空html报告目录内容,写shell脚本完成
6、继续练习linux基础命令,以及三剑客(sed、awk、grep)、cut、sort、uniq
第一阶段是压力端的知识,下一阶段是服务端监控、分析
7、第一阶段总结(自行完成:性能理论、java、jmeter等)
任务8
三剑客、shell
0 条评论
回复 删除
下一页