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的三次握手
-
-
应用层协议 :
-
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)
-
进入配置文件夹
cd /etc/sysconfig/network-scripts/
-
一般修改配置文件ifcfg-ens33
vi ifcfg-ens33
需要修改的参数 : BOOTPROTO=dhcp ONBOOT=yes
-
server network restart
重启网卡
-
-
网卡静态IP配置
-
进入配置文件夹
cd /etc/sysconfig/network-scripts/
-
一般修改配置文件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 #设置网关
-
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 删除容器