一、测试环境配置管理

第一阶段_全栈测试环境配置管理

1.1 物理机测试环境管理

第1章 计算机体系结构

  • 计算机中

    • 表示信息的最小单位 - 位 -bit

    • 处理信息的额最小单位 - 字节 - Byte

  • 计算机硬件系统的五大构成

    • 运算器

    • 控制器

    • 储存器

    • 输入设备

    • 输出设备

  • 指令集

    • 是CPU中用来计算和控制计算机系统的一套指令的集合

    • 指令集分为 CISC(复杂指令集)、RISC(精简指令集)

    • 复杂指令集

      • 按照顺序串行执行

      • 控制简单

      • 利用率不高,执行速度慢

    • 精简指令集

      • 指令数目少

      • 执行时间短

  • 一维线性寻址

    • 在查找过程中,按照一个方向或者一条线路找到所需的数据

  • ROM - 只读存储器

    • 数据只能读不能改,数据一旦存入,永久保存,断电数据不丢失

  • RAM - 随机存储器

    • 数据可读可改,数据断电立即丢失,不保证数据安全

  • Cache高速缓冲存储器

    • 一级缓存: 存储整数

    • 二级缓存: 存储浮点数

    • 三级缓存: 存储除了整数、浮点数之外的所有数据或者信息

  • 北桥芯片 - 主桥

    • 管理CPU、内存

  • 南桥芯片

    • 管理USB、网卡

  • 总线 - (硬件)

    • 计算机各种功能部件之间传递信息的而公共通信干线

    • 总线的分类

      • 数据总线 : 是CPU与内存或其他器件之间的数据传送的通道

      • 地址总线 : 地址总线决定了CPU锁能访问的最大内存空间的大小

      • 控制总线 : 实现CPU对外部器件的控制

  • BIOS(Basic Input/Output System)

    • 用于计算机开机过程中各种硬件设备的初始化和检测的芯片

      • 硬件自检

        • 通电自检、显卡自检、CPU自检、内存自检、硬盘自检、其他输入输出设备自检 ,自检结束后,把引导权交给操作系统

      • 硬件信息初始化

      • 引导系统

      • 控制输入输出设备的信息传递

第二章 SVN配置和管理

SVN是Subversion的简称,是一个开放源代码的版本控制系统(用于多人共同使用一个项目,公用资源的目的)

SVN的核心是配置库,储存所有的数据,

第三章 计算机网络

  • OSI/RM : 开放系统互联参考模型

    • 应用层(第七层) application

      • 所有应用程序的网络在此展开,确定进程之间通信的性质以满足用户需求

      • 提供OSI用户服务,如事务处理、文件传输、数据检索、玩过管理、加密

    • 表示层(第六层) presentation

      • 表示数据形式,完成对传输数据的转化

      • 代表应用层协商数据表示

      • 完成对传输数据的转化,如格式化、加/解密、解压缩

    • 会话层(第五层) session

      • 负责建立维护拆除会话,为端系统的应用程序之间提供了对话控制机制

      • 提供两进程之间建立、维护和技术会话连接的功能

      • 管理会话

      • 同步数据

    • 传输层(第四层) transport

      • 负责建立可靠的端到端的连接,包括数据核对和初步整理

      • 建立、维护、撤销传输连接 -- 端到端的连接

      • 流量控制,差错控制

    • 网络层(第三层) network

      • 负责路由寻址和广播

      • 路由选择和中断

      • 流量控制

    • 数据链路层(第二层) data link

      • 负责将上层(物理层)数据封装成帧

      • 传输管理 : 为网络层提供低出错率、高可靠性的数据链路

      • 流量控制 :协调主机和通信设备之间的数据传输率

    • 物理层(第一层) physical

      • 传输0 1 二进制biteliu,为数据链路层提供服务,

      • 从数据链路层接收数据,并按规定格式发送数据

      • 向数据链路层提供数据

  • 计算机网络体系结果通信原理包括两方面

    • 数据通讯原理

      • 发送端自上而下传输(直到物理层),接收端自下而上传输(直到发送端发起通信的层次)

    • 对等会话原理

      • 发送端和接收端只有在对等层才可进行通信,不同层次传输的数据格式不一样

        • 应用层、表示层和会话层以报文方式传输

        • 传输层以报文或者报文分段方式传输

        • 网络层以分组当时传输

        • 数据链路层以帧方式传输

        • 物理层以比特流方式传输

      • 发送端每经过一层(物理层除外)都要在原数据上进行协议封装,即在最前面加装一个本层所使用协议的协议头; 接收端没经过一层就要对原数据进行协议解封,即去掉原数据最前面的上层协议头

  • TCP/IP

    TCP/IP 对应的协议
    应用层/Application FTP、HTTP、Telnet、SMTP、POP3、DNS
    传输层/Transport TCP、UDP
    互联网层/Network IP、ICMP、ARP
    网络接口/Link
  • IP(Internet Protocol)协议

    • 对数据包寻址和路由,并从一个网络转发到另一个网络

  • ICMP协议

    • ICMP(Internet Control Message Protocol) 互联网控制报文协议,主要用于侦测远端主机是否存在、建立及维护路由资料、重导资料传输路径、资料流量控制

    • ping命令 : 探测能否连通指定计算机

    • tracert : 跟踪路由器

  • ARP(address Resolution Protocol)地址解析协议

    • 用于将IP地址转换为MAC地址

    • ipconfig /all 或 getmac /v 查看MAC地址

  • UDP和TCP协议

    • UDP协议(User Datagram Protocol,用户数据报协议)

      • 无连接

      • 不可靠

      • 可靠性由上层协议保证

    • TCP协议

      • 面向连接,支持端到端的通信

      • 进行无差错控制,传输可靠

      • 进行必要的流量控制,避免发包过快而导致堵塞

    • TCP的三次握手

    • image-20200410165115185

