linux
计算机必须有的组成部分:cpu、硬盘、内存、电源
服务器硬件
- 显示屏
- 内置键盘
- usb接口
- 触摸板
- 网口
- 电源接口
- 散热口
- 摄像头
- 电源开关
服务器硬件厂商
- dell :戴尔
- hp :惠普
- 联想
- 浪潮
- ibm
cpu: 人的记忆,如同计算机的内存条,如果进程不重启,服务器不重启,内存中的数据也不丢
内存: 是CPU和磁盘之间的缓冲设备,也叫临时存储器(存放数据),断电时数据丢失
服务器分类:互联网公司,怎么选择服务器?一般有什么
1).物理服务器,有钱的大公司,买自己的服务器,建造自己的机房(零度,无尘,无静电)防止机器短路,数据丢失
有钱的公司,bat,建造自己的机房
中等的公司,普通的外企,也有自己的服务器,但是服务器,托管在别人的机房(世纪互联这家公司)
2).云服务器,阿里云,腾讯云(便宜,省钱,无烦恼),初创型的小公司
3).vmware虚拟化技术
linux
linux 系统的优势:
跨平台的硬件支持; 丰富的软件支持; 多用户多任务; 可靠的安全性 ; 良好的稳定性; 完善的网络功能
shell
我们输入linux命令发给 linux操作系统 ,shell将我们输入的命令,翻译给操作系统去执行
linux的发行版
各个厂家进行自己的定制开发,衍生出不同的发行版
不同的发行版,命令大同小异
centos 社区版的redhat,免费使用,功能和redhat一模一样
ubuntu 作为很多个人学习的linux平台,也常用在物联网嵌入式中
redhat 红帽子,企业版linux,收费使用,redhat资格认证才可以进行linux运维维护,rhcsa红帽管理员,rhce红帽工程师,rhca(红帽架构师)
开源软件特性
低风险 高品质 低成本 更透明
使用linux的好处 :
是自由传播,免费,不会犯法,任意切换图形/命令终端,安全稳定,不用杀毒软件,不卡
linux xshell的快捷键
Tab 自动补全
Ctrl + c 取消当前操作
ctrl + l 是清屏
ctrl + d 是退出登录
ctrl + shift + r 是快速重新连接
vi/vim快捷键
yy 复制当前行
p 粘贴
dd 剪切
u 撤销
ctrl + r 恢复
什么是服务器
(在网络中对外提供服务器的一台性能超强的计算机),硬件
实体服务器
云服务器
centos7版本的linux操作系统
选择的vmware虚拟化软件,安装的linux,充当一个服务器的角色
服务器(可能是云服务器,也可能在全球各地某一个机器),开发人员一般是不会直接触碰的,通过远程连接的方式,去使用
xshell 就是封装了ssh(远程连接的命令),只在windows下有的工具
如果你用的就是linux或者macos,只需要打开终端,输入ssh命令即可
1.linux是个操作系统,服务器的操作系统,centos7系列的发行版
2.windows机器上,安装虚拟化软件vmware,在vmware软件里,安装linux操作系统
3.vmware如同服务器,我们选择远程登录,使用的工具是 xshell
远程登录linux的命令
ssh 用户名@服务器的ip地址(公网的ip)
ssh 用户名@教室内的局域网ip地址(私有的) 确保在同一个网段
windows查看ip的命令 :ipconfig
linux查看ip的方式: ifconfig
- linux登录之后的命令提示符
- 当前你所在的路径
# 超级用户的身份提示符
$ 普通用户的身份提示符
pip3 instal django #python装东西
yum install tree #linux安装软件
linux的特殊符号的含义
# 注释
~ 用户家目录
- 上一次的工作目录
.当前目录
..上一级目录
./ 当前工作目录
> 重定向覆盖输出符号
w
模式
>> 重定向追加输出符号
a
追加
< 重定向输入符,覆盖写入
<< 重定向追加写入符号
用在mysql数据导入时候
$PATH
环境变量
摘出来一些常用的基础命令
su 切换用户
mkdir 创建文件夹
cd 切换目录
touch 创建普通文件
cat 查看文本内容
vim 文本编辑器
ls 查看文件夹内容
ll 等于 ls -l
ps -ef 查看linux的进程
top linux的任务管理器
find 查找linux文件的
grep 过滤字符串信息的
pwd 打印当前工作目录的绝对路径
mv 移动文件 ,重命名
windows和linux传输文件的方法:xftp lrzsz scp
rm 删除文件 rm -rf -r 递归删除文件夹 -f 强制不提醒就删除
yum linux安装软件的命令,如同pip
head 从文本前*行开始看,默认前10行
tail 从文本后面10行看 tail -f filename 实时监控文件内容
more 翻页显示文件内容
less 翻页显示文件内容
echo 追加内容,相当于print打印
ifup ifdown 启停网卡的快捷命令
systemctl restart network 通过命令重启网卡
id kun #查看用户身份id
sudo 临时提权的命令
userdel -r 用户名 #删除用户信息,和家目录
netstat -tunlp | grep 8000 确认django的端口是否启动
ps -ef |grep python 确认django的进程是否存在
kill 进程id # 杀死进程的命令
Pkill -9 #杀死全部进程
Hostnamectl set-hostname #更改主机名
显示磁盘空间 df -h
显示系统主机名的命令: uname -n
systemctl stop firewalld.service #关闭防火墙服务
systemctl disable firewalld.service #禁止防火墙开机自启
iptables -F #清空防火墙规则
cat /etc/os-release #如何查看系统发行版信息
#cat /etc/redhat-release #查看系统版本信息
/etc/profile #系统全局环境变量配置文件
userdel -r 用户名 #删除用户信息,和家目录
yum clean all #清空缓存
yum makecache #生成yum缓存
查看文件夹大小du -sh
centos6 命令管理服务 : service nginx start
centos7 命令管理服务: systemctl start/stop/restart nginx
查看内存大小信息
cat /proc/meminfo |grep MemTotal
free -m
查看cpu
cat /proc/cpuinfo
Lscpu top
查看板卡
Cat pro/pci lspci
查看网卡
cat pro/interrupts
如何手动启动网卡?
Ifup 网卡名
Ifup ens33
Ifup eth0
Systemctl start network
1.文件夹的操作慢命令
Pwd : 获取当前在哪个文件夹(目录) print work 目录(我在哪的命令)
**ls ** list的意思,查看当前文件夹下有哪些文件夹
man 手册 ,解释linux的命令如何使用
cd 更改工作目录的命令 cd /tmp
增
语法: mkdir 文件夹名字 (文件夹是蓝色的)
改
语法: mv命令,旧名字 新名字
mv 一脸懵逼 二脸懵逼
#新名字存在就是把一脸懵逼移动到二脸懵逼文件下,新名字不存在,就是改名字(后边的斜杠加不加都一样)
mv 二脸懵逼/呵呵/ ./ #这是把呵呵从二脸懵逼文件夹下移到当前文件夹下了
查:
语法: ls 查看文件夹内容
ls 呵呵
linux隐藏文件都是以 . 开头
ls -a 显示文件夹所有内容,以及隐藏文件
ls -la 以列表形式,详细输出文件信息
2.vim编辑器
即文本编辑器
字母 i ,代表插入,编辑
退出编辑模式,按下esc键
输入 : 冒号,进入底线命令模式 ,输入 :wq!
: w写入
q 退出 !强制的
:wq! 强制写入文本且退出vim
:q! 不写入直接强制退出
:w! 只保存写入,不退出
工作模式
命令模式 编辑模式 底线命令模式
3.创建linux普通用户
useradd 用户名 #创建的用户信息会放在 / etc / passwd 这个文件下
useradd xiaofeng
passwd xiaofeng # 给肖峰更改密码
userdel - r 用户名 # 删除用户信息,和家目录
4.查看帮助信息
mkdir --help
man mkdir
5.递归创建文件夹信息
mkdir -p /tmp/s19/{男同学,女同学/小魏}
意思是:创建s19文件夹,底下有男同学,女同学目录,且女同学里面有个小魏
6.查看文本cat
more翻页显示文件内容
less 翻页显示文件内容 用于查看很大的文本 ,
cat读取文件,是一次性读取,非常占内存,用于读取小文本
Touch 创建普通文件
7.复制文件夹,文件
语法:cp 你要复制的内容 复制之后的文件名
cp filename filename.bak
8.查找命令
语法:find 从哪找 -name 你要找的文件名
-name 指定文件名字
-type 指定文件类型 f 文本类型 d文件夹类型
find / -name heeh.txt # 全局搜索
find /etc -name heeh.txt #局部搜索
找出/etc/下所有的txt文本 (*代表所有)
find /etc -name "*.txt"
找到/etc/下所有的python文件夹
find /etc -type d -name python*
9.管道符的用法
语法:第一条命令 | 第二条命令
ps -ef | grep python #查看进程信息
10.端口信息
Redis 6379
mysql 3306
mongodb 27017
80 http web服务器端口
443 https 加密的http协议
8000 django
22 ssh协议用的端口
8080 自定义的端口
netstat -tunlp |grep 3306 #确认mysql是否启动了3306端口
netstat -tunlp |grep 8000 #验证django是否正常启动
11.过滤字符串命令,过滤文本信息
语法 : grep 参数 你要过滤字符串 你要操作的文件
grep -i "all" settings.py
-i 是忽略大小写 -v 是翻转搜索结果
1)过滤掉settings.py中无用的信息(空白行,注释行)
grep -v "^#" settings.py | grep -v "^$"
2)过滤出file1中以abc结尾的行
grep 'abc$' file1
12.查看,检测文件
head -5 filename #看文件的前5行
tail -5 filename #看文件的后5行
tail -f fielname #实时监测文件信息
13.alias 别名
alias rm="echo 你这个大傻x,求你别用rm了"
unalias rm #取消别名 ,重新赋值别名变量也可以
14.远程传输命令scp
语法: scp 你想传输的内容 你想传输到的地方
1)把自己的文件 发送给别人
scp 小姐姐电话.txt root@192.168.16.41:/tmp/
2)把别人的文件夹拿过来
scp -r root@192.168.16.41:/tmp/s19/ ./
3)把自己的文件夹,发送给别人
scp -r 你的文件夹 用户名@其他人的服务器ip:路径
15.如何查看文件夹大小du -sh
ls -lh . #详细的显示当前文件信息,和大小单位
ll 等于 ls -l
du -sh /var/log/ # -h 显示 kb mb gb 单位 -s 显示合计大小
16.linux的任务管理器
top命令
17.给文件加锁,解锁
chattr +a filename #给文件加锁 让文件不得删除
chattr -a filename #减锁
lsattr filname #显示文件是否有锁
18.时间同步
date 查看当前系统时间
和阿里云的时间服务器同步
ntpdate -u ntp.aliyun.com #和阿里的时间服务器同步 -u 更新
call :查看日历
19.切换用户 su
Whoami #先看下当前用户(我是谁)
su - oldboy #切换用户
logout ctrl + d #退出用户登录
20.解压缩源代码
语法: tar -xf Python-3.6.2.tgz
tar 是压缩解压的命令 -x 是解压参数 -f 指定一个压缩文件的名字
1)解压缩命令
-c 打包
-x 解包
-z 调用gzip命令去压缩文件,节省磁盘空间
-v 显示打包过程
语法: tar -cvf 打包文件的名字 你要打包的内容
压缩<打包>当前的所有内容到alltmp.tar这个文件中,这里不节省磁盘
tar -cvf 压缩文件的名字.tar ./*
解压的方式
tar -xvf 压缩文件的名字.tar
打包文件,并且压缩文件大小的用法,节省磁盘
tar -zcvf 压缩文件的名字.tar.gz ./*
解压缩
tar -zxvf 压缩文件的名字.tar.gz
21.linux下载软件包的方法有?
wget curl
22.linux如何安装软件?有几种方式?
yum rpm 源码包
rpm命令的使用方式:
安装软件的命令格式 rpm -ivh filename.rpm # i表示安装 v显示详细过程 h以进度条显示
升级软件的命令格式 rpm -Uvh filename.rpm
卸载软件的命令格式 rpm -e filename.rpm
查询软件描述信息的命令格式 rpm -qpi filename.rpm
列出软件文件信息的命令格式 rpm -qpl filename.rpm
查询文件属于哪个 RPM 的命令格式 rpm -qf filename
23.linux和windows互传文件的软件 lrzsz
yum install lrzsz -y
rz 接受文件(从windows接受文件)
sz 发送文件(发送linux文件给windows)
24.临时提权的命令sudo
1.修改sudoers配置文件,把你想提权的用户写进去
编辑配置文件
vim /etc/sudoers
2.写入如下信息,定位到那一行
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
kun ALL=(ALL) ALL #允许kun在任何地方,执行任何命令
3.使用sudo命令
sudo 你想执行的命令
25.文件拥有者分三类
属主 users u
属组 group g
其他人others o
- 普通文本
d 文件夹
l 软连接
R 可读 w 可写 x 可执行
修改权限
chmod 权限 文件/文件夹权限
chmod 777 你好.txt #赋予文本最高的权限
权限分为: r 4 w 2 x 1
更改文件的属主,属组
chown 用户名 要操作的文件 #更改文件属主
chgrp 组名 要操作的文件 #更改文件属组
26.软连接
语法: ln -s 目标文件 快捷方式绝对路径
27.linux的命令提示符
PS1变量
echo $PS1 #显示命令提示符
修改命令提示符
PS1="[u@h w ]$"
27.什么是dns(域名解析系统)
其实就是一个超大的网络电话簿 ,dns就是域名解析到ip的一个过程,
linux的dns配置文件如下 :
vim /etc/resolv.conf
linux解析dns的命令:
nslookup 域名
解析流程:
自上而下的顺序
1.优先查找本地dns缓存
2.查找本地/etc/hosts文件,是否有强制解析
3.如果没有去/etc/resolv.conf指定的dns服务器中查找记录(需联网
4.在dns服务器中找到解析记录后,在本地dns中添加缓存
5.完成一次dns解析
如何给linux添加一个dns服务器记录
echo "nameserver 114.114.114.114" >> /etc/resolv.conf
28.定时任务
分 时 日 月 周
-
-
-
-
- 命令的绝对路径
-
-
-
例:每周一到周五的凌晨1点,清空/tmp目录的所有文件
00 1 * * 1-5 /usr/bin/rm -rf /tmp/*
在晚上8-11点的第3和第15分钟执行
3,15 20-23 * * * 命令的绝对路径
29.yum源的工作目录是?
/etc/yum.repos.d/ 在这个目录下
所有名字是 *.repo的文件,就会被识别为仓库文件
Yum makecache生成yum缓存
30.tree是什么作用?
以树状图显示文件夹内容
31.系统用户的环境变量配置文件是?
.修改/.bash_profile(首选),将影响当前用户。在/.bash_profile文件中添加
系统全局环境变量配置文件是?
/etc/profile
31.防火墙
防火墙作用:保护服务器的流量网络安全,允许/禁止 ip地址段和端口的出入流量
systemctl stop firewalld.service #关闭防火墙服务
systemctl disable firewalld.service #禁止防火墙开机自启
iptables -F #清空防火墙规则
Virtualenv 虚拟环境
含义:virtualenv就是用来为一个应用创建一套“隔离”的Python运行环境。
1.python的虚拟环境,用于解决python环境依赖冲突的问题,仅仅是多个解释器的分身,多个解释器的复制,和操作系统无关
2.python虚拟环境的工具有很多 ,有virtualenv,pipenv ,pyenv
3.virtualenv 可以在系统中建立多个不同并且相互不干扰的虚拟环境。
创建虚拟环境
这个命令,在哪敲,就会在哪生成venv文件夹
virtualenv --no-site-packages --python=python3 venv #得到独立第三方包的环境,并且指定解释器是python3
#参数解释
--no-site-packages #这个参数用于构建,干净的环境,没有任何的第三方包
--python=python3 #指定虚拟环境的本体,是python的哪一个版本
venv 就是一个虚拟环境的文件夹,是虚拟python解释器
source activate #source是读取指令,读取这个activate脚本中的内容,激活虚拟环境
virtualenvwrapper
Virtaulenvwrapper是virtualenv的扩展包,用于更方便管理虚拟环境
命令:
mkvirtualenv 虚拟环境的名字 #创建虚拟环境,存放目录是统一管理的
workon 虚拟环境的名字 #可以在任意目录直接激活虚拟环境
rmvirtualenv 虚拟环境的名字 #删除虚拟环境
lsvirtualenv #列出所有的虚拟环境
cdvirtualenv #进入虚拟环境的目录
cdsitepackages #进入虚拟环境的第三方包
virtualenv和virtualenvwrapper区别:
virtualenv每次开启虚拟环境之前要去虚拟环境所在目录下的 bin 目录下 source 一下 activate,
Virtualenvwrapper
1.安装虚拟环境 pip3 install virtualenvwrapper
2.创建并进入虚拟环境 mkvirtualenv env1
3.切换虚拟环境 workon 虚拟环境名
nginx
web服务器(nginx): 接收HTTP请求(例如www.pythonav.cn/xiaocang.jpg)并返回数据
web框架(django,flask): 开发web应用程序,处理接收到的数据
1.静态网站
就是不变化的网页,静态的html,css js等页面,以及jpg gif mp4等静态资源
2.动态网站
指的是,可以与数据库打交道,数据交互的网页,网页内容根据数据库的数据变化
3..常见web服务器有哪些
windows下 IIS服务器
linux下的web服务器 nginx apache lighthttp
4.web服务器
nginx 这样的软件
web服务器它自己 不支持 编程,仅仅是页面返回,nginx + lua
django flask tornado这样的 web逻辑框架 支持 程序员自己写代码,进行逻辑处理
nginx是什么
nginx是web服务器、反向代理服务器、邮件代理服务器,负载均衡等等,支持高并发的一款web服务器
为什么Nginx性能这么高
因为他的事件处理机制:异步非阻塞事件处理机制:运用了epoll模型,提供了一个队列,排队解决
为什么要用Nginx
1.跨平台、配置简单、方向代理、高并发连接:处理2-3万并发连接数,官方监测能支持5万并发,内存消耗小:开启10个nginx才占150M内存 ,nginx处理静态文件好,耗费内存少,
2.而且Nginx内置的健康检查功能:如果有一个服务器宕机,会做一个健康检查,再发送的请求就不会发送到宕机的服务器了。重新将请求提交到其他的节点上。
3.使用Nginx的话还能:
节省宽带:支持GZIP压缩,可以添加浏览器本地缓存
稳定性高:宕机的概率非常小
接收用户请求是异步的
启动nginx
直接输入nginx 指令,默认代表启动,不得再执行第二次
nginx
nginx -s reload #平滑重启nginx,不重启nginx,仅仅是重新读取nginx配置文件
nginx -s stop #停止nginx进程
nginx -t #检测nginx.conf的语法
Nginx怎么处理请求的
nginx接收一个请求后,首先由listen和server_name指令匹配server模块,再匹配server模块里的location,location就是实际地址
server{ # 一个虚拟主机
listen 80; # 监听的端口,访问的端口80
server_name 192.168.11.11; # 访问的域名192.168.11.11
location / { # 访问的路径 /
root html; # 指定页面的目录,访问/会找到html目录
index index.html # 指定网页,访问/就是访问index.html
}
}
server{ #虚拟主机
listen 8080; #nginx监听端口
server_name 192.168.11.11; #nginx访问域名
location / { #location匹配url
include uwsgi_params; #将uwsgi参数添加进nginx
uwsgi_pass 0.0.0.0:8000; #反向代理转发请求给uwsgi
}
}
location的语法能说出来吗
解释目录
conf 存放nginx配置文件的
html 存放前端文件目录 ,首页文件就在这里
logs 存放nginx运行日志,错误日志的
sbin 存放nginx执行脚本的
nginx的反向代理功能
1.见过生活中的代理
客户端(请求资源) -> 代理(转发资源) -> 服务端(提供资源)
功能参数: proxy_pass
使用“反向代理服务器的优点是什么
反向代理服务器可以隐藏源服务器的存在和特征。它充当互联网云和web服务器之间的中间层。这对于安全方面来说是很好的,特别是当您使用web托管服务时。
如何永久添加/opt/python36/的环境变量?
vim /etc/profile
添加PATH = /opt/python36/bin:
source /etc/profile
负载均衡
参数:upstream 地址池
Nginx负载均衡与Nginx代理不同地方在于
Nginx代理仅代理一台服务器,而Nginx负载均衡则是将客户端请求代理转发至一组upstream虚拟服务池
分摊到多个操作单元上进行执行
负载均衡的规则
轮询 ((不做配置,默认轮询)) 按时间顺序逐一分配到不同的后端服务器(默认)
Weight(权重(优先级)) 加权轮询,weight值越大,分配到的访问几率越高,最常用的方式,
ip_hash(配置,根据客户端ip哈希分配,不能和weight一起用) 每个请求按访问IP的hash结果分配,这样来自同一IP的固定访问一个后端服务器
url_hash 按照访问URL的hash结果来分配请求,是每个URL定向到同一个后端服务器
least_conn 最少链接数,那个机器链接数少就分发
为什么要用nginx结合uwsgi
1.nginx支持静态文件处理性能更好,django uwsgi,默认不支持静态文件解析
2.nginx的负载均衡特性,让网站并发性更高
3.并且反向代理特性,用户访问 80,即可访问到8000的应用
4.uwsgi支持多进程的方式,启动django,性能更高
5.nginx转发请求给uwsgi ,应该用 uwsgI_pass ,实现了uwsgi协议的请求转发
Nginx的优缺点
优点:
占内存小,可实现高并发连接,处理响应快
可实现http服务器、虚拟主机、反向代理、负载均衡
Nginx配置简单
可以不暴露正式的服务器IP地址
缺点:
动态处理差:nginx处理静态文件好,耗费内存少,但是处理动态页面则很鸡肋,现在一般前端用nginx作为反向代理抗住压力,
如何用Nginx解决前端跨域问题
使用Nginx转发请求。把跨域的接口写成调本域的接口,然后将这些接口转发到真正的请求地址
Nginx虚拟主机怎么配置?
1、基于域名的虚拟主机,通过域名来区分虚拟主机——应用:外部网站
2、基于端口的虚拟主机,通过端口来区分虚拟主机——应用:公司内部网站,外部网站的管理后台
3、基于ip的虚拟主机。
基于虚拟主机配置域名
需要建立/data/www /data/bbs目录,windows本地hosts添加虚拟机ip地址对应的域名解析;对应域名网站目录下新增index.html文件;
基于端口的虚拟主机
使用端口来区分,浏览器使用域名或ip地址:端口号 访问
进程管理工具supervisor
其实就是在帮咱们去执行命令
退出虚拟环境,在物理环境下安装
supervisorctl 这是管理命令
supervisord 这个是服务端命令
启动supervisor服务
supervisord -c /etc/supervisor.conf
启动所有项目
supervisorctl -c /etc/supervisor.conf
停止任务
supervisor> stop s19_ob_crm
s19_ob_crm: stopped
查看任务状态
supervisor> status
s19_ob_crm STOPPED May 08 12:23 PM
停止所有的任务
supervisor> stop all
s19_ob_crm STOPPED May 08 12:23 PM
启动所有任务
supervisor> start all
s19_ob_crm RUNNING May 08 12:23 PM
Redis 缓存数据库
https://www.cnblogs.com/pyyu/p/9467279.html
./redis-cli //redis的客户端
./redis-server //redis的服务端
Redis是一个开源的基于内存的,key-value数据结构的缓存数据库,支持数据持久化,m-s复制
1.数据类型 string set hash list
1)字符串(strings)
语法:set key value
set name dsb #设置name为key,值是dsb
get name #获取name的值
append 追加string
mset 设置多个键值对
mget 获取多个键值对
del 删除key
incr 递增+1
decr 递减-1
2)散列(hashes) 字典key-value
语法 hset key field value
hset 设置散列值
hget 获取散列值
hmset 设置多对散列值
hmget 获取多对散列值
hsetnx 如果散列已经存在,则不设置(防止覆盖key)
hkeys 返回所有keys
hvals 返回所有values
hlen 返回散列包含域(field)的数量
hdel 删除散列指定的域(field)
hexists 判断是否存在
例:
hset news1 content "news content" #添加一个conntent内容
hget news1 content #获取news的内容
3)列表(lists)
lpush 从列表左边插
rpush 从列表右边插
lrange 获取一定长度的元素 lrange key start stop
ltrim 截取一定长度列表
lpop 删除最左边一个元素
rpop 删除最右边一个元素
lpushx/rpushx key存在则添加值,不存在不处理
4)集合(set)无序,去重的数据类型
sadd/srem 添加/删除 元素
sismember 判断是否为set的一个元素
smembers 返回集合所有的成员
sdiff 返回一个集合和其他集合的差异
sinter 返回几个集合的交集
sunion 返回几个集合的并集
5)有序集合(zset)
keys * 查看机器所有的key
type key #显示key的类型
expire key #给key加上过期时间
ttl key #查看key的剩余 过期时间 -1 是永不过期 -2 是没有这个key
persist # 取消key的过期时间 -1表示key存在,没有过期时间
exists key #判断key存在 存在返回1 否则0
dbsize #计算key的数量
2.发布订阅
发布 PUBLISH 订阅 SUBSCRIBE
3.redis 数据持久化
背景:进程被杀死,服务器断电,内存中的数据都会被释放,数据丢失,如果redis没有持久化,数据丢失
RDB
基于快照的持久化,速度更快,一般用作备份,主从复制也是依赖于rdb持久化功能
通过save指令可以手动触发 持久化
也可以配置时间触发持久化
save 900 1 #900秒 1个修改类的操作
aof:
AOF文件内容是字符串
以追加的方式记录redis操作日志的文件。
可以最大程度的保证redis数据安全,类似于mysql的binlog
AOF
优点:数据安全,不怕数据损坏
缺点:,占磁盘,性能损耗高,数据恢复慢
Rdb:
定期保存数据快照 数据可能会丢失,但是持久化速度最快
使用RDB恢复数据:自动的持久化数据存储到dump.rdb后。实际只要重启redis服务即可完成(启动redis的server时会从dump.rdb中先同步数据)
使用save进行本地存储
save时间,以下分别表示更改了1个key时间隔900s进行持久化存储;更改了10个key300s进行存储;更改10000个key60s进行存储。
save 900 1
save 300 10
save 60 10000
客户端使用命令进行持久化save存储:
./redis-cli -h ip -p port save
./redis-cli -h ip -p port bgsave
怎么在不重启的情况下将rdb切换成aof
此选项为aof功能的开关,默认为“no”,可以通过“yes”来开启aof功能 ,只有在“yes”下,aof重写/文件同步等特性才会生效
CONFIG set appendonly yes
CONFIG SET save ""
4.高可用之哨兵功能 redis-sentinel
redis哨兵是监控redis主从服务,不存储数据的,
作用是用于自动切换reidis服务主从关系,即当主库服务停止后,会将其中一个从库变为主库
5.redis-cluster集群搭建
redis的集群还未分配 槽位 slots ,我们得下载ruby的脚本,创建这个16384个槽位分配
集群,也就是分布式存储,至少有三个主库才可以运行
使用集群,只需要将每个数据库节点的车路士特热-嗯啊变了配置打开即可
Docker
docker是容器软件,应用于快速构建应用
1.docker的三大生命周期
容器 镜像 .仓库
仓库有dockerhub 共有仓库,docker registory私有仓库,存放镜像的地方
2.镜像:
增删查
docker search 镜像名字 # 搜索镜像名
docker search hello-world #搜索docker镜像
docker pull 镜像名 #下载docker镜像
docker image ls #查看当前机器的docker镜像
docker images #同上,查看本机的所有docker镜像
docker rmi 镜像名/镜像id #删除docker镜像
docker run -d后台运行 镜像名
-p指定端口映射
-P 随机端口映射
-it (交互式的命令操作)
-v 数据库挂载(宿主机和容器空间的映射 )
docker save #导出镜像
docker load #导入镜像
docker start #启停容器
docker stop
docker login #登录dockerhub
docker commit #提交本地容器记录,保存为一个新的镜像
docker build . #打包构建docker镜像
docker run --name 容器的名字 运行的镜像名
语法是: docker tag 仓库名 yuchao163/仓库名
docker tag 5e0 yuchao163/s19-centos-flask #.修改镜像的名字
#推送docker image到dockerhub
docker push yuchao163/centps-cmd-exec:latest
#删除本地镜像,测试下载pull 镜像文件
docker pull yuchao163/centos-entrypoint-exec
容器:
增删改查
docker run 镜像名字/镜像id #运行docker镜像,生成容器记录
docker run 不存在的镜像名 #会先docker pull下载这个镜像,然后在自动运行
docker container ls #列出当前机器的所有容器(正在运行的容器,正在 运行的docker进程 )
docker ps #查看docker进程,docker容器记录的(正在运行的)
docker ps -a #查看docker所有的进程,以及挂掉的进程
Docker ps -aq #列出所有id
运行一次镜像,就会生成一个容器记录
docker容器必须有正在运行的进程,否则容器就会挂掉
docker rm 容器id/容器名 #删除容器记录(只能删除挂掉的容器记录)
docker rm `docker ps -aq` #一次性删除所有docker容器记录,只能删除挂掉的记录
docker logs 容器id #查看容器内的日志信息
docker logs -f 容器id #实时查看容器的日志
docker exec -it 容器id /bin/bash #用exec指令,进入到容器系统内
-i 交互式的shell命令方式
-t 开启一个终端,去运行
docker exec -it 容器id /bin/bash # 进入一个已经在运行的docker容器中
docker run -it ubuntu /bin/bash #交互式的运行ubuntu容器,且进入容器空间内
cat /etc/os-release #查看版本信息
退出docker容器空间,然后提交这个容器,生成一个新的镜像文件
语法:docker commit 你想要提交的容器id 你想创建的镜像名
运行一个web内容的docker容器
docker run -d -P training/webapp python app.py
-d 后台运行
-P 大写的字母p参数,意思是随机映射一个端口
在后台运行docker容器
docker run -d centos /bin/sh -c "while true;do echo hello centos; sleep 1;done"
#每秒打印一次hello centos
-d daemonize 后台运行的意思
centos 指定一个镜像去运行
/bin/sh 指定centos的解释器
-c 指定一段shell语法
指定端口映射关系
docker run -d -p 8888:5000 training/webapp python app.py
-p 宿主机端口:容器内的端口
由于重启了docker,所有的容器都挂掉了,还得重新再运行一下docker私有仓库
Docker run --privileged=true -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry registry
-d 后台运行
-p 端口映射
-v 数据卷挂载
--privileged=true #设置特权运行的容器
dockerfile的学习
dockerfile作用是自定义一个docker镜像
每一个应用程序运行,必须得有一个系统作为载体
定义以哪一个基础镜像去运行docker容器
FROM scratch #制作base image 基础镜像,尽量使用官方的image作为base image
FROM centos #使用base image
FROM ubuntu:14.04 #带有tag的base image
LABEL version=“1.0” #容器元信息,帮助信息,Metadata,类似于代码注释
LABEL maintainer=“yc_uuu@163.com" #告诉别人,这个dockerfile是谁写的
#RUN 万能的指令,去执行你输入的命令
#对于复杂的RUN命令,避免无用的分层,多条命令用反斜线换行,合成一条命令!
RUN yum update && yum install -y vim
Python-dev #反斜线换行
RUN /bin/bash -c "source $HOME/.bashrc;echo $HOME”
WORKDIR /root #相当于linux的cd命令,改变目录,尽量使用绝对路径!!!不要用RUN cd
WORKDIR /test #如果没有就自动创建
WORKDIR demo #再进入demo文件夹
RUN pwd #打印结果应该是/test/demo
ADD 和 COPY
ADD指令用于把物理机上的文件,添加到容器空间内,并且还有解压缩的作用
COPY指令的作用,是吧物理机的文件,拷贝到容器空间内,仅仅一个作用
ADD与COPY
- 优先使用COPY命令
- ADD除了COPY功能还有解压功能
ENV
环境变量,尽可能使用ENV增加可维护性
rabbitmq
含义:rabbitmq是一个消息代理,他接收,存储和转发消息(邮局)
1.对消息队列进行授权,可以读写
rabbitmqctl set_permissions -p "/" heiheihei ".*" ".*" ".*"
2..设置用户为管理员权限
rabbitmqctl set_user_tags heiheihei administrator
3..创建rabbitmq的登录账号密码
rabbitmqctl add_user heiheihei 123
(可以 netstat -tunlp 看一下端口 15672,在地址栏输入地址:15672,可以访问了)
1)程序解耦
2)数据冗余,例如rabbitmq的ack机制,消息确认机制
3)削峰能力
4)可恢复性,就算系统中部分组件挂掉,消息在队列也不丢失,待组件恢复后继续处理消息。
5)异步通信,如发红包,短信等流程丢入队列,可以优先级很低的去处理
no_ack=True
不确认机制,不需要给服务端一个确认回复,服务端直接标记消息清除,从队列中删除
no_ack=Flase
确认机制,你消费走了数据,还得给服务端一个确认回复,让服务端可以正确的标记消息清除,保证消息不丢失
队列的持久化
背景:默认队列不支持持久化,rabbitmq重启之后,所有队列丢失
实现rabbitmq持久化条件
delivery_mode=2 #实现消息的持久化,重启后,队列和消息都不丢失
使用durable=True声明queue是持久化
salt 命令
salt-key -L #列出所有主机的秘钥信息
salt-key -a 秘钥id #接受一个秘钥id
#常用参数
-L #查看KEY状态
-A #允许所有
-D #删除所有
-a #认证指定的key
-d #删除指定的key
-r #注销掉指定key(该状态为未被认证)
RPC远程过程调用
将一个函数运行在远程计算机上并且等待获取那里的结果,这个称作远程过程调用(Remote Procedure Call)或者 RPC。 RPC是一个计算机通信协议。
定时任务
crontab是用来定期执行程序的命令
crontab -e
crontab -l
参数
-e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI
-l : 列出目前的时程表
在以上各个字段中,还可以使用以下特殊字符:
"*"代表所有的取值范围内的数字,如月份字段为*,则表示1到12个月;
"/"代表每一定时间间隔的意思,如分钟字段为*/10,表示每10分钟执行1次。
"-"代表从某个区间范围,是闭区间。如“2-5”表示“2,3,4,5”,小时字段中0-23/2表示在0~23点范围内每2个小时执行一次。
","分散的数字(不一定连续),如1,2,3,4,7,9。
注:由于各个地方每周第一天不一样,因此Sunday=0(第一天)或Sunday=7(最后1天)
每天上午8-11点的第3和15分钟执行command:
3,15 8-11 * * * command
每隔2天的上午8-11点的第3和15分钟执行command:
3,15 8-11 */2 * * command
每周六、周日的1 : 10重启smb
10 1 * * 6,0 /etc/init.d/smb restart
2>&1 代表什么
代表 错误重定向到标准输出
例 :*/1 * * * * /usr/local/php/bin/php posts.php >> /data/logs/audit_bbsposts.log 2>&1
0表示键盘输入
1表示屏幕输出
2表示错误输出
">"就是输出(标准输出和标准错误输出)重定向的代表符号
重定向> 若有文件则清除原来数据,重新写入;没有则创建并写入;
重定向>>若有文件,则在文件末尾继续写入;没有则创建并写入
command >out.file是将command的输出重定向到out.file文件,即输出内容不打印到屏幕上,而是输出到out.file文件中。2>&1 是将标准出错重定向到标准输出,
这里的标准输出已经重定向到了out.file文件,即将标准出错也输出到out.file文件中。最后一个& , 是让该命令在后台执行。
试想2>1代表什么,2与>结合代表错误重定向,而1则代表错误重定向到一个文件1,而不代表标准输出;
换成2>&1,&与1结合就代表标准输出了,就变成错误重定向到标准输出.
awk用法