自动化运维之shell相关

1运维简介

除了功能开发之外的所有活动都跟运维有关

2 自动化运维:

自动化实现运维活动一般用shell脚本实现自动化

3 shell就是命令解释

位于应用程序和操作系统之间

4 shell分类:

一般而言:shell就是命令行shell(linux下shell(bash))

5 查看当前系统shell版本

echo $SHELL

6 查看系统兼容性支持的shell类型们:

cat /etc/shells

7 shell脚本:

命令放到文件中执行,该文件称为shell脚本

8 脚本创建

	1 用记事本写(要求用vim)
	2 脚本命名:1 名称有意义 2 .sh结尾
	3 脚本内容:首行要指定脚本解释器
	4 注释:单行注释和python一样,多行注释::<<字符 ... 字符(将注释内容重定向到啥都不干)

9 脚本执行

	1 bash 脚本名(启动子shell,在子shell中执行脚本内命令)
	2 ./脚本名 (启动子shell(名字叫脚本名), 在子shell中执行脚本内命令)
	3 source 脚本名(类似python import 模块) (直接在当前shell内执行脚本内命令)

10 开发规范

	1 不要用中文注释
	2 成对内容一次性写
	3 适当缩进(仿照python风格)

11 变量定义

	普通变量
		1 变量名=变量值 (变量值不能有特殊字符)
		2 变量名='变量值' (变量值作为整体赋值)
		3 变量名="变量值" (变量套变量)
	命令变量(将命令的输出作为变量值赋给变量名)
	变量名=`命令`
	变量名=$(命令)
		变量值不会随着命令输出的改变而改变

12 变量访问

	1 ​ $变量名 
	2 ​ "$变量名" (保证变量值是字符串)
	3 ${变量名} (限定变量名访问)
	4  "${变量名}" (推荐形式)
	
	unset 变量名 (删除变量)

13 变量分类:

	本地变量(哪里定义哪里访问)
	全局变量(环境变量)
		 1 查看当前全局变量:
			env
		2 定义:
			变量名=值
			export 变量
			(先定义后转换)
                        export 变量名=值 (二合一)
		3 生效范围
			当前shell和子shell(子shell继承父shell的全局变量)
			若想让所有环境生效:
			1 修改~/.bashrc (只对当前用户生效,source执行该文件或重新打开新shell生效)
			2 修改/etc/profile (所有用户都生效,source执行该文件或重启生效)
	内置变量
	1脚本相关
		$0 当前脚本名
		$$ 指向该脚本的进程号
		$n 脚本的第n个参数(脚本传参:脚本名  s g b )
		$# 参数个数
		$? 上一条命令是否执行成功(0-成功,非0-失败,,若上一条命令是执行脚本,则获取脚本最后一条命令的返回值)
	
	2 字符串截取
		${变量名:起始位置:截取长度}
		(倒着截要写0-X)
	3 默认值
		${变量名:-默认值} (若变量不存在则输出默认值)
		${变量名:+提示信息} (若变量存在则输出提示信息)

14 表达式

	逻辑转成控制
	1 测试语句
		test 条件
		[ 条件 ] (括号内侧两边各有一个空格)
		1 数值比较 (比较操作符两边各有一个空格)
			n1 -eq n2 相等
			n1 -gt n2 大于
			n1 -ge n2 大于等于
			n1 -lt n2 小于
			n1 -le n2 小于等于
			n1 -ne n2 不等于
		2 字符串比较
			== != (两边有空格)
	2 逻辑表达式
		命令1 && 命令2 (1成功则执行2)
		命令1 || 命令2 (1失败则执行2)	
	3 文件表达式
		-f 判断是否是文件
		-d 判断是否是目录
		-x 判断是否有可执行权限(目录可执行)
	4 计算表达式
		$((计算过程))
		let 等式	

15 常见符号

	1 重定向
		应用程序的输出:
			1标准输出(正常执行时的输出)
			2标准错误(异常执行时的输出)
		分别重定向:
			bash 6-chongdingxiang.sh > res.log 2> err.log
		合并重定向:
			bash 6-chongdingxiang.sh > res.log 2>&1
		丢弃:
			bash 6-chongdingxiang.sh > /dev/null 2>&1
	2 管道符
		命令1 | 命令2
		(命令1的输出作为命令2的输入)
	3 后台展示符
		命令 &
		(命令放到终端后台运行)