应用层协议 :

  • FTP (File Transfer Protocol) 文件传输协议

    • 用于文件上传和下载

  • HTTP (Hyper Text Transfer Protocol) 超文本传输协议

    • 用于访问网站

  • Telnet 远程协议

    • 用于远程连接计算机

  • SMTP 简单邮件传输协议

    • 发送邮件

  • DNS 域名解析

    • 将域名解析为IP地址,将IP地址解析为域名

  • DHCP 动态主机配置协议

    • 自动分配IP地址

 

  • DNS查询方式

    • 递归查询 : DNS客户机发送到DNS服务器查询,DNS服务器查不到域名会去查询其他DNS服务器,直到查询到为止

    • 重复(迭代)查询: 当DNS客户机发送到DNS服务器查询,DNS服务器查不到会发送给客户机相应的DNS服务器,让客户机去访问其他DNS服务器再次查询

1.2 虚拟机测试环境管理

doc命令

目录操作命令

  • md - 创建新目录 (make directory)

    md test  新建test文件夹
    md test1\test2 创建test1并在test1下创建test2
    md test3 test4 同时创建test3和test4文件夹
  • cd - 改变工作目录 (change directory)

    • cd \ 切换到当前磁盘的根目录

    • cd 盘符: 切换到指定磁盘

    • cd .. 切换到上级目录

  • dir - 列出目录内容

    • dir c:\ 查看c盘下的目录内容

    • dir /s 递归显示目录中的内容和文件

    • dir /? 查看帮助

  • tree - 倒立树形式

    • tree 目录名 以倒立树形式显示目录中的内容

    • tree /f 目录名 显示文件,默认只显示目录

  • ren 重命名文件夹

    • ren 源文件名 新文件名

  • xcopy 复制

    • xcopy 源目录 新目录\ 最后必须加\

    • xcopy 源目录 新目录 /e 复制目录和子目录,包括空目录,e表示empty

  • move - 移动/改名

    • move 源目录 目标目录 ()不存在的目标目录就是改名操作

  • rd - 删除 - (remove directory)

    • rd /s 目录名 递归删除

    • rd /q 目录名 无需确认删除

文件操作名

  • 创建文件

    • 盘符:>文件名 c:>1\1.txt

  • echo - 输出显示信息

    • echo hello

  • type - 查看文件

    • type 1\1.txt

  • ren - 重命名

    • ren 原文件名 新文件名

  • copy - 拷贝

    • copy 源文件 目的路径文件

  • move - 移动文件

    • move 源文件 目的路径文件

  • del - 删除

    • del 文件名

  • more - 分屏显示文件内容

    • more 文件名

通配符

  • * - 星号

    • 用星号代替0个或多个字符

    • dir *.txt 查找所有后缀是txt 的文件

  • ? - 问号

    • 用问号代替1个字符

    • dir /s ?1?.txt 递归查找文件

管道命令

  • >

将命令结果写入到文件中 - 覆盖写入

echo hello > file.txt
ipconfig> file1.txt
  • >>

将命令结果写入文件末尾 - 追加写入

echo hey >> file.txt
  • |

dir /s c:\ | more  分屏显示前面的结果

批处理文件

批处理 : 将dos命令按照一定顺序,编写在一个文件中,统一执行,文件扩展名是.bat (batch)

@echo off   # echo off 表示不显示源代码
rem 这是注释   # rem所在的行会被注释
echo 1
echo 2
echo 3
pause   # pause 表示停止,程序执行完不会退出cmd命令窗口
  • for循环

    for /L %%I in (初值,步长,终值) do 命令 L表示使用迭代数值范围,可大小写

    屏幕输出1到10

    @echo off  
    echo 这段代码显示1到10
    for /l %%i in (1,1,10)  do echo %%i
    pause

    创建100个文件,分别写入内容

    @echo off  
    echo 这段代码创建100个文件
    for /l %%i in (1,1,100) do echo 张三 %%i >张三%%i.txt
    echo 全部创建完成
    pause

    给计算机添加100个ip

    • 添加一个ip

    添加一个ip
    netsh interface ip add address "本地连接" 172.16.0.2 255.255.0.0 172.16.0.1
    添加dns
    netsh interface ip add dns "本地连接" 114.114.114.114
    删除
    netsh interface ip delete address "本地连接" 172.16.0.2

 

