需求背景:项目技术栈:Vue2+Nuxt2+TypeScript,是一个服务端渲染的项目,每次打测试包时需要在虚拟机上通过命令行打包项目,然后将打包生成的文件压缩为一个压缩包.tar.gz,然后将这个压缩包下载到本地,再由本地上传到测试服务器的指定目录下,在测试服务器上通过命令行解压文件,然后启动项目服务;
实现效果:通过虚拟机linux中的shell脚本自动打包指定git分支的前端项目代码,然后将打包生成的文件生成压缩包,并将这个压缩包推送到测试服务器指定目录下;然后在测试服务器上通过shell脚本解压对应缩包.tar.gz,并启动项目服务
1、编写shell脚本时遇到的问题:
1.1 执行.sh的shell脚本时,解压出来的文件名会自动带有问号,且这个问号在FTP工具中看不到,通过linux命令才能查看到
1.2 提示shell脚本中的\r命令未找到;如:./test.sh: line 1: $'\r': command not found
原因:因为我是通过MobaxXterm工具创建的shell文件,并且通过文本方式编写的脚本内容,存在换行的操作,这里的换行符和linux系统上的换行符存在差别,所以会提示如上的两个问题
解决方法:设置文件的格式类型为unix,或者去掉shell脚本中\r换行符;
# 方法一:设置文件的格式类型为unix
# 使用vi命令打开shell文件
vi test.sh
# 转换格式,设置文件的格式类型为Unix格式,
# 这意味着文件将使用Unix风格的换行符(LF)而不是Windows风格的换行符(CRLF)
:set ff=unix
# 保存文件
:wq
# 方法二:去掉shell脚本中\r换行符
# 去掉test.sh文件中\r换行符然后生成新文件newtest.sh
sed 's/\r//g' test.sh > newtest.sh
# 给新生成的newtest.sh文件添加可执行权限,使其可以执行
chmod +x newtest.sh
2、常用的linux命令:
- sshpass -p 'password' scp file1 username@xxx.xxx.xx.x:/file2,
- 将本地的file1文件推送到远程服务器xxx.xxx.xx.x的指定目录file2下,(使用sshpass提前输入远程服务器的密码,或者使用scp推送文件的时根据提示输入远程服务器密码)
- 参数说明:
- username:连接远程服务器的用户名
- xxx.xxx.xx.x:远程服务器的IP地址
- password:连接远程服务器时该用户名对应的明文密码
- 参数说明:
- 注意:sshpass需要根据当前linux系统进行提前安装,安装教程可参考博客:sshpass的安装与使用-CSDN博客
- 将本地的file1文件推送到远程服务器xxx.xxx.xx.x的指定目录file2下,(使用sshpass提前输入远程服务器的密码,或者使用scp推送文件的时根据提示输入远程服务器密码)
- su user 切换的指定的user使用的用户
- cat /etc/*-release 查看当前的linux系统
- sed 's/\r//g' test.sh > newtest.sh 去掉test.sh命令文件中\r换行符生成新文件newtest.sh
- chmod +x newtest.sh 给新生成的.sh文件添加可执行权限
- cp file1 file2 将file1文件拷贝到file2
- ssh-keygen -t rsa -b 4096 -C "xxxx@emspost.com.cn"
- 在linux系统上生成对应的ssh密钥
- cat id_rsa.pub 查看id_rsa.pub公钥内容,将内容复制到github仓库下
- mv file1 file2 对file1文件重命名成file2
- tar -zxvf file1.tar.gz -C file2 将file1.tar.gz压缩包解压到file2目录下
- ps aux | grep 进程关键字 查找指定进程的详细信息
- kill pid 终止指定pid号的进程
3、使用vim命令编辑文件的步骤:
1)打开终端:在Linux系统上打开一个终端窗口
2)输入命令 vim filename,打开要编辑的文件
3)按下Enter回车键,vim将会打开该文件并显示在终端中
4)开始编辑文件:
4.1)按下 i 键进入插入模式,可以开始输入文本内容
4.2)在插入模式中,输入想要添加的内容,
4.3)编辑完毕后,可以按下 Esc 键退出插入模式,返回到普通模式
5)保存并退出文件:完成编辑后,可以执行以下命令来保存更改并退出vim
5.1)在普通模式下,输入:w并按下Enter回车键来保存文件但不退出vim
5.2)输入:q并按下Enter回车键 来退出vim,但不保存更改内容
5.3)输入:wq 并按下Enter回车键,保存更改并退出vim;