软件测试所有内容笔记正在陆续更新中,笔记已经在本地记录,全部为自己手动记录的笔记及总结,正在开始更新中,后续会逐步更新并完善到
软件测试学习内容总结
专栏。
本节内容:Linux与Bash课程进阶内容
文章目录
1. Linux实战
大纲
常用软件 Linux 环境配置
比较常见的Linux使用场景
运维 主要做Linux服务端的运营
echo $PATH
查看可执行命令的路径
whereis Python
查看Python安装路径
echo $$
查看当前通过bash启动的进程的id
echo $SHELL
查看shell类型
mac 的shell为 /bin/zsh
linux 的shell为 /bin/bash
UNIX 的shell为 /bin/sh
如果输入密码报错,将~/.ssh/下的known_hosts删除
rm -f ~/.ssh/known_hosts
w
命令可以暗处服务器上面有多少用户在登陆
w |grep xly3|awk '{print $1}'|sort|uniq |wc -l
查看登录服务器的用户中用户名包含xly3的用户的第一列内容,并进行排序去重,统计用户数量
使用id
查看当前登录的用户名
uname -a
可以查看当前服务器使用的操作系统的信息
xargs将前面的命令拿过来在执行kill命令
1.1 Linux 与 Shell 教程
- Linux 与Shell关系
- 管道
- 文件管理、文本处理、网络相关命令。
- 文本排序、去重、统计。
- Linux三剑客 grep、sed、awk
- 性能相关命令。CPU,内存,硬盘,网络
- Bash脚本,变量、条件判断,控制语句,参数传递
- 网络请求curl
- JSON数据解析jq
Linux
- 部署测试环境(业务服务、Jira、Jenkins),查询数据库,查看日志(业务服务日志,系统日志) 定位问题(cat grep awk),执行Shell脚本
- https://github.com/apache/tomcat/tree/master/bin
shell 种类
- 常见shell:bash、sh、zsh
- Window:git bash、cygwin
- Mac:Terminal、iTerm2
- 演练平台:shell.ceshiren.com、xly3890…
云服务器
- 国内云服务商:
- 阿里云、腾讯云、华为云
- 推荐配置为2核4G服务器
- 海外:
- DigitalOccean、Linode
- 最低价格每个月5$
推荐的Linux 与 Shell 环境
- Linux:
- CentOS:国内大部分的服务器都在使用,衍生自RedHat
- Ubuntu:桌面系统、部分服务器系统在使用,基于Debian自由软件系统
- Shell:Bash
1.2 环境配置
Shell 环境变量
- 用
export A=123
将变量导出到子进程 (在shell中直接使用bash
进入子进程) unset A
删除变量A
- set 可以获得当前的所有变量
- unset 可以释放变量
- env 可以获得可以传递给子进程的变量
- export aa=bbbb 把变量导出到子进程
- 文件:~/.bash_profile ~/.bashrc, /etc/profile
环境变量常见问题
- PATH变量在linux中更新后需要重启应用
- 在Windows中更新PATH后如果不关闭所有的cmd进程也不会生效
开源镜像站
- 华为:https://mirrors.huaweicloud.com/
- 阿里云:https://developer.aliyun.com/mirror/
- 清华大学开源软件镜像站:https://mirrors.tuna.tsinghua.edu.cn/
- 中国科学技术大学开源软件镜像:https://mirrors.ustc.edu.cn/
Python 安装与入门文档
- 下载:https://www.python.org/downloads/
- 入门:https://docs.python.org/3/tutorial/index.html
- https://mirrors.huaweicloud.com/python/
- Python3已经成为行业标准,推荐使用Python3.x版本
切换多版本
- vim ~/.bash_profile 修改环境变量
export PATH=$JAVA_HOME/bin:$PATH
添加环境变量- 将下载解压的 tar.gz 文件的路径配置到环境变量
echo $PATH
-修改环境变量后重新加载环境变量- pyenv
- https://github.com/pyenv
- pyenv --version 查看pyenv版本
- pyenv versions 查看安装的全部Python版本
- pyenv install 3.7.1 安装指定的Python版本
source ~/.bash_profile
重新加载文件
- PATH变量决定优先使用哪个Python
- 把Python2与Python3安装到不同的目录,or pyenv 工具。
JAVA 安装
- openjdk:https://openjdk.java.net/
- oracle jdk:https://www.oracle.com/java/technologies/downloads/archive/
- selenium
- jenkins
- jira
Node.js 安装
- 使用
./node --version
查看当前目录的 node 版本 node --version
查看系统环境的node版本- nvm 相当于pyenv,可以安装不同版本的node
- nvm install 14.15.1 安装
- Node.js:https://nodejs.org/zh-cn
- npm:node的包管理工具
- 配置镜像
- appium
文件描述符
当前在线用户
- w
w | awk '{print $1}' | sed 1,2d | sort | uniq -c | wc -l
- 查看当前用户的用户名(第一列),并删除第一二行的内容,然后排序,去重(-c 去重并统计出现的次数),统计用户数(行数)
提取本机ip
ifconfig -a |grep inet |grep -v 127.0.0.1 |grep -v inet6 |awk '{print $2}'
- 查看当前电脑服务器的网卡信息,显示包含inet的行,过滤掉包含127.0.0.1的行(-v 过滤指定的关键字),过滤掉包含inet6的行,显示第二列(ip地址)
- en0 -10开的一般为局域网
- lo -回环地址
- eth0 第一个网卡
一键搭运行Web服务
python -m http.server 8000
命令行输入- usage: server.py [-h] [–cgi] [–bind ADDRESS] [–directory DIRECTORY] [port]
- python -m http.server 8000 --bind 0.0.0.0
- 在需要访问文件的路径下执行命令
- -m 导入模块http,里面的方法server
- 启动上述命令,通过本机的ip地址加上端口可以访问数据
- 127.0.0.1:8000 本机访问
- IP地址:8000 (192.168.11.161:8000) 其他电脑访问
- python2 -m CGIHTTPServer 8000
- python3 -m http.server -cgi 8000
提取对外连接的ip
- netstat -tnp
- t 显示协议
tcp - n 将域名转换为数字
- p 显示后面的进程
- t 显示协议
-F 指定’:'分隔符分隔
关闭进程
- ps
- grep
- awk
- Xargs (xargs)
- kill
ps -ef 显示正在运行的所有进程
xargs 拿到前面的命令
找到要关闭的进程关闭进程
场景
学习资源
- 高级Bash脚本编程指南
- LINUX与UNIX SHELL编程指南
- 鸟哥的Linux私房菜
- IBM DeveloperWorks
- 官方文档
- 阮一峰的《bash脚本教程》
- ceshiren.com
课后作业
- 根据输入的关键字来终止进程的运行?
- 查看当前开放的端口并根据进程来关闭使用这个端口的进程?
2. 三剑客实战Nginx日志分析
cat !$
:重复上一次命令
比如:输入ls /proc/cpuinfo,
然后输入cat !$,就相当于输入了 cat /proc/cpuinfo
df -h 查看系统盘大小
课程价值
掌握shell的管道机制
掌握三剑客的实用用法
大纲
实战环境
nginx 日志解析
文件描述符
- ls /dev/std*
- 输入文件 — 标准输入0
- 输出文件 — 标准输出1
- 错误输出文件 — 标准错误2
-
:输出重定向
- 2>:标准错误输出重定向
- ps -qq 2> e.txt
- <:输入重定向
- read y < y.txt 将y.txt里面的第一行内容读取到y
- (y.txt里面有内容’hello Word’)
- 2>&1:标准错误输出 重定向到 标准输出
- /dev/null:所有传给它的东西它都丢弃掉
- 输出的结果不需要的时候可以输出到空设备
- ps -qq 2> /dev/null
- /dev/zero:输入设备,产生无限的空字符
- cat /dev/zero >> zero.txt
- cat /dev/zero >> zero.txt
Shell输入输出
管道
- 把不同程序的输入和输出连接
- 可以连接更多命令
- 常见的组合命令Linux三剑客
在管道中使用变量
- unset x:删除x
echo hello world |{ read x;echo $x; }
- {}里内容的两边要有空格
echo hello world |while read x;do echo $x;done
Linux三剑客 grep + awk + sed
grep
ping www.baidu.com |grep 4 --line-buffered |awk '{print $8}'
ping www.baidu.com |awk '/5/{print $0}'
遇到5会打印出来ping www.baidu.com |awk '/5/{print $0;fflush()}' |grep 15
- 如果awk命令在中间放着,后面还需要其他的三剑客的一些命令去做处理的话,要使用fflush()函数去做实时刷新
- grep使用–line-buffered实时刷新
BRE基本正则表达式
- ^ 开头 $结尾
- [a-z] [0-9] 区间,如果开头带有 ^ 表示不能匹配区间内的元素
- * 0个或多个
- . 表示任意字符
ERE扩展正则表达式
grep -E -P sed -r -E awk
grep --help
ls /bin |wc -l Linux命令数量
awk
awk的字段数据处理
awk行处理
NR显示行号,并且自动变化
ORS 指定输出分隔符,将/n换为指定的分隔符
sed
sed ‘/root/d’ 删除包含root的行
sed -i .bak ‘’ 将源文件拷贝到源文件.bak的文件
-i做备份
cp /etc/passwd
sed -i.bak ‘/root/d’ passwd
源文件已修改,备份文件没变化
head -5 passwd passwd.bak
查看passwd passwd.bak两个文件的前5行
action
sed ‘s#()()#\1 \2#’ 几个括号后面就有几个反斜杠 s为搜索
分组为 扩展 中的表达式,默认sed使用默认表达式,小括号不生效,加-E
Nginx 日志分析
Nginx 日志分析
200:正常,400:客户端错误,500:服务端错误
cd /tmp 学院服务器的nginx日志在tmp下
ls |grep nginx.log
相关命令简介
日志数据检索
awk 擅长竖列的操作
日志数据统计
awk '{print $(NF-1)}' nginx.log
取出响应时间
统计首页的访问时间 -即有/的
找出访问量最高的页面地址
学习资源
- 高级Bash脚本编程指南
- LINUX与UNIX SHELL编程指南
- 鸟哥的Linux私房菜
- IBM DeveloperWorks
- 阮一峰的《bash脚本教程》
awk官方文档, mac下的awk与gawk并不一致,用法上有一定的差异。
定义函数
# 查看命令
type
awk字段枚举
awk 'NR==1{for(i=1;i<=NF;i++) {print i"="$i} }' nginx.log
课间作业
演练数据
把/tmp/nginx.log文件复制到自己的家目录下,用来演练
实战内容
- 日志数据检索
- find_error_log 找出log中的404 500的报错
- find_before 找出500错误时候的上下文 考察grep高级用法
- 日志数据统计
- find_top_10 找出访问量最高的ip 统计分析
- 数据文件修改
- url_summary 找出访问量最高的页面地址 借助于sed的统计分析
find_error_log
编写一个函数 find_error_log()
找出log中的404 500的报错
回复的时候按照这个格式
find_error_log() {
}
url_summary(){
}
find_before
找出500错误时候的上下文,找出500错误的前两行 考察grep高级用法,并把这个参数的描述信息贴上
find_before(){
}
find_top_3
找出访问量最高的ip, 统计分析,取出
top3find_top_3(){
}
url_avg_time
找出 /topics 的平均响应时间,响应时间在倒数第二个字段
url_avg_time(){
#易读性好,易修改
awk '$7=="/topics"' nginx.log | awk '{print $(NF-1)}' | awk '{t+=$1}END{print t/NR }'
#高性能
awk '$7=="/topics"{total+=$(NF-1);count+=1}END{print total/count}' nginx.log
课后作业 url_summary
找出访问量最高的页面地址 借助于sed的统计分析
/topics/16689/replies/124751/edit 把数字替换为 /topics/int/replies/int/edit
/_img/uploads/photo/2018/c54755ee-6bfd-489a-8a39-81a1d7551cbd.png!large 变成 /_img/uploads/photo/2018/id.png!large
/topics/9497 改成 /topics/int
其他规则参考如上
输出
url pattern对应的请求数量
取出top 20请求量的url pattern
类似
nnn urlxxx
mmm urlxxx
url_summary(){
}