Linux

1.目录结构

1. /boot : 启动目录,存放内核
2. /etc : 存放配置文件
3. /tmp : 程序产生的临时文件
4. /home : 用户目录,新增用户时,用户的家目录就存放在此目录中
5. /lib : 库文件,程序在执行过程中需要调节一些额外的参数时需要函数库的协助
6. /bin : 可执行文件和常用的Linux命令
7. /sbin : 系统管理员的命令和工具
8. /usr : 应用程序和文件的安装目录
9. /mnt : 挂载其他文系统
10. /root : root账户的home目录
11. /dev : 存放Linux系统下的设备文件

2. vi命令

  • 功能 : 生成新文件或者编辑、查看文件

  • 格式 : vi file_name 直接进入命令模式

  • 进入编辑模式

    • i 插入文本

    • a 追加文本

  • ESC 退出编辑模式进入命令模式

  • 命令模式下课执行的操作

    1. :w 保存文件
    2. :wq 保存并退出文件
    3. :wq! 强制保存并退出文件
    4. :q 退出
    5. :q! 强制退出
    
    6. :dd 删除一行文字
    7. :x 删除一个字符
    8. :n 光标移至第n行
    9. $ 光标移至文本行尾
    10 G 光标移至最后一行
    11. / 查找摸个字符. /hello world  

3. cd命令

pwd : 打印用户当前所处的路径 (print work directory)

cd命令 :改变用户所在目录 (change directory)

  • cd .. 返回当前目录的上一级目录

  • cd ~返回当前用户的主目录 例如当前用户是root,使用cd命令后,直接切换到/root目录下

  • cd 返回当前用户的主目录 等同于cd ~

  • cd - 切换上一个工作目录

3. ls命令

  • 功能描述 : 显示目录下的内容 (list directory)

  • 格式 : ls [参数] [目录或文件]

  • 参数选项

    选项 含义
    -a 列举目录中的全部文件,包括隐藏文件
    -l 列举目录中的详细信息,包括权限、所有者、群组、大小,创建日期等等 ls -l 可缩写为ll
    -r 逆向,从后向前列举目录中内容
    -R 递归,递归列举当前目录下所有子目录的内容
    -s 显示大小size

    例子 : ls -l 1.txt 列举1.txt文件的所有信息

4. grep命令

grep是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。

grep "搜索的内容" 文件路径

5.cp命令

  • 功能描述 : 复制文件

  • 格式 : cp [源文件] [目标文件]

  • 参数选项

    选项 含义
    -i 互动 : 如果文件将覆盖目标中的文件,会提示
    -r 递归 : 复制整个目录、子目录等所有文件
    -v 详细 : 显示文件的复制进度
  • 示例 : cp 1.txt /root/1.txt

  • 复制并修改名字 : cp 1.txt 2.txt 复制并修改1.txt为2.txt

6. mv命令

  • 功能描述 : 移动文件或文件夹 也可对目标重命名

  • 格式 : mv [源对象] [目标对象]

    选项 含义
    -i 互动 : 如果文件将覆盖目标中的文件,会提示
    -f 强制 : 不提示,直接移动文件
    -v 详细 : 显示文件的移动进度
  • 示例 :

    • 移动文件 : mv 1.txt /root/1.txt

    • 重命名 : mv 1.txt 2.txt

7. mkdir命令

  • 功能描述 : 创建文件夹 (make directory)

  • 格式 : mkdir [目录名1] [目录名2] ... 同时创建多个文件夹

  • 递归创建文件夹 : mkdir -p a/b/c

8. rmdir命令

  • 功能描述 : 删除空目录 (remove directory)

  • 格式 : rmdir [参数] [目录1] [目录2] ...

  • -p参数: 删除指定目录后.若该目录的上级目录变成空目录,将其一并删除

    • 示例 : rmdir 1/2/3/4 -p (1 2 3 4都是文件夹,且都没有文件)

9. rm命令

  • 功能描述 : 删除文件

  • 格式 : rm [参数] [文件]

    选项 说明
    -i 互动 : 提示确认删除
    -f 强制 : 代替互动,不提示确认直接删除
    -v 详细 : 显示文件删除的进度
    -r 递归 : 删除目标目录内的所有文件和目录

10. man命令

  • 功能描述 : 帮助指令,通过man指令可以查看Linux中的指令帮助、配置文件帮助和编程帮助等信息。

  • 格式 : ,man 命令

  • 示例 : man ls

  • 按q退出

11 locate命令

locate命令其实是find -name的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库/var/lib/locatedb,这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。

  • 格式 : locate 目标名

12. whatis命令

  • 功能描述 : 用于查询一个命令执行什么功能,并将查询结果打印到终端上。whatis命令等同于使用man -f命令。

  • 格式 : whatis 命令

  • 示例 : whatis mv

