目录
文章目录
这篇文章总结了一下我之前学习linux和数据库的内容主要是为了应对面试中的基础知识这一块。文章包含Linux命令的基础知识, linux中常见的11个命令, MySQL的基础知识和实例练习。
1. Linux基础知识
Linux 命令: 软件测试第一个任务, 一般都需要进行环境搭建, 一部分环境搭建内容是在服务器上实现的, 跟服务器交互(没有图形化页面),需要学习如何使用 Linux 命令。
1.1. 硬件和软件
硬件: 能看见也能摸得到
软件: 能看见不能摸得到
关系: 没有软件的硬件是没有任何意义的, 只有存在软件的硬件才能为人所用
1.2. 操作系统
作用
- 是硬件设备上的第一层软件
- 有了操作系统可以方便我们调用所有的硬件设备
- 所有应用程序(QQ/微信)的安装使用前提是具备操作系统
1.3. 操作系统的常见分类
- 桌面操作系统
- Windows
- macOS
- Linux
- 服务端操作系统
- Linux (占有比重非常高)
- Windows Server
- 移动端操作系统
- iOS
- Android(基于Linux)
- 嵌入式操作系统
- Linux (自动贩卖机/收银台/汽车中控)
1.4. Linux 系统
特点
- 开源(源代码可见)免费(Linux 系统)
注意: 开源不意味着一定是免费的(要看具体开源协议) - 安全稳定
- 可移植性好(常见系统分类中都有Linux系统的存在) 换种说法可以它广泛支持许多不同体系结构的计算机。
- 高性能(服务端没有图形页面)
1.5. Linux 系统分类
市面上常见的Linux系统都有一个共同的名字: Linux 发行版(在内核版基础上额外增加一些应用软件和图形化页面)
1.6. Linux 系统的文件和目录
特征:
- 在 Linux 系统中没有盘符概念
- Linux 系统中的所有文件都存放在根目录下(常用"/"代表)
使用目录:
- / : 根目录
- /home: 所有普通用户的家目录
- /root : Linux 系统超级管理员的家目录
- /usr/bin: Linux 命令大部分都存在于该目录下
1.7. Linux 系统文件和目录的特点
- 普通用户和超级管理员用户权限有很大区别
- 普通用户可以进入超级管理员的家目录, 但是无法对其中的文件进行任何操作
- 但是超级管理员用户可以做任何操作(实际工作中, 一般不会轻易获取 root 用户权限)
- 一般情况下, 普通用户的操作范围仅限在自己的家目录当中
- 例如: 当前用户为 admin, 操作范围仅限: /home/admin
1.8. Linux 命令的基本格式
格式组成:
命令主体 -命令选项 命令参数
常见命令形式:
- 命令主体
- 命令主体 -命令选项
- 命令主体 参数
- 命令主体 -命令选项 命令参数
特点:命令主体必须存在, 而选项和参数都是可选的
Linux 命令的注意事项
- 命令的数量非常多, 不要妄图全部记忆下来
- 常用命令由于频繁使用, 不用刻意记忆基本可以搞定
- 工作中实际是用什么命令现查即可
1.9. 查看命令帮助信息方法
方法一:
命令主体 --help : 可以查看命令具备哪些选项及选项含义
方法二:
man 命令主体 : 查看命令的手册信息
注意: 默认情况下系统手册是英文的, 可以自行扩展修改为中文, 实际应用推荐使用方法一
1.10. 命令学习方法说明
此处以 ls 命令为例
ls : 展示当前路径下有哪些文件
ls -a : 显示当前路径下的所有文件(包含隐藏文件(文件名以.开头的))
ls -l : 显示当前路径下文件的详细信息
ls -al : 显示当前路径下文件的详细信息(包含隐藏文件)
注意:
1. 命令选项连用形式为: 命令主体 -选项1选项2
2. 命令主体和选项之间必须包含一个空格
3. 命令选项的作用一般是用来扩展命令主体功能的
学习方法:
1. 优先搞清楚命令主体的含义
2. 根据实际需求结合帮助命令查找命令选项
3. 没用过的选项, 尝试自己搭建场景, 试验后看效果
4. 孰能生巧, 相较于死记命令, 勤加练习更合理一些!
1.11. Linux命令的共通知识点
* : 代表可以匹配任意长度的文件名(所有)
? : 代表可以匹配单个字符, 如果目标文件名有多个字符, 该符号可以使用多个
[]: 括号内的内容表示一个范围, [abc] : 代表匹配文件名是 a 或 b 或 c, 等价于 [a-c]
绝对路径和相对路径
绝对路径: 路径源头固定不变, 常见有两个: ‘/’: 根目录; ‘~’: 当前用户的家目录
相对路径: 以当前所在路径为源头, 常见的表示形式有两个: ‘.’:当前路径下; ‘…’:当前目录的上一层(父层级)
路径注意事项:
- 绝对路径使用时, 需要确定文件在根目录下还是用户目录下, 合理选择起始符号即可
- 初学时, 建议所有路径优先使用绝对路径, 当清楚文件结构关系后, 逐步转换为相对路径
- 相对路径中, 如果是当前路径下的文件获取操作, 那么 ‘./’ 一般是可以省略的
2. Linux实例
Linux命令相关的3个案例(后期我会补充剩下的命令)
案例1: 文件和目录操作相关命令(ls/ pwd/ cd/ touch/ mkdir/ cp/ mv/ rm)
在桌面上打开终端窗口, 执行如下操作:
01.查看当前路径位置
02.查看当前目录下有哪些文件和文件夹
03.创建 adir,bdir,cdir 三个文件夹(创建一个文件夹/创建多个文件夹)
04.切换到 adir 目录下
05.创建文件 aa (创建一个文件)
06.切换到 admin 目录下(绝对路径/相对路径)
07.创建文件 file 并重命名为 aa
08.复制文件 aa 到 adir 目录下(要求提示是否覆盖)
09.复制文件夹 bdir 到 cdir 目录下
10.移动文件 aa 到 bdir 目录下
11.创建 bb,cc 两个文件(创建多个文件)
12.删除 bb 文件
13.删除 adir 文件夹
14.删除当前目录下所有文件和文件夹
01.pwd
02.ls
03.mkdir adir bdir cdir //mkdir是make directory的缩写,用于创建目录
04.cd adir // cd ./adir也行,cd /adir不行
05.touch aa
06.cd ~ //cd /home/admin也行
07.touch file
mv file aa
08.//cp aa adir,假如再输一遍cp aa adir这个操作是覆盖而不是复制了。-i 交互式复制,在覆盖目标文件之前将给出提示要求用户确认,回复n/y
cp -i aa adir
09.cp -r bdir cdir //假如复制的是文件夹的话,需要加上-r。假如复制文件夹也想有提示的话,可以用-ir,假如文件夹没有文件不会弹出提醒,有文件才会弹出提示
10.mv aa bdir //假如是移动文件adir到bdir目录下是mv adir bdir,不需要加上-r
11.touch bb cc
12.rm bb
13.rm -r adir //和cp一样
14.rm -r * //使用rm删除的时候,最好使用ls验证一下是否是要求删除的,防止误删
文件和目录常用命令的小结
pwd:查看当前所在的路径位置(涉及到路径切换【cd 命令】时, 确认路径时使用)
ls:查看当前路径下有哪些文件(对路径下文件进行了修改【创建/复制/移动/删除】时使用)
cd:切换路径(更换操作目录时使用,常和绝对路径及相对路径配合使用)
touch:创建普通文件(单文件:touch 文件名;多文件: touch 文件名1 文件名2 …)
mkdir:创建目录文件(单文件夹:mkdir 文件夹名;多文件夹:mkdir 文件夹名1 文件夹名2 …)
cp:复制文件/文件夹(文件:cp -i 源文件 目标文件夹;文件夹:cp -r 源文件夹 目标文件夹)
mv:移动文件/文件夹夹(文件:mv 源文件 目标文件夹;文件夹: mv 源文件夹 目标文件夹)
mv:改名(mv 源文件名 新名字,当新名字是当前目录下不存在的文件名,用户可以使用mv进行的是改名操作)
rm:删除文件/文件夹(文件: rm 文件名 目录: rm -r 文件夹名)
rm:删除所有文件和文件夹(rm -r *)
扩展: cd 命令常用用法
cd 是英文单词 change directory 的简写,其功能为切换当前的工作目录,是用户最常用的命令之一。
cd 切换到当前用户的主目录(/home/用户目录),用户登陆的时候,默认的目录就是用户的主目录。
cd ~ 切换到当前用户的主目录(/home/用户目录)
cd . 切换到当前目录
cd . . 切换到上级目录
cd - 可进入上次所在的目录
案例2: 对文件内容的相关操作命令(cat/more/grep/重定向/管道符/clear)
在桌面上打开终端窗口, 执行如下操作:
01. 将根目录下所有文件的详细信息输出到 demo 文件中(包含隐藏文件)
02. 直接查看 demo 文件的内容
03. 将 /usr/bin 目录下所有文件的详细信息追加到 demo 文件中
04. 以分屏的形式查看 demo 文件的内容
05. 查找 demo 文件内容中包含 mysql 的信息
06. 在 /usr/bin 目录下所有文件的信息中查找包含 mysql 的信息
07. 清空当前终端窗口中的内容
01.ls -al / //-a显示隐藏 -l显示详细信息 /是参数,在这里是路径。只是显示
ls -al / > demo //这才是01的答案
02.cat demo
03.ls -al /usr/bin >> demo
04.more demo
05.grep 'mysql' demo //‘’可以去掉 grep mysql demo效果一样
06.ls -al /usr/bin | grep mysql //从左侧命令的结果中查找 mysql
07.clear : 清空屏幕操作, 快捷键: Ctrl + L
文件内容操作相关命令的小结
’ > ‘ : 重定向符号(将左侧命令的结果输出到右侧的文件中。反复执行,文件原有内容会被替换)
’ >> ‘ : 追加重定向符号(将左侧命令的结果输出到右侧的文件中,反复执行,内容追加, 文件原有内容不会被替换)
cat : 查看文件内容(格式: cat 文件名。适合用于查看文件内容较少的文件。英文全拼:concatenate,命令用于连接文件并打印到标准输出设备上)
more : 以分屏形式查看文件内容(格式: more 文件名,适合用于查看文件内容较多的文件。快捷键空格、b和q也可以用。cat命令是整个文件的内容从上到下显示在屏幕上。 more会以一页一页的显示方便使用者逐页阅读,而且会显示使用者现在查看到文件的几%处)
| : 管道符号(将左侧命令的结果传递给右侧命令当数据源,管道符右侧命令多用: grep 和 more)
案例3: 查看日志文件信息命令(head/tail/tail -f)
在桌面上打开终端窗口, 执行如下操作:
01. 将根目录下所有文件的详细信息输出到 demo 文件中
02. 查看 demo 文件前 5 行内容
03. 查看 demo 文件后 5 行内容
04. 将 ping www.itheima.com 的信息输出到 ping_log 文件中
05. 重新开启一个终端窗口, 动态查看 ping_log 文件中的信息
01.ls -al / > demo
02.head -5 demo
03.tail -5 demo
04.ping www.itheima.com //和windows三行结束不同,在linux中只要不手动停止,默认会一直持续运行。ping+ip地址/域名,查验该ip/域名是否能通信
ping www.itheima.com > ping_log //不停
05.//右键再开一个终端,之前的不能关!
tail -f ping_log
查看日志文件内容命令小结
head : 可以查看文件开头内容(head 文件名:查看文件的前10行内容; head -行数 文件名:查看文件的前x行内容)
tail : 可以查看文件结尾内容(tail 文件名:查看文件的后10行内容; tail -行数 文件名:查看文件的后x行内容)
tail -f : 动态查看日志文件内容(格式: tail -f 日志文件名)
注意:
-系统相关日志存放位置: /var/log
-项目相关日志存放位置: 需要根据项目询问对应的开发人员
3. MySQL基础知识
3.1. 数据库是什么?
- 为什么学习数据库
- 软件中产生的所有数据, 最终都要存储于数据库当中
- 测试人员如果想要进行数据查询/数据校验, 就必须掌握对数据库的基本操作
3.2. 数据库常见分类
-
关系型数据库(重点)
-
RDMS:(Relational Database Management System)关系型数据库系统
-
特征: 以数据表的形式存储数据, 便于数据查询
- 常见的数据库代表
Oracle:在大型项目中使用,例如:银行、电信等项目
MySQL:Web 项目中使用最广泛的关系型数据库
Microsoft SQL Server:在微软的项目中使用
SQLite:轻量级数据库,主要应用在移动平台
- 常见的数据库代表
-
关系型数据库的核心要素
数据行(一条记录)
数据列(字段)
数据表(数据行的集合)
数据库(数据表的集合,一个数据库中能够有 n 多个数据表)
-
-
非关系型数据库
- 不以数据表的形式存储数据的数据库类型
4. SQL语句
4.1 常用的语句
注意坑,创建表只能一个一个创建。
-- 创表语句
-- 需求0: 创建商品表, 包含商品名称和价格
-- create table 表名(
-- 字段1 类型,
-- 字段2 类型
-- );
-- 优化
drop table if exists goods;
-- drop table : 删表 if exists : 如果存在
-- 如果表存在, 执行删除操作
create table goods(
goodsName varchar(20),
price decimal(4, 2)
);
表已存在提示、
未完待续…
4.2 实例练习
一. 删除数据
需求2: 删除一条数据
-- 删除一条数据
-- 先查询所有数据
select * from goods;
-- 语法格式 : delete from 表名 where 条件
-- 注意: 如果要删除执行数据, 务必给出限定条件, 否则会删除所有数据!
delete from goods where id = 4;
扩展1
-- 扩展1: 逻辑删除(了解)
-- 对于一些重要数据(例如: 商品数据只是库存为零, 不能删除商品数据),不能直接删除, 此时使用逻辑删除
-- 逻辑删除:通过特定字段值来标记该数据为删除状态而已
-- 实现步骤: 1) 增加特定字段(数据值1为未删除0为删除) 2) 对于要进行逻辑删除的数据,该字段赋值为0即可
-- 增加字段: alter table 表名 add 字段名 类型;
-- 增加标记字段
alter table goods add isdelete int;
-- 更新表内所有数据该字段的值
update goods set isdelete = 1;
-- 标记目标数据为是删除状态(修改该字段值为0)
update goods set isdelete = 0 where id = 2;
-- 查询未删除的数据
select * from goods where isdelete = 1;
扩展2
-- 扩展2: 3种删除数据方法(所有数据)
-- delete from 表名 : 清空表数据(只清空数据,保留结构), 但不会重置主键计数
-- truncate table 表名 : 清空表数据(只清空数据,保留结构), 并会重置主键计数(截断表)
-- drop table 表名 : 删除表, 包括表结构和数据
delete from goods;
truncate table goods;
drop table goods;
-- 删除速度 : drop > truncate > delete
二. 查询数据
- 基本查询
需求3 : 查询所有/查询指定字段/起别名/去重
-- 需求3: 准备商品数据, 查询所有数据, 查询部分字段, 起字段别名, 去重
-- 准备数据
-- 查询所有数据 : select * from 表名;
select * from goods;
-- 查询部分字段
-- 只需要在查询所有数据的基础上, 修改*的位置, 多个字段逗点隔开
select goodsName,price from goods;
-- 起别名 : 使用 as 关键字, 后跟别名即可
select goodsName as '商品名称',price as '价格' from goods;
select goodsName '商品名称',price '价格' from goods; -- 熟练之后 as 关键字可以省略
select goodsName 商品名称,price 价格 from goods; -- 中文别名引号可以省略
-- 去重 : 根据所给字段, 将字段中数据相同数据合并保留一个
-- 需求 : 当前表当中一共有几家公司
select distinct(company) from goods;
- 条件查询
需求4 : 比较运算符/逻辑运算符
-- 需求4: 查询价格等于30并且出自并夕夕的所有商品信息
-- 条件查询 : where 条件
select * from goods;
select * from goods where price = 30; -- 比较运算符
select * from goods where price = 30 and company = '并夕夕'; -- 逻辑运算符 and : 并列条件
-- 注意 : 在 where 关键后侧的字符串数据, 必须给引号, 否则会报错
-- select * from goods where price = 30 and company = 并夕夕;
需求5 : 模糊查询
-- 需求5: 查询全部一次性口罩的商品信息
-- 查询所有数据
select * from goods;
-- 模糊查询 : like (字符: % 匹配任意的多个字符)
-- 语句格式 : where 字段 like '%信息'
select * from goods where remark like '%一次性口罩'; -- 以一次性口罩结尾, 前面内容不限制
-- 由于目标信息可能出现在中间部分
-- 注意 : 模糊查询时要注意条件设定, 避免遗漏数据
select * from goods where remark like '%一次性口罩%'; -- 提取内容中包含目标信息的数据
-- 扩展: 查询公司来源是 x宝 的商品信息内容
-- like ( _ : 匹配任意单个字符)
select * from goods where company like '_宝';
需求6 : 范围查询
-- 需求6: 查询所有价格在30-100的商品信息
-- 查询所有数据
select * from goods;
-- 条件查询-范围查询 : between 起始值 and 结束值 : 表示一个连续的范围
select * from goods where price between 30 and 100;
-- 注意: 范围应该从小到大
-- select * from goods where price between 100 and 30; -- 查询不出数据
-- 扩展: 以下数据出自于 某东 和 x宝 商品信息
-- 条件查询-范围查询 : in (条件1, 条件2, ...): 表示在某个不连续范围内
select * from goods where company in ('某东', 'x宝');
需求7 : 空判断
-- 需求7: 查询没有描述信息的商品信息
-- 查询所有数据
select * from goods;
-- 判断空 : is null
-- 注意 : null 与 '' 不是一码事; null : 空; '': 空字符(例如:空格/制表符(tab))
select * from goods where remark is null;
-- 扩展 : 查询以下数据中描述信息不为空的所有商品数据
select * from goods where remark is not null; -- not : 表示对条件取反; not null : 双重否定表示肯定
需求8 : 排序
-- 需求8: 查询所有商品信息, 按照价格从大到小排序, 价格相同时, 按照数量少到多排序
-- 查询所有数据
select * from goods;
-- 排序 : order by 字段名 asc(升序)/desc(降序)
select * from goods order by price desc;
-- 需求实现
select * from goods order by price desc, count asc;
-- 扩展:
select * from goods order by price; -- 默认情况下 order by 是以升序进行排列
select * from goods order by price desc, count; -- 因此 asc 可以省略
需求9 : 聚合函数
-- 需求9: 查询以下信息: 商品信息总条数; 最高商品价格; 最低商品价格; 商品平均价格; 一次性口罩的总数量
-- 查询所有数据
select * from goods;
-- 聚合函数 : SQL 提前准备还一些方法, 具备一定的作用
-- 数据总数 : count()
select count(*) from goods;
select count(remark) from goods; -- 注意: 统计数据总数时, 推荐使用 * (按照数据最多的那一列统计总数)
-- 最大值 : max()
select max(price) from goods;
-- 最小值 : min()
select min(price) from goods;
-- 平均值 : avg()
select avg(price) from goods;
-- 求和 : sum()
select * from goods where remark like '%一次性口罩%'; -- 先获取所有一次口罩的数据
select sum(count) from goods where remark like '%一次性口罩%'; -- 需求实现
需求10 : 分组
-- 需求10: 查询每家公司的商品信息数量
-- 查询所有数据
select * from goods;
-- 分组 : group by 字段 : 可以根据给出的字段数据进行数据分组
-- 注意 : 一般情况下, 分组要配合聚合函数一起使用, 目的是对分组后的数据进行进一步统计
select company 公司名称,count(*) from goods group by company;
-- 分组后再次进行条件筛选
-- 扩展 : 查询某东和x宝最贵商品的价格
-- 先按照公司分组
select company 公司名称 from goods group by company;
-- 注意 : 如果想在分组后再次进行条件筛选, 可以使用 having 关键字
-- 把并夕夕的数据排除掉
select company 公司名称 from goods group by company having company != '并夕夕';
-- 获取公司商品最贵价格
select company 公司名称, max(price) from goods group by company having company != '并夕夕';
需求 11 : 分页查询
-- 需求11: 查询当前表当中第5-10行的所有数据
-- 查询所有数据
select * from goods;
-- 分页查询 : limit 起始索引, 数据行数
-- 索引 : 在计算机当中, 不同于人类的自然计数从 1 开始, 计算机的计数起始值是 0 开始(索引)
-- 起始索引: 实际数据顺序 - 1 即为其对应的索引值
select * from goods limit 4, 6;
-- 扩展 : 如果获取是当前数据中的第1行数据时, 起始索引可以省略
-- 获取当前数据中的第1行数据
-- select * from goods limit 0, 1;
select * from goods limit 1;
-- 分页查询公式的使用
-- 扩展 : 分页查询公式的应用
-- 条件 : 每页显示 m 条数据,求:显示第 n 页的数据
-- 公式 : (n-1)*m, m : 查看指定页面数据
-- 假设 : 当前数据中, 每页显示 3 条数据, 查看第 2 页数据内容
select * from goods limit 3, 3;