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 &