13 文件备份和压缩命令

bzip2命令

  • 功能 :压缩文件,后缀格式为bz2,不可以打包文件夹

  • 格式 : bzip2 filename

  • 注意 : 压缩文件后,源文件会被删除,解压一样

  • 示例 : bzip2 1.txt 就会生成一个1.txt.bz2的压缩文件,并且原文件1.txt会被删除

    • bzip 1.txt 2.txt ... 这个命令会分别将1.txt 2.txt ...分别压缩

  • 解压 : bunzip2 1.txt.bz2

gzip命令

  • 功能 : 压缩文件, 文件后缀为gz ,不可以打包文件夹

  • 格式 : gzip filename

  • 注意: 压缩文件后,源文件会被删除,解压一样

  • 解压 : gunzip filename

  • -r参数 : 使用-r参数后,目录下的所有文件将会被递归单独压缩

tar命令

  • 功能描述 : 打包、解压文件,可以打包文件夹,且解压缩后保留原文件

  • 格式 : tar [参数] [打包后的文件名] [需要打包的文件或者目录文件夹]

    参数 说明
    -c 创建压缩文件
    -x 归档从解中出文件
    -t 显示在tar文件中的文件列表
    -f 指定要展开的归档的文件名
    -v 详细地列出处理的文件
    -z 解压缩gz格式文件
    -j 解压缩bz2格式文件
  • 示例 :

    • 压缩tar文件 : tar cvf t.tar file/

    • 解压文件 : `tar xvf t.tar

  • 在不解压的情况下查看压缩内部文件

    • tar tvf xx.tar

  • 用tar 创建bzip2类型压缩文件

    • 压缩 : tar -cjvf filename.tbz file

    • 解压 : tar -xjvf filename.tbz

  • 用tar创建gzip类型压缩文件

    • 压缩 : tar -czvf filename.tgz file

    • 解压 : tar -xzvf filename.tgz

14. head命令

  • 功能描述 : 用于显示文件的开头的内容。在默认情况下,head命令显示文件的头10行内容。

  • 格式 : head -n 文件名 查看文件的前n行

15. tail 命令

  • 功能描述 : 用于显示文件结尾的内容

  • 格式 : tail -n 文件名 查看文件最后n行

16. more命令

  • 功能描述 : 分页查看文件内容

  • 格式 : more -n filename 每次显示n行,n可省略

    • more +n filename 从第n行开始显示

  • 查找功能 : 查找到的结果是在该出的前两行开始显示输出的

    • more +/hello 1.txt 在1.txt文件中查找"hello"

  • 配合管道符使用

    • 当使用命令打印到屏幕的内容太多可以使用more命令

      • ll /etc | more -5

17. which命令

  • 功能描述 : 依次从path环境变量中查找命令的位置,并显示完整的路径,扎到一个就停止查找了

  • 格式 : which 命令

  • 示例 : which ls

18. whereis命令

  • 功能描述 : 用来定位指令的二进制程序、源代码文件和man手册页等相关文件的路径

  • 格式 : whereis 程序名

  • 参数 :

    • -b : 只查找二进制文件

    • -m: man说明文件,查找说明文档路径

  • 示例 : whereis cd whereis passwd 将和passwd文件相关的文件都查找出来

19. chmod命令

  • 功能描述 : 用来改变文件属性权限许可

  • 参数选项 : -R 以递归方式更改目标文件及其子目录

  • 操作对象

    • U - 文件属主权限

    • g - 同组用户权限

    • o - 其它用户权限

    • a - 所有用户(包括以上三种)

  • 权限设定

    • + 增加权限

    • - 取消权限

    • = 唯一设定权限

  • 权限类别

    • r - 读权限 4

    • w - 写权限 2

    • x - 执行权限 1

    • X - 表示只有当该档案十个子目录或者该档案已被设定过为可执行

    • s - 文件属主和组id

    • i - 给文件加锁,使其它用户无法访问

  • 示例 :

    1. 所有人都可读 :
    	chmod ugo+r 1.txt
    	chmod a+r 1.txt
    2. 创建拥有者可执行权限 :
    	chmod u+x 1.txt
    3. 将test下的所有文档与子目录都设为任何人可读
    	chmod -R a+r ./test/
    4. 回收所有用户多1.txt的执行
    	chmod a-x 1.txt
    5. 所有人可读、可写、可执行
    	chmod a=rwx 1.txt
    	chmod 777 1.txt
    6. 所有用户+可执行权限	
    	chmod +x 1.txt
    7. 锁定文件- 无法删除
    	chattr +i 1.txt

chgrp命令

  • 作用 : 用于改变文件或者目录的所属群组

  • 格式 : chgrp 用户名 文件名

 

20. 用户管理命令

  • 添加用户 :

    • useradd [用户名] 例如 :useradd zhang

  • 删除用户

    • userdel [参数] [用户名]

      • 例 : userdel zhang 删除用户,单不删除用户的家目录

  • 例: userdel -r zahng 删除用户,并删除用户的家目录

  • su命令 :

    • 功能 : 用于切换当前用户身份到其他用户身份,变更时须输入所要变更的用户帐号与密码。

    • 语法 : su 用户名

    • su 用户 切换用户,但是环境变量保持当前已登录用户的环境

    • su -l 用户 表示切换用户,并且载入切换用户的环境变量

  • 修改密码 : passwd 用户名 回车后设置新密码

21. 关机等命令

  • exit - 退出 (快捷键 Ctrl +D)

  • 重启 :

    • reboot 立即重启

    • shutdown -r now 立即重启

    • shutdown -r 12:00 在12:00重启

  • 关机

    • poweroff

    • shutdown -h now立即关机

    • shutdown -h 12:00 在12:00关机

    • shutdown -t 5 五分钟后关机

22.查看系统进程命令

ps命令 - 静态

用于报告当前系统的进程状态。可以搭配kill指令随时中断、删除不必要的程序。

  • ps u 列出使用者的名称和使用时间

  • ps x 列出所有程序的分布情况 (查询出所有的进程号pid)

top命令 - 动态

  • 几秒钟更新一次系统状态, Ctrl + C 或者 q 退出

kill命令

  • 用来终值正在执行中的进程

  • 格式 : kill 进程号

23 时间日期

  • date

    • 用来设定和修改当前时间和日期

    • date -u 使用格林尼治时间

    • date -r 1.txt 查看最后一次修改1.txt文件的时间

    • date -s 18:00 设置时间

  • cal 日历

    • cal 2020 显示着一整年的日历

    • cal 6 2020 显示2020年6月的日历

24. 磁盘空间命令

df命令

  • 功能 : 检查磁盘的使用量

  • 参数 : -a 可以列出全部文件系统和各分区的磁盘使用情况

du命令

  • 功能 : 显示文件目录的大小

  • 格式 : du 参数 文件名

  • 参数 : -ab 列出所有文件和目录所占的空间

25. 网络操作命令

  • ifconfig : 显示当前网络设备状态

  • ping : 检查是否连通了远程主机

  • netstat : 显示整个Linux系统的网络情况或显示网络状态

    • netstat -a 详细显示网络状态

    • netstat -apu 显示UDP端口号的使用情况

Linux网络配置

  • 动态获取IP地址配置 (DHCP)

      1. 进入配置文件夹 cd /etc/sysconfig/network-scripts/

      2. 一般修改配置文件ifcfg-ens33 vi ifcfg-ens33

        需要修改的参数 :
            BOOTPROTO=dhcp
            ONBOOT=yes
      3. server network restart 重启网卡

  • 网卡静态IP配置

      1. 进入配置文件夹 cd /etc/sysconfig/network-scripts/

      2. 一般修改配置文件ifcfg-ens33 vi ifcfg-ens33

        BOOTPROTO=static
        ONBOOT = yes
        IPADDR=192.168.1.120  # 设置ip地址
        NETMASK=255.255.255.0 # 设置子网掩码
        GATEWAY=192.168.1.1  #设置网关
      3. server network restart 重启网卡

26. 其他命令

  • clear - 清屏

  • echo

    • 回显文字或者查看环境变量

    • echo $PATH # 查看PATH的取值

  • uptime 系统运行时间

  • wc 计算字数

    • 格式 : wc 参数 文件名 默认情况下,wc将计算指定文件的行数、字数已经字节数

    • 参数

      • -c 只显示Bytes数

      • -l 只显示行数

      • -w 只显示字数

         

shell编程

shell 是一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务

shell脚本是一种为shell编写的脚本程序

1. shell脚本格式

  • vi filename.sh 创建脚本

  • shell中开头用 "#" 表示被注释 ,shell中没有多行注释

  • 脚本第一行格式:

    #!/bin/bash

    符号 “#!” 用来指定该脚本文件的解析程序, 这里使用的是bin目录下的bash解析器.写好脚本后,必须有可执行的属性,

    vi test1.sh

    #! /bin/bash
    echo "hello world"
  • 脚本的执行

    • 方式一 :

      • 给可执行的权限 chmond +x test1.sh

      • 执行 : ./脚本文件名

    • 方式二 :

      • /bin/bash 脚本名 直接执行,不再需要给脚本文件添加权限

2. shell中的变量

shell变量分两种,一种是系统默认变量,一种是用户自定义变量

name="自定义变量" 变量名和等号之前不能有空格

调用用户自定义变量 在自定义变量前加 “$”

  • 变量名的命名规则

    • 首个字符必须是字母

    • 中间不能有空格,可以是下划线

    • 不能使用标点符号

    • 不能使用bash的关键字

    #! /bin/bash
    a=12345
    str="早安"
    echo $a
    echo $str
    echo ${str}   # 花括号加不加不影响结果,花括号目的是帮助解释器识别变量大的边界
    当输出语句是 " echo "this is $abcd"的时候, 输出结果是 “this is” 
    原因是系统bash解释器把abcd当做了一个变量,而在系统中找不到这个变量
    解决办法 : 用花括号把变量名括起来
  • 只读变量 - readonly

    • 使用readonly命令可以将变量定义为只读变量,只读变量的值不能被改变

      #!/bin/bash
      a=5
      readonly a
      a=6
      执行的时候会报 "test1.sh:行4: a: 只读变量"
  • 删除变量 - unset

    • 格式 : unset 变量名 unset不能删除只读变量

3. 字符串操作

  • 字符串拼接

    #!/bin/bash
    a="hello"
    b="world"
    c="${a} ${b}"
    echo $c  # 结果 : hello world
  • 获取字符串长度

    #!/bin/bash
    a="hello"
    echo ${#a}
  • 提取子字符串

    从下面的变量a中提取world

    #!/bin/bash
    a="hello world"
    echo ${a:6:10}   # 从0计数  索引0开始

4. shell数组

数组 : 相当于多个相同类型变量组成的集合。shell中没有限定数组的大小

定义数组 :

  • 在shell中,用括号来表示数组,数组元素用 "空格" 符号分割开

  • 定义数组的形式 : 数组名=(值1 值2 值3 ...)

    array=(0 1 2 3)
  • 还可以单独定义数组的各个元素

    array[0]=0
    array[1]=1
    array[2]=2
    array[3]=3
对数组的操作
  • 格式 : ${数组名[下标]}

    #!/bin/bash
    num=("one" "two" "three")
    echo ${num[1]}  # 输出two
    echo ${num[@]}  # 输出全部元素
  • 获取数组的长度

    • 获取数组元素的个数

      #!/bin/bash
      num=("one" "two" "three")
      echo ${#num[@]}  #结果 : 3
    • 获取数组中单个元素的长度

      #!/bin/bash
      num=("one" "two" "three")
      echo ${#num[2]}  # 结果 :5

#####

5. shell基本运算符

expr是一款表示计算工具,使用它能完成表达式的求职操作

1. 算数运算符

两个数相加

#!/bin/bash
num=`expr 1 + 2`  # 注意,使用的是反引号 "`" ,且表达式和运算符之间是有空格的,完整的表达式要被放在反引号中
echo ${num}

