先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新软件测试全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip1024b (备注软件测试)
正文
#!/bin/bash 自动为 user.sh 添加解释器信息
#先使用 grep 判断对象脚本是否已经有解释器信息,如果没有则使用 sed 添加解释器以及描述信息
if ! grep ‐q “^#!” $1; then
sed ‘1i #!/bin/bash’ $1
sed '2i #Description: ’
fi
#因为每个脚本的功能不同,作用不同,所以在给对象脚本添加完解释器信息,以及 Description 后还希望
#继续编辑具体的脚本功能的描述信息,这里直接使用 vim 把对象脚本打开,并且光标跳转到该文件的第 2 行
vim +2 $1
- 自动化部署 varnish 源码包软件
#!/bin/bash
#Author:丁丁历险(Jacob)
#本脚本需要提前下载 varnish‐3.0.6.tar.gz 这样一个源码包软件,该脚本即可用自动源码安装部署软件
yum ‐y install gcc readline‐devel pcre‐devel
useradd ‐s /sbin/nologin varnish
tar ‐xf varnish‐3.0.6.tar.gz
cd varnish‐3.0.6
#使用 configure,make,make install 源码安装软件包
./configure ‐‐prefix=/usr/local/varnish
make && make install
#在源码包目录下,将相应的配置文件拷贝到 Linux 系统文件系统中
#默认安装完成后,不会自动拷贝或安装配置文件到 Linux 系统,所以需要手动 cp 复制配置文件
#并使用 uuidgen 生成一个随机密钥的配置文件
cp redhat/varnish.initrc /etc/init.d/varnish
cp redhat/varnish.sysconfig /etc/sysconfig/varnish
cp redhat/varnish_reload_vcl /usr/bin/
ln ‐s /usr/local/varnish/sbin/varnishd /usr/sbin/
ln ‐s /usr/local/varnish/bin/* /usr/bin
mkdir /etc/varnish
cp /usr/local/varnish/etc/varnish/default.vcl /etc/varnish/
uuidgen > /etc/varnish/secret
- 编写 nginx 启动脚本
#!/bin/bash
#Author:丁丁历险(Jacob)
#本脚本编写完成后,放置在/etc/init.d/目录下,就可以被 Linux 系统自动识别到该脚本
#如果本脚本名为/etc/init.d/nginx,则 service nginx start 就可以启动该服务
#service nginx stop 就可以关闭服务
#service nginx restart 可以重启服务
#service nginx status 可以查看服务状态
program=/usr/local/nginx/sbin/nginx
pid=/usr/local/nginx/logs/nginx.pid
start(){
if [ ‐f $pid ];then
echo “nginx 服务已经处于开启状态”
else
$program
fi
stop(){
if [ ‐! ‐f $pid ];then
echo “nginx 服务已经关闭”
else
$program ‐s stop
echo “关闭服务 ok”
fi
}
status(){
if [ ‐f $pid ];then
echo “服务正在运行…”
else
echo “服务已经关闭”
fi
}
case $1 in
start)
start;;
stop)
stop;;
restart)
stop
sleep 1
start;;
status)
status;;
*)
echo “你输入的语法格式错误”
esac
- 自动对磁盘分区、格式化、挂载
#!/bin/bash
#Author:丁丁历险(Jacob)
#对虚拟机的 vdb 磁盘进行分区格式化,使用<<将需要的分区指令导入给程序 fdisk
#n(新建分区),p(创建主分区),1(分区编号为 1),两个空白行(两个回车,相当于将整个磁盘分一个区)
#注意:1 后面的两个回车(空白行)是必须的!
fdisk /dev/vdb << EOF
n
p
1
wq
EOF
#格式化刚刚创建好的分区
mkfs.xfs /dev/vdb1
#创建挂载点目录
if [ ‐e /data ]; then
exit
fi
mkdir /data
#自动挂载刚刚创建的分区,并设置开机自动挂载该分区
echo ‘/dev/vdb1 /data xfs defaults 1 2’ >> /etc/fstab
mount ‐a
- 自动优化 Linux 内核参数
#!/bin/bash
#Author:丁丁历险(Jacob)
#脚本针对 RHEL7
cat >> /usr/lib/sysctl.d/00‐system.conf <<EOF
fs.file‐max=65535
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 5
net.ipv4.tcp_syn_retries = 5
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
#net.ipv4.tcp_keepalive_time = 120
net.ipv4.ip_local_port_range = 1024 65535
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 5010 641280 5010 128
net.core.wmem_default=262144
net.core.wmem_max=262144
net.core.rmem_default=4194304
net.core.rmem_max=4194304
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_keepalive_time = 30
net.ipv4.tcp_window_scaling = 0
net.ipv4.tcp_sack = 0
EOF
sysctl –p
- 切割 Nginx 日志文件(防止单个文件过大,后期处理很困难)
#mkdir /data/scripts
#vim /data/scripts/nginx_log.sh
#!/bin/bash
logs_path=“/usr/local/nginx/logs/”
mv ${logs_path}access.log l o g s _ p a t h a c c e s s _ {logs\_path}access\_ logs_pathaccess_(date ‐d “yesterday” +“%Y%m%d”).log
kill ‐USR1 cat /usr/local/nginx/logs/nginx.pid
chmod +x /data/scripts/nginx_log.sh
#crontab ‐e #脚本写完后,将脚本放入计划任务每天执行一次脚本
0 1 * * * /data/scripts/nginx_log.sh
- 检测 MySQL 数据库连接数量
#!/bin/bash
#Author:丁丁历险(Jacob)
#本脚本每 2 秒检测一次 MySQL 并发连接数,可以将本脚本设置为开机启动脚本,或在特定时间段执行
#以满足对 MySQL 数据库的监控需求,查看 MySQL 连接是否正常
#本案例中的用户名和密码需要根据实际情况修改后方可使用
log_file=/var/log/mysql_count.log
user=root
passwd=123456
while :
do
sleep 2
count=mysqladmin ‐u "$user" ‐p "$passwd" status | awk '{print $4}'
echo “date +%Y‐%m‐%d
并发连接数为:$count” >> $log_file
done
- 根据 md5 校验码,检测文件是否被修改
#!/bin/bash
#Author:丁丁历险(Jacob)
#本示例脚本检测的是/etc 目录下所有的 conf 结尾的文件,根据实际情况,您可以修改为其他目录或文件
#本脚本在目标数据没有被修改时执行一次,当怀疑数据被人篡改,再执行一次
#将两次执行的结果做对比,MD5 码发生改变的文件,就是被人篡改的文件
for i in $(ls /etc/*.conf)
do
md5sum “$i” >> /var/log/conf_file.log
done
- 检测 MySQL 服务是否存活
#!/bin/bash
#Author:丁丁历险(Jacob)
#host 为你需要检测的 MySQL 主机的 IP 地址,user 为 MySQL 账户名,passwd 为密码
#这些信息需要根据实际情况修改后方可使用
host=127.0.0.1
user=root
passwd=123456
mysqladmin ‐h 127.0.0.1 ‐u root ‐p’$passwd’ ping &>/dev/null
if [ $? ‐eq 0 ];then
echo “MySQL is UP”
else
echo “MySQL is down”
fi
- 备份 MySQL 的 shell 脚本(mysqldump 版本)
#!/bin/bash
#Author:丁丁历险(Jacob)
#定义变量 user(数据库用户名),passwd(数据库密码),date(备份的时间标签)
#dbname(需要备份的数据库名称,根据实际需求需要修改该变量的值,默认备份 mysql 数据库)
user=root
passwd=123456
dbname=mysql
date=$(date +%Y%m%d)
#测试备份目录是否存在,不存在则自动创建该目录
[ ! ‐d /mysqlbackup ] && mkdir /mysqlbackup
#使用 mysqldump 命令备份数据库
mysqldump ‐u" u s e r " ‐ p " user" ‐p" user" ‐p"passwd" “ d b n a m e " > / m y s q l b a c k u p / " dbname" > /mysqlbackup/" dbname">/mysqlbackup/"dbname”‐${date}.sql
- 将文件中所有的小写字母转换为大写字母
#!/bin/bash
#$1 是位置参数,是你需要转换大小写字母的文件名称
#执行脚本,给定一个文件名作为参数,脚本就会将该文件中所有的小写字母转换为大写字母
tr “[a‐z]” “[A‐Z]” < $1
- 非交互自动生成 SSH 密钥文件
#!/bin/bash
#‐t 指定 SSH 密钥的算法为 RSA 算法;‐N 设置密钥的密码为空;‐f 指定生成的密钥文件存放在哪里
rm ‐rf ~/.ssh/{known_hosts,id_rsa*}
ssh‐keygen ‐t RSA ‐N ‘’ ‐f ~/.ssh/id_rsa
- 检查特定的软件包是否已经安装
#!/bin/bash
#Author:丁丁历险(Jacob)
if [ $# ‐eq 0 ];then
echo “你需要制定一个软件包名称作为脚本参数”
echo “用法:$0 软件包名称 …”
fi
# @ 提取所有的位置变量的值 , 相当于 @提取所有的位置变量的值,相当于 @提取所有的位置变量的值,相当于*
for package in “$@”
do
if rpm ‐q ${package} &>/dev/null ;then
echo ‐e “${package}\033[32m 已经安装\033[0m”
else
echo ‐e “${p