5 Linux与Bash课程 - 软件测试

软件测试所有内容笔记正在陆续更新中,笔记已经在本地记录,全部为自己手动记录的笔记及总结,正在开始更新中,后续会逐步更新并完善到 软件测试学习内容总结 专栏。
本节内容:Linux与Bash课程

1. Linux系统与Shell环境准备

  • Windows 与 Linux 界面比较
    在这里插入图片描述

  • Linux 目录结构
    在这里插入图片描述

  • Linux 基本命令

    • ls: 列出目录
    • cd:切换目录
    • pwd:显示目前的目录
    • mkdir:创建一个新的目录
    • rmdir:删除一个空的目录
    • cp: 复制文件或目录
    • rm: 移除文件或目录
    • mv: 移动文件与目录,或修改文件与目录的名称
       
  • Shell 基础

    • 常见的 shell
      Bourne Shell(/usr/bin/sh或/bin/sh)
      Bourne Again Shell(/bin/bash)
      C Shell(/usr/bin/csh)
      K Shell(/usr/bin/ksh)
      Shell for Root(/sbin/sh

    • 运行shell

      • chmod +x ./test.sh #使脚本具有执行权限
        ./test.sh #执行脚本
      • /bin/sh test.sh

2. Linux常用命令之 文件处理

1. 连接服务器

  • ssh --Mac系统
    在这里插入图片描述

  • xshell --Windows系统
    在这里插入图片描述

2. 文件

  • 查看帮助

    • –help (ls --help)
    • man (man ls)
  • 文件管理

    在这里插入图片描述

    • ls -la:详细显示所有目录、文件信息
      • -l:显示目录、文件的详细信息,
      • -a:显示目录下所有文件,包括隐藏文件
      • ls -l 可简写为ll
    • cd:直接从其他目录切换到home目录
    • mkdir a/b/c -p:
      • -p 可以逐层(递归)创建目录
    • rm -r c:
      • -r 删除目录时需添加(删文件直接加文件名)
    • rm -rf c:
      • -f 强制删除,不管有没有目录都不报错
    • rm -ri c:
      • -i 提示是否删除 y/n

  • 拷贝:cp
  • 移动/重命名:mv
  • 建立链接文件:ln
  • 查找文件:find
  • 查看文件内容:cat、less、more、head、tail
  • 打包压缩:tar

复制

  • cp 原文件的位置 目标目录的位置
    • 复制文件
  • cp -a 原目录的位置 目标目录的位置
    • 复制目录加 -a

重命名/移动

  • mv 旧文件名 新的文件名
    • 重命名
  • mv 文件名 目录名
    • 移动文件
  • mv 文件名 目录名/新文件名
    • 移动并重命名文件

链接

  • ln -s 需要链接的文件名 连接位置
    • -s 建立软连接
  • ln -s ./a/a.txt .
    • 将当前位置a目录下的a.txt文件链接到当前目录

查找文件

  • find 文件位置 -name 文件名
    • 用文件名搜索加-name
  • find ./ -name a.txt
    • 搜索当前目录下文件名为a.txt的文件
  • find ./ -name ‘*.txt’
    • 搜索当前目录下后缀名为.txt的文件

查看文件

  • cat 文件名
    • 显示文件所有内容
  • less 文件名
    • 一屏一屏显示 b 往前翻,f 往后翻,空格 往后翻,回车 一行一行后翻
  • more 和less类似
  • head 文件名
    • 默认展示文件前10行
  • head -n 展示行数 文件名
    • head -n 3 a.txt
  • tail 和 head 类似
    • 默认显示文件后10行

压缩文件

  • tar -zcvf 压缩后的文件名 需要压缩的文件名
    • -z 通过gzip格式压缩,
    • -v 显示指令执行过程,
    • -c 建立新的备份文件,
    • -f 指定备份文件
  • tar -zcvf f.tar.gz 1.txt 2.txt
    • 将1.txt 2.txt压缩为f.tar.gz

解压缩

  • tar -xf 压缩的文件名 -C 解压的目录名
    • -C 大写 指定解压缩的目录
  • tar -xf f.tar.gz
    • 解压文件
  • tar -xf f.tar.gz -C ./a/
    • 将f.tar.gz解压缩到当前目录的a文件下

  • 文本处理

    • 文本编辑:vi/vim
    • 屏幕输出:echo
    • 输出重定向:>

    echo 123 > a.txt (将123保存到a.txt)

 

  • 文件属性

    在这里插入图片描述

文件类型:d,-,l,b,c,
权限属性 连接 所有者 用户组 大小 修改日期 文件或目录名
权限属性:拥有者 所数组 其他人

  • 修改文件属性

    • r:读权限 read — 4
    • w:写权限 write — 2
    • x:操作权限 execute – 1
    • -:无权限 — 0
    • chmod 777 文件

3. 网络

  • 查看网卡信息

    ifconfig

  • 测试远程主机连通性

    • ping
      • -c:ping的次数
      • -i:每次ping的时间间隔

    ping -c 3 -i 3 101.200.136.153

  • netstat:打印Linux网络系统的状态信息

    • -t 列出所有tcp
    • -u 列出所有udp
    • -l 只显示监听端口
    • -n 以数字形式显示地址和端口号
    • -p 显示进程的pid和名字

    netstat -tnp

  • 退出 Linux 系统

    • exit

3. Linux常用命令之 性能统计

硬件简介

在这里插入图片描述

1. CPU

  • 查看 CPU 信息:cat /proc/cpuinfo
  • 负载信息:top

top:持续监视系统性能
ps:查看进程信息
-aux 显示所有进程,包括用户,分组情况


  • 测试系统负载

    • {yes > /dev/null & } && sleep 30 $$ ps -ef | grep yes | awk ‘{print $2}’ | xargs kill
    • for i in $(seq 0 $(($(cat /proc/cpuinfo | grep processor |wc -l)-l))); do taskset -c $i yes > /dev/null & done && sleep 30 && ps -ef | grep yes |awk ‘{print $2}’ |xargs kill
      在这里插入图片描述
  • top

    • -d 间隔时间,top -d 4 每隔4秒更新一次
    • -n 获取多次cpu的执行情况,top -n 4 只更新4次
    • -p 获取指定端口的进程的数据
    • -b 批处理模式

    top -p 6547 -d 1 -n 4

    • 参数含义
      • Tasks:进程总数
      • running:正在运行的进程数
      • sleeping:睡眠的进程数
      • stopped:停止的进程数
      • zombie:僵尸进程数
  • 在这里插入图片描述

  • 在这里插入图片描述

2. 内存

  • 显示内存信息: free -h
    在这里插入图片描述

3. IO(Input Output)

  • 安装
    在这里插入图片描述

  • 硬盘 IO

    • 在命令行分别输入下面 ‘写 读’ 命令测试系统的读写的速度,使用 iostat 查看读写情况

    • /dev/null/ 空设备,/dev/zero/ 特殊文件

    • 写:读取 zero 文件并写入 test.iso 文件

    • 读:将 test.iso 文件加载到空设备 null 上
      在这里插入图片描述

    • 使用命令 iostat 1 查看CPU,硬盘的使用情况 (在Ubuntu命令行输入命令)

      • iostat -c:只看CPU的使用率

      • iostat -d:只看设备的读写情况
        在这里插入图片描述

      • 解释
        在这里插入图片描述

  • 网络IO

    • iftop
      在这里插入图片描述

4. Linux常用 统计命令

1. 排序:sort

  • sort --help

  • 练习数据在服务器上 /home/test 目录下

  • ssh xly38909165@shell.ceshiren.com 密码:hogwarts
     

  • sort 常用参数

    • -b:忽略开头的空白字符
    • -f:将小写字母看作为大写字母
    • -h:根据存储容量排序(KB、MB、GB)
    • -n:按数字排序
    • -o:把结果写入文件
    • -r:以相反的顺序来排序
    • -t:指定分隔符。默认为空格
    • -V:按数字版本排序
    • -k:指定排序的关键字。与-t参数配合使用
    • 参考:https://wangchujiang.com/linux-command/c/sort.html
       
  • cat sort_h

  • cat sort_h|sort 默认排序

  • cat sort_h|sort -h 根据 容量大小 从小到大排序

  • cat sort_h|sort -hr 根据容量大小从大到小排序

  • cat sort_n

  • cat sort_n|sort

  • cat sort_n|sort -n 按 数字大小 从小到大排序

  • cat sort_n|sort -nr 按数字大小从大到小排序

  • cat sort_n|sort -nr -o 1.txt 将排序结果输出

  • cat sort_t

  • cat sort_t|sort -t . -k 1 根据 . 分隔后 按照第1列排序

  • cat sort_t|sort -t . -k 2 根据 . 分隔后 按照第2列排序

  • cat sort_t|sort -t S -k 3 根据 S 分隔后 按第3列排序

  • cat sort_t|sort -t S -k 4 根据 S 分隔后 按第4列排序
    在这里插入图片描述

  • cat sort_V

  • cat sort_V|sort

  • cat sort_V|sort -V
    在这里插入图片描述

2. 去除重复:uniq

  • uniq 去重只会检查上下行是否重复,不检查跨行内容;所以 uniq 去重前会先进行排序,将相同内容放一起
     

  • uniq 常用参数(只检查上下行是否重复)

    • -c:统计重复出现的次数
    • -d:所有邻近的重复行只被打印一次。重复次数要>=2次
    • -D:所有邻近的重复行将全部打印
    • -f:跳过对前n个列的比较
    • -s:跳过对前n个字符的比较
    • -w:只对每行前n个字符进行比较
       
  • uniq -c uniq_demo.txt

  • uniq -c -f 2 uniq_demo.txt 加-f跳过对前2列的比较
     

  • cat uniq_demo.txt |sort -k 3|uniq -c

  • cat uniq_demo.txt |sort -k 3|uniq -c -f 2

  • cat uniq_demo.txt |sort -k 3|uniq -c -f 2|sort 默认排序

  • cat uniq_demo.txt |sort -k 3|uniq -c -f 2|sort -k 1 按第1列直接排序

  • cat uniq_demo.txt |sort -k 3|uniq -c -f 2|sort -k 1 -n 从小到大排序

  • cat uniq_demo.txt |sort -k 3|uniq -c -f 2|sort -k 1 -nr 将 uniq_demo.txt 内容按空格分隔后按第3列排序(-t省略为默认),并且跳过前2列内容统计重复出现的次数,在将得到的内容按空格分隔后按第1列以数字大小从大到小排序(省略-t)
     

  • cat uniq_demo.txt |uniq -f 2 跳过对前2行的比较对第3列去重(只比较上下行)

  • cat uniq_demo.txt |uniq -f 2 -d 对第3列去重,比较所有

  • cat uniq_demo.txt |uniq -f 2 -D 去重并打印所有邻近重复行,没有重复的行(只有一行的数据)不会打印

  • cat uniq_demo.txt |uniq -s 14 -D 跳过前14个字符

  • cat uniq_demo.txt |uniq -w 2 -c 比较前2个字符

3. 字符统计:wc

  • wc 常用参数

    • -c:统计字节数:chars
    • -l:统计行数
    • -w:统计单词数
    • -L:打印最长行的长度
       
  • wc --help

  • cat wc_demo.txt |wc 打印结果显示为:行数 单词数 字符数(包括空格 换行符)

  • cat wc_demo.txt |wc -l 统计行数

  • cat wc_demo.txt |wc -w 统计单词数

  • cat wc_demo.txt |wc -c 统计字符数

  • cat wc_demo.txt |wc -L 打印出最长行的长度

5. Linux三剑客与管道使用

1. 管道

  • 什么是管道?
    Linux提供管道符“|”将两个命令隔开,管道符左边命令的输出就会作为管道符右边命令的输入

  • 示例
    echo "hello1234"| grep 'hello'

2. 正则表达式

  • 什么是正则?

    正则表达式就是 记录文本规则的代码
    在这里插入图片描述

  • 演练环境

    https://tool.oschina.net/regex
     

  • 举例

    • 找出所有的hi单词 \bhi\b
    • hi单词后面有lucy单词 \bhi\b.*\blucy\b
    • 以0开头,然后是两个数字,然后是一个连字 号“-”,最后是8个数字 0\d{2}-\d{8}
  • 常用元字符

在这里插入图片描述

  • 常用限定符

在这里插入图片描述

  • 实战
    • 匹配以字母a开头的单词
      • \ba\w*\b
    • 匹配刚好6个字符的单词
      • \b\w{6}\b
      • \b.{6}\b
    • 匹配1个或更多连续的数字
      • \d+
    • 5位到12位QQ号
      • ^\d{5,12}$

3. grep

  • 定义
    根据用户指定的模式(pattern)对目标文本进行 过滤,显示被模式匹配到的行

  • 命令形式
    在这里插入图片描述

  • 选项

    • -v 显示不被pattern匹配到的行
    • -i 忽略字符大小写
    • -n 显示匹配的行号
    • -c 统计匹配的行数
    • -o 仅显示匹配到的字符串
    • -E 使用ERE,相当于egrep
       
  • 实战1

    • 查找文件内容包含root的行数
      • grep -n root test.txt
    • 查找文件内容不包含root的行
      • grep -nv root test.txt
  • 实战2

    • 查找以s开头的行
      • grep ^s test.txt
    • 查找以n结尾的行
      • grep n$ test.txt

4. sed

  • 定义
    sed是流编辑器,一次处理一行内容

在这里插入图片描述

  • 命令形式

    • sed [-hn..][-e<script>][-f<script FILE>][FILE]
  • 命令解析

    • sed [-hn..][-e<script>][-f<script文件>][文本文件]

      • -h 显示帮助。
      • -n 仅显示script处理后的结果。
    • sed [-hnV][-e<script>][-f<script文件>][文本文件]

      • -e<script> 以选项中指定的script来处理输入的文本文件。
      • -f<script文件> 以选项中指定的script文件来处理输入的文本文件。
  • 常用动作
    在这里插入图片描述

    • a :新增 sed -e ‘4 a newline’
      • -e:指定脚本(脚本内容为4 a newline)
      • 在第4行后面新增加1行,增加的内容为newline
    • c :取代 sed -e ‘2,5c No 2-5 number’
      • 用c后面的内容取代2行到5行的内容
    • d :删除 sed -e '2,5d’
      • 删除2到5行
    • i :插入 sed -e ‘2i newline’
      • 在第2行前面插入1行,插入的内容为newline
    • p :打印 sed -n ‘/root/p’
      • 两个正斜杠间的内容为正则,root为正则表达式
      • 塞尔达匹配到正则后打印
    • s :取代 sed -e 's/old/new/g’
      • 用new取代old
      • /g 代表全局,一行存在多个匹配(替换)的情况下加,负责只替换第1个
  • 实战1

    • 查看帮助
      • man sed
        • 查看信息:用j向下翻页,用k向上翻页
        • 可以使用/来进行查找(比如:/-a)
          • 用n向下翻页,N向上翻页
      • sed -h
    • 在第四行后添加新字符串
      • sed -e '4 a newline testfile' test.txt
      • sed为流处理,在模式空间进行,不对原文件进行修改
  • 实战2
    在这里插入图片描述

  • 实战3
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

5. awk

  • 定义
    把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行后续处理

在这里插入图片描述

  • 命令形式
    在这里插入图片描述

  • 命令解析

    • awk ‘pattern + action’ [filenames]
      • -pattern 正则表达式
      • -action 对匹配到的内容执行的命令(默认为输出每行内容)
  • 常用参数

    • FILENAME awk浏览的文件名
    • BEGIN 处理文本之前要执行的操作
    • END 处理文本之后要执行的操作
    • FS 设置输入域分隔符,等价于命令行 -F选项
    • NF 浏览记录的域的个数(列数)
    • NR 已读的记录数(行数)
       
    • OFS 输出域分隔符
    • ORS 输出记录分隔符
    • RS 控制记录分隔符
    • $0 整条记录
    • $1 表示当前行的第一个域…以此类推
       
  • 实战1

    • 大括号{}里面代表动作,大括号外面代表正则
    • awk -F : '/root/{print $7}' /etc/passwd
    • awk -F : 'NR==2{print $0}' /etc/passwd
      在这里插入图片描述
  • 实战2
    在这里插入图片描述

6. Bash编程语法

1. 变量

  • 规则

    • 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头
    • 中间不能有空格,可以使用下划线(_)
    • 不能使用标点符号
    • 不能使用bash里的关键字(可用help命令查看保留关键字)
  • 定义与使用变量

    • 定义变量 your_name="abc"
    • 调用变量 echo $your_name
  • 只读变量

    • a="123"
    • readonly a
  • 删除变量

    • unset variable_name
    • 不能删除只读变量
  • 变量类型

    • 字符串:your_name=“hogwarts”
    • 拼接字符串:greeting=“hello, “$your_name” !”
    • 数组 array_name=(value0 value1 value2 value3)
      • 取数组 valuen=${array_name[n]}
      • 单独赋值 array_name[0]=value0
  • 实战1

    • 使用变量
      • a = “abc”
      • echo $abc
    • 删除变量
      • unset a
  • 实战2

    • *或@打印整个数组
    • 指定哪个,哪个有值
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

2. 控制语句

  • 条件分支:if
    • if 定义
      在这里插入图片描述

    • if

      • 使用大于或小于要用2个中括号
      • 如果要使用1个 就要用-gt -lt
        在这里插入图片描述
    • 实战

      • 比较两个变量的大小并输出不同的值
        • i f [ $a -eq $b ]; then echo “equal”; elif [ $a -lt $b ];then echo “small”; elif [ $a -gt $b ];then echo “big”;fi

  • 循环:for
    • for 定义
      在这里插入图片描述

    • for
      在这里插入图片描述

    • 实战

      • 循环读取文件内容并输出
        • for i in $(cat dir.txt);do echo $i;done
        • $加()括起来表示整个内容是一个命令

  • 循环:while
    • while 定义

      while condition
      do
      	command
      done
      
    • while

      int=1
      while(($int<=5))
      do
      	echo $int
      	let "int++"
      done
      
    • 实战

      • 循环读取文件内容并输出
        • while read line;do echo $line;done<dir.txt

如果读取的文件中一行内容中有空格(abc 123),使用for循环会分开打印两行内容,使用while打印一行


7. Bash脚本编写

1. Bash 基本使用

  • read 命令

    • read命令是用于从终端或者文件中读取输入的内部命令
    • 读取整行输入
    • 每行末尾的换行符不被读入
  • read 命令使用

    • 从标准输入读取输入并赋值给变量
      • read var
    • 从标准输入读取多个内容
      • read var1 var2 var3
    • 不指定变量(默认赋值给REPLY)
      • read
  • 脚本传参 传递

    • $0 脚本名称
    • $1~$n 获取参数
    • $# 传递到脚本的参数个数
    • $$ 脚本运行的当前进程ID号
    • $* 以一个单字符串显示所有向脚本传递的参数
    • $? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误

2. 基本运算

  • 算数运算1

    • a=10 b=20
    • + 加法 expr $a + $b 结果为 30
    • - 减法 expr $a - $b 结果为 -10
    • * 乘法 expr $a \* $b 结果为 200
    • / 除法 expr $b / $a 结果为 2
    • 要使用反引号括起来
    • 乘法要写转义
  • 算数运算2

    • a=10 b=20
    • % 取余 `expr $a % $b` 结果为 10
    • = 赋值 a=$b 将把变量 b 的值赋给 a
    • == 相等 相同则返回 true:[ $a == $b ] 返回 false
    • != 不相等 不相同则返回 true:[ $a != $b ] 返回 true
  • 算数运算3

    • -eq 检测相等 [ $a -eq $b ] 返回 false
    • -ne 检测不相等 [ $a -ne $b ] 返回 true
    • -gt 检测左边是否大于右边 [ $a -gt $b ] 返回 false
    • -lt 检测左边是否小于右边 [ $a -lt $b ] 返回 true
    • -ge 检测左边是否大于等于右边 [ $a -ge $b ] 返回 false
    • -le 检测左边是否小于等于右边 [ $a -le $b ] 返回 true

3. bash 与 linux命令组合

  • bash与目录命令

    • 创建目录并生成文件
      • mkdir test
      • cd test
      • echo “hello” > test.txt
      • ls
  • bash与内存

    • 统计内存使用
    for i in `ps aux |awk '{print $6}' |grep -v 'RSS'`
        count=$[$count+$i]
    echo "$count/kb"
    

bash test.sh 123
#
echo $1,$2,$3

.
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8. linux进阶命令

what

  • curl is a tool to transfer data from or to a server
  • support protocols
    • DICT,FILE,FTP,FTPS,GOPHER,HTTP,HTTPS,IMAP
  • without user interaction

proxy support

  • curl -x 127.0.0.1:8888 https://www.baidu.com

get

  • -G:使用get请求
  • -d:指定请求数据
  • curl https://www.baidu.com
  • curl -G https://www.baidu.com
  • curl -X GET https://www.baidu.com

post

  • -d:指定post请求体
  • curl -d 'login=1234' https://www.baidu.com
  • curl -X POST https://www.baidu.com

other

  • 保存响应内容
    • curl -o tmp.html https://www.baidu.com
  • 输出通信的整个过程
    • curl -v https://www.baidu.com
  • 不输出错误和进程信息
    • curl -s https://www.baidu.com

iq

  • A jq program is a filter
  • it takes an input, and produces an output
  • https://stedolan.github.io/jq/

using

  • . 格式优化
  • echo '{"a":11,"b":12}' | jq '.'
  • it takes an input, and produces an output

常用方法1

  • 内容提取
    • echo '{"foo":42,"bar":"less interesting data"}' | jq .foo

常用方法2

  • 从数组中提取单个数据
    • echo '[{"a":1,"b":2},{"c":3,"d":4}]' | jq .[0]
  • 从数组中提取所有数据
    • echo '[{"a":1,"b":2},{"c":3,"d":4}]' | jq .[]
  • 过滤多个值
    • echo '[{"a":1,"b":2},{"c":3,"d":4}]' | jq .[0,1]

常用方法3

  • 数据重组成数组
    • echo '{"a":1,"b":2,"c":3,"d":4}' | jq '[.a,.b]'
  • 数据重组成对象
    • echo '{"a":1,"b":2,"c":3,"d":4}' | jq '{"tmp":.b}'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值