设置变量a=10 ,b=20

运算符 说明 举例
+ 加法 expr $a + $b
+ 减法 expr $a - $b
* 乘法 expr $a \* $b 转义字符\
/ 除法 expr $a / $b
% 取余数 expr $a % $b
= 赋值 a=$b 把b变量的值赋给a
== 判断是否相等 [ $a == $b ] 相等返回ture 不等返回false
!= 判断是否不等 [ $a != $b ] 不等返回true,相等返回false

 

2. 关系运算符

关系运算符只支持数字,不支持字符串,除非字符串的值是数字

设置变量a=10 ,b=20

运算符 说明 举例
-eq 判断两个数是否相等, [ $a -eq $b ]
-ne 判断两个数是否不等 [ $a -ne $b ]
-gt 判断左边的是否大于右边的 [ $a -gt $b ]
-lt 判断左边的是否小于右边的 [ $a -lt $b ]
-ge 判断左边的是否大于等于右边的 [ $a -ge $b ]
-le 判断左边是否小于等于右边的 [ $a -le $b ]
3. 布尔预算法

设置变量a=10 ,b=20

运算符 说明
! 非运算, 取结果的反
-o 或运算, 前后有一个是true就返回ture
-a 与运算, 前后结果都为ture,结果才返回true
4. 逻辑运算符
运算符 说明
&& and
|| or
5. 字符串运算符