16 常用命令

        1 grep(搜索命令)
		grep -rn  bash .
		(递归当前目录以及子目录下所有文件,搜索包含bash的行以及行号)

	2 find (查找文件)
		find . -name *chong*
		(在当前目录以及子目录查找名称大概是chong的文件)
	3 sed 	
		-i参数代表修改源文件
		
		替换:
			sed -i  "2s#sed#SED#1" sed.txt
			("2(第二行)s替换#sed(原内容)#SED(替换后内容)#1(第1个找到的做替换---》g代表全部替换)")
		
		增加:
			sed "2a\hello" sed.txt 
			"2(第二行)a(下方增加)\hello(增加的内容)"
			sed "4i\world" sed.txt
			"4(第四行)i(上方增加)\world(增加的内容)"
		删除:
			sed "3(第三行)d(删除)" sed.txt
	4 awk	
		awk '{print $1,$3}' awk.txt
		打印awk.txt文件中每一行的第1列和第3列,并且用空格分割
		内置变量:
			FILENAME:文件名
			NR:行号
				awk 'NR==2 {print $2}' awk.txt
				(只处理第2行)
			NF:列数
				awk '{print $NF}' awk.txt
				(打印最后一列)
			FS:指定行分隔符
				awk 'BEGIN{FS="awk"} {print $3}' awk.txt
				(指定行分隔符为awk)
				awk -F "awk" ' {print $3,$1}' awk.txt
				(-F 更常用)
			OFS:指定多个输出的连接符
				awk -F "awk" 'BEGIN{OFS="->"} {print $3,$1}' awk.txt
				(指定第三列和第一列直接的连接符是->)

17 分支

	1 if分支
		if [ 条件 ]
		then
			 指令1
		elif [ 条件2 ]
		then
			指令2
		else
			指令3
		fi
			
	2 case分支(一对多的分支判断)
		case 变量名 in
		   值1)
			  指令1
				 ;;
		   ...
		   值n)
			 指令n
				 ;;
			*)
				其他情况指令
			;;
		esac

18 循环

	1 for循环
		for 值 in 列表(多个字符串的变量--》命令变量)
		do
		   执行语句
		done
	
	2 while循环
		while 条件
		do
		   执行语句
		done

19 函数

	1 定义函数
		函数名() {
			函数体
			$n 代表函数的第n个参数
		}
	2 调用函数
		函数名 参数1 参数2
		
	3 返回值(一般不用返回值)
		函数内执行return命令可以返回0~255的数字
		函数外访问$?可以获取函数返回值
		
	4 命令变量可以应用在函数上

20 shell中的命令类型:

	1 应用程序---》which查到绝对路径
	2 脚本-------》file 查到文件类型
	3 函数-------》前两种查不到信息
	
	导入虚拟环境的命令:
		export WORKON_HOME=/root/.venv
		source /usr/local/bin/virtualenvwrapper.sh

21 代码发布

>> 1 流程
	1 获取代码
		git push
	2 打包代码(代码服务器执行)
		1 压缩缩小空间
		2 方便传输
		tar zcf 压缩文件名 带压缩文件
		zcat 压缩文件名(不解压直接看包内容)
	3 传输代码
		scp 源文件 目标位置
		线上服务器--获取---》代码服务器
		(线上服务器先登录代码服务器后拷贝)
	4 关闭应用
		先关离用户近的后关离用户远的
	5 解压代码
		tar xf 压缩文件名
	6 放置代码
		先备份后放置
		备份加时间戳:
		mv yasuo.tar.gz Desktop/yasuo.tar.gz-`date +%Y%m%d%H%M%S`
	7 开启应用
		先开离用户远的后开离用户近的
	8 检查
		netstat -tln | grep 80
>> 2 基础环境
	1 目录环境
		规定各个内容存放路径
		mkdir /data/{server,logs,backup,softs,virtual,scripts,codes} -p
		(一次性创建多个目录,父目录不存在一并创建)

	2 免密码认证
		1 客户端生成密钥对
			ssh-keygen -t rsa
		2 将公钥传输给服务器
			在服务器的/etc/ssh/sshd_config文件中定义了公钥存储的文件(AuthorizedKeysFile	%h/.ssh/authorized_keys)
			将公钥追加到该文件
		3 重启ssh服务
			sudo service ssh restart
>>3 项目环境
	1,虚拟环境
		export WORKON_HOME=/data/virtual/
		source /usr/local/bin/virtualenvwrapper.sh
		mkvirtualenv -p python3 django
	2 Windows和linux传文件(必须在xshell下执行)
		rz------win到linux
		sz -----linux到win
		
	3 Django环境
		1 安装
			1 查看INSTALL文件
			2 python setup.py build (可选)
			3 python setup.py install
			
		2 项目搭建
			1 进入虚拟环境
			2 创建项目
				django-admin startproject itcast
			3 创建应用并注册
				python manage.py startapp test1
				修改settings文件
			4 注册页面
				修改views.py--->增加一条字符串显示
				url路由绑定
				修改urls
			5 启动项目
				python manage.py runserver >/dev/null 2>&1 &

你可能感兴趣的:(Python,运维)