设置变量a="hello" ,b="world"

运算符 说明 举例
= 判断两个字符串是否相同 [ $a = $b ]
!= 判断两个字符串是否不等 [ $a != $b ]
-z 判断字符串长度是否为0 [ -z $a ]
-n 判断字符串长度是否不为0 [ -n $b ]
str 判断字符串是否不为空(null) [ $a ]
6. 文件测试运算符
-d filename 判断文件是否是目录 举例
-f filename 判断文件是否是普通文件 [ -d $filename ]
-r filename 判断我呢间是否可读 [ -f $filename]
-w filename 判断文件是否可写 [ -w $filename]
-x filename 判断文件是否可执行  
-s filename 判断文件是否为空(大小为0)  
-e filename 判断文件(包括目录)是否存在  
!/bin/bash
file=test1.sh  # 若不在同一目录下,路径要写完整
if [ -w $file ]
then
 echo "可写"
else
 echo "不可写e"
fi

 

6. 条件判断

if语句
  • 格式一 :

    if [判断条件]
    then
    	语句块
    fi  # fi是结束语句
    !/bin/bash
    a=10
    b=20
    if [ $a != $b ]
    then
     echo "ture"
    fi

     

  • 格式二 :

    if [判断条件]
    then
    	语句块
    else
    	语句块
    fi
    /bin/bash
    a=10
    b=20
    if [ $a == $b ]
    then
     echo "ture"
    else
     echo "false"
    fi
case语句
  • 格式 :

    case $变量名 in
     "第一个变量内容")
     语句块
     ;;
     "第二个变量内容")
     语句块
     ;;
     "第三个变量内容")
     语句块
     ;;
     *)
     不符合以上变量内容的执行的程序块
     ;;
     esac

    示例 :

    #!/bin/bash
    echo "请输入数字点餐!"
    read num
    case $num in
     "1")
     echo "小葱拌豆腐"
     ;;
     "2")
     echo "拍黄瓜"
     ;;
     "3")
     echo "小咸菜"
     ;;
     *)
     echo "群英荟萃"
     ;;
     esac

     

7. 循环

while循环
  • 格式

    while ((判断条件))
    do
     语句块
    done
  • 跳出循环

    • break 跳出整个循环体

    • continue 跳出本次循环,继续下次循环

  • 示例

  • 输出1至5之间的数字

    #!/bin/bash
    num=1
    while (( $num<=5))
    do
     echo $num
     let num++
    done

    let命令用于执行一个或多个表达式,计算变量中不需要加$来表示变量

    #!/bin/bash
    # 输出1-100之间的偶数
    num=1
    while (($num<=100))
    do
    if [ $(($num%2)) == 0 ]
    then
    echo $num
    fi
    let num++
    done
for循环
  • 格式 一

    for ((初始值;条件;运算语句))
    do
     程序段
    done
    • 示例

    #!/bin/bash
    # 循环打印1-10
    for ((i=1;i<=10;i++))
    do
    echo $i
    done
  • 格式二

    for 变量名 in 值1 值2 ...
    do
     程序段
    done
    • 示例

      #!/bin/bash
      # 循环打印1-10
      for i in 1 2 3 4 5 6
      do
      echo $i
      done

       

8. echo命令

  • 作用 : 用于字符串的输出

  • 格式 :echo "内容"

    • 显示转义 : echo "\"it is a test\"" 利用 ""转义符将引号转义

    • 显示变量 :

      #!/bin/bash
      a=1
      echo $a
    • 显示换行 : echo -e "hello\n" # -e开启转义

  • 常见的转义字符

转义符 含义
\b 后退
\n 换行
  不换行
\t 水平制表符
\ 反斜杠字符 \
-e 开启转义
  • 显示的结果定向至文件 : echo "hello world" > 1.txt 清空写 >>是追加写

  • 新式命令的执行结果 :

    echo `date`
  • 显示变量

    read命令 : 从标准输入中读取一行 , 并把输入行的值指定费shell变量

    #!/bin/bash
    echo "加法运算""
    echo "请输入第一个数:"
    read a
    echo "请输入第二个数:"
    read b
    c=`expr $a + $b`
    echo "结果 :${c}"

9. printf命令

  • 格式 : printf 格式声明 与格式声明对应的参数列表

  • 格式声明 : 格式声明由两部分组成 : 百分比符号 指示符

    • %d : data 数字

    • %s : str 字符串

    • %c : char 字符

    • %f : float 浮点数

    • %-10s : 指一个宽度为10个字符(-表示左对齐,没有表示右对齐) 字符超过不显示,不超过空白填充

    • %-4.2f : 格式化为小数,2为保留两位小数

  • 示例 : printf "今天%s去超市买了%d个苹果,花了%-2.2f元钱" 小明 8 12.368

10. test命令

shell中的test命令用于检查某个条件是否成立,可以进行数值、字符、和文件的检查

数值测试 :

参数 说明
-eq 是否为真
-ne 是否不为真
-gt 是否大于
-ge 是否大于等于
-lt 是否小于
-le 是否小于等于

示例 :

#!/bin/bash
a=10
b=20
# 判断是否相等  也可以使用=
if test $a -eq $b  # 等同于 [ $a -eq $b ]
then
 echo "相等"
else
 echo "不相等"
 fi

字符串测试 : 字符串用 "=" 和 "!="

文件测试 :

参数 含义
-e 文件是否存在
-r 文件是否可读
-w 文件是否可写
-x 文件是否可执行
-s 文件存在,且至少有一个字符
-d 文件存在且是目录
-f 文件存在且是普通文件

示例 :

#!/bin/bash
echo "请输入要检测的文件路径 :"
read a
# 判断文件是否存在
if test -e $a 
then
 echo "存在"
else
 echo "不存在"
 fi

示例 :

#!/bin/bash
echo "请输入第一个数字:"
read num1
echo "请输入第二个数字:"
read num2
num=$(($num1*$num2))
echo "这两个数的乘积是 : $num"

数学运算的这种写法 $(()), 对括号内的表达式求值,这样声明了一个整型数数据

 

11. shell函数

Bash和其他编程语言一样,也支持函数,bash是一种解释型语言,

  • 定义函数

    • 方式一

      function 函数名() {
      	函数体
      }
    • 方式二

      函数名() {
      	函数体
      }
  • 示例

    #!/bin/bash
    sayhey() {
    	echo "hey!"
    }
    sayhey  # 直接写函数名调用换函数

    传递参数

    #!/bin/bash
    a="这是a"
    b="这是b"
    
    function name(){	 # 定义函数名name
    	local c="这是c"  # 定义局部变量$c
    	local d="这是d"  # 定义局部变量$d
    	
    	echo $a,$b		 # 访问a,b
    	echo $c		     # 访问局部变量c
    	return 0		 # shell函数返回值是整型
    }
    name				 # 调用函数name
    echo $d				 # 这里在函数外无法访问局部变量d

     

函数返回值

#!/bin/bash
fun(){
	echo "第一个数:"
	read a
	echo "第二个数:"
	read b
	return $(($a + $b))
}
fun
echo "两数之和是 :$?"   # 函数返回值在调用该函数后通过$?来获取

函数参数 :'

在shell中,在调用函数时可以传递参数, 在函数内部,可以通过$n的形式来获得,当n>=10时,需要用${n}获取

#!/bin/bash
fun(){
	echo $1
	echo $2
	echo ${10}
	echo "总参数个数$#"
	echo "作为字符串输出所有参数$*"
}
fun 5 6 12

递归函数

#!/bin/bash
function name(){
 echo "hello"
 name
}
name

1.3 Docker容器环境管理

Docker的安装

Docker CE 社区版目前支持Linux、Windows10和macOS

Docker CE 支持64位版本CentOS,且要求内核版本不低于3.10

查看CentOS系统版本 : cat /etc/redhat-release

查看内核版本 : uname -r

卸载旧版本

旧版本的 Docker 称为 docker 或者 docker-engine,使用以下命令卸载旧版本:

$ sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine

使用 yum 安装

执行以下命令安装依赖包:

$ sudo yum install -y yum-utils \
           device-mapper-persistent-data \
           lvm2

鉴于国内网络问题,强烈建议使用国内源,官方源请在注释中查看。

执行下面的命令添加 yum 软件源:

$ sudo yum-config-manager \
    --add-repo \
    https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo

$ sudo sed -i 's/download.docker.com/mirrors.ustc.edu.cn\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo

# 官方源
# $ sudo yum-config-manager \
#     --add-repo \
#     https://download.docker.com/linux/centos/docker-ce.repo

如果需要测试版本的 Docker CE 请使用以下命令:

$ sudo yum-config-manager --enable docker-ce-test

如果需要每日构建版本的 Docker CE 请使用以下命令:

$ sudo yum-config-manager --enable docker-ce-nightly

安装 Docker CE

更新 yum 软件源缓存,并安装 docker-ce

$ sudo yum makecache fast
$ sudo yum install docker-ce

使用脚本自动安装

在测试或开发环境中 Docker 官方为了简化安装流程,提供了一套便捷的安装脚本,CentOS 系统上可以使用这套脚本安装,另外可以通过 --mirror 选项使用国内源进行安装:

$ curl -fsSL get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh --mirror Aliyun
# $ sudo sh get-docker.sh --mirror AzureChinaCloud

执行这个命令后,脚本就会自动的将一切准备工作做好,并且把 Docker CE 的稳定(stable)版本安装在系统中。

启动 Docker CE

$ sudo systemctl enable docker
$ sudo systemctl start docker

建立 docker 用户组

默认情况下,docker 命令会使用 Unix socket 与 Docker 引擎通讯。而只有 root 用户和 docker 组的用户才可以访问 Docker 引擎的 Unix socket。出于安全考虑,一般 Linux 系统上不会直接使用 root 用户。因此,更好地做法是将需要使用 docker 的用户加入 docker 用户组。

建立 docker 组:

$ sudo groupadd docker

将当前用户加入 docker 组:

$ sudo usermod -aG docker $USER

退出当前终端并重新登录,进行如下测试。

测试 Docker 是否安装正确

$ docker run hello-world

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
d1725b59e92d: Pull complete
Digest: sha256:0add3ace90ecb4adbf7777e9aacf18357296e799f81cabc9fde470971e499788
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

若能正常输出以上信息,则说明安装成功。

镜像加速

如果在使用过程中发现拉取 Docker 镜像十分缓慢,可以配置 Docker 国内镜像加速

添加内核参数

如果在 CentOS 使用 Docker CE 看到下面的这些警告信息:

WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled

请添加内核配置参数以启用这些功能。

$ sudo tee -a /etc/sysctl.conf <<-EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

然后重新加载 sysctl.conf 即可

$ sudo sysctl -p

Docker的三个基本概念

  • 镜像 (Image)

  • 容器 (Container)

  • 仓库 (Repository)

Docker常用命令

docker pull 镜像名			     获取镜像
docker images			       显示docker镜像
docker image rm 镜像名/id       删除镜像
docker run 容器名					   新建并启动容器
docker container stop 容器id    停止容器
docker container rm 容器id      删除容器

猜你喜欢

转载自www.cnblogs.com/qmuy/p/12734986.html