一、在Linux系统中安装软件的方式:
1、利用包管理工具安装
1.1 yum命令(适用于 CentOS)
例: 对于nginx软件包的使用
~ 查找软件包
yum search nginx
~ 安装软件包
yum install nginx
~ 卸载软件
yum erase nginx / yum remove nginx
~ 列出软件包信息
yum info nginx
~ 列出所有已安装的软件包
yum list installed
1.2 rpm命令(适用于 Redhat)
1.安装
~ rpm -i 包名
例:
rpm -i example.rpm 安装 example.rpm 包;
rpm -iv example.rpm 安装 example.rpm 包并在安装过程中显示正在安装的文件信息;
rpm -ivh example.rpm 安装 example.rpm 包并在安装过程中显示正在安装的文件信息及安装进度;
2、查看安装完成的软件
~ rpm -qa -- 列出所有被安装的rpm package
-a选项是查询所有已经安装的软件包。
-q是查询一个包是否安装
(显示区别:已经安装的rpm包不会显示后缀.rpm ,而未安装的包则显示后缀.rpm)
例:
[root@ysk]# rpm -qa | grep jdk
java-1.6.0-openjdk-1.6.0.0-1.66.1.13.0.el6.i686
java-1.7.0-openjdk-1.7.0.45-2.4.3.3.el6.i686
3、卸载软件
~ rpm -e 包名
4、升级软件
~ rpm -Uvh rpm包名 -- 升级软件
(如果已安装老版本,则升级;如果没安装,则直接安装)
2、源代码构建安装
例:安装Git官方最新版
1. 下载Git
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.24.1.tar.xz
2. 解压缩和解归档
xz -d git-2.24.1.tar.xz
tar -xf git-2.24.1.tar
3. 配置安装目录到/usr/local
./configure --prefix=/usr/local
4. 进入安装包目录
cd git-2.24.1
5. 拿到解压后的源码以后我们需要编译源码了,不过在此之前需要安装编译所需要的依赖
yum install -y curl libcurl-devel
6. 执行安装
make && make install
二、Linux中对redis操作的常用命令
(redisdoc.com -- Redis命令参考网站)
1、安装redis(源代码构件安装)
1. 下载Redis官方源代码
wget http://download.redis.io/releases/redis-5.0.7.tar.gz
2. 解压缩和解归档
gunzip redis-5.0.7.tar.gz
tar -xf redis-5.0.7.tar
3. 构建和安装
cd redis-5.0.7
make && make install
4. 启动Redis服务
redis-server --requirepass 口令 >> redis.log &
5. Redis客户端工具
redis-cli
2、与redis相关及在linux中常用的命令
2.1 常用命令
~ 查询网络端口
netstat -ntlp
~ 查看所有键值对
keys *
~ 查看数据库大小(键值对数量)
dbsize
~ 只显示某一进程的某一列
1、只显示redis-server进程的第二列
ps -ef | grep 'redis-server'|grep -v 'grep'|awk '{print $2}'
2、只显示redis-server进程最后一列
ps -ef | grep 'redis-server'|grep -v 'grep'|awk '{print $NF}'
~ 把列变成行批量杀掉进程
ps -ef | grep 'redis-server'|grep -v 'grep'|awk '{print $2}'| xargs kill
-- ps -ef:显示所有进程
-- grep: 查找
-- grep -v grep: 查找不包含grep的进程
-- awk ‘{print $2}’ : 提取第二列
-- xargs:一般是和管道一起使用,给命令传递参数的一个过滤器,
也是组合多个命令的一个工具
~ 根据名字杀掉进程
pkill 'redis-server'
~ 根据名字杀掉进程
killall 'redis-server'
命令 & ---> 将命令放到后台运行
jobs ---> 查看后台运行的命令
fg %编号 ---> 将后台命令放到前台运行
Ctrl+z ---> 将前台命令暂停并放到后台
bg %编号 ---> 将暂停的命令在后台运行
> set username luohao ex 120 ---> 添加键值对
> get username ---> 通过键查找值
> ttl username ---> 查看键过期时间
> expire username 300 ---> 设置键过期时间
> keys * ---> 查看所有键
> dbsize ---> 查看数据库大小(键值对数量)
> select 0~15 ---> 选择数据库 (默认开了16个数据库)
> flushdb ---> 清空当前数据库
> flushall ---> 清空所有数据库的数据
2.2 redis相关命令
~ 需要密码的启动redis并放到后台运行
redis-server --requirepass 123456 >> redis.log &
~ 把redis服务启动在某一个ip上(适用于多网卡场景)
redis-server --requirepass 123456 --bind ip地址
~ 命令行远程连接redis服务
redis-cli
~ 完成登录验证
auth 密码
~ 命令行远程连接redis服务指定主机指定端口并附带密码
redis-cli -h host -p port -a password
-- host:远程redis服务器host
-- port:远程redis服务端口
-- password:远程redis服务密码
~ 退出redis(cli场景中)
-- shutdown save 保存并关闭
-- save 保存数据
-- bgsave 后台保存数据
-- quit 退出命令行
三、redis 核心数据类型
1. 字符串
set key value ---> 添加键值对
get key ---> 通过键查看值
strlen key ---> 获取字符串长度
append key value2 ---> 给字符串追加内容
mset key1 value1 key2 value2 ---> 添加多组键值对
mget key1 key2 ---> 查看多个键对应的值
incr key ---> 值加1
incrby key value ---> 值加上value
decr key ---> 值减1
decrby key value ---> 值减去value
getrange key start end ---> 获取字符串指定范围的子串
setrange key offset value ---> 修改字符串指定位置的内容
2. 哈希(表) - hash
hset key field value ---> 添加hash类型键值对
hmset key field1 value1 field2 value2 ---> 添加多组hash类型键值对
hget key field ---> 获取hash类型字段对应的值
hmget key field1 field2 ---> 获取hash类型多个字段对应的值
hgetall key ---> 获取hash类型所有的字段和对应的值
hkeys key ---> 获取hash类型所有的字段
hvals key ---> 获取hash类型所有字段的值
hexists key field ---> 判断hash类型某个字段是否存在
3. 列表 - list
lpush key value1 value2 value3 ---> 在左边添加元素
rpush key value1 value2 value3 ---> 在右边添加元素
lpop key ---> 从左边移除一个元素
rpop key ---> 从右边移除一个元素
lrange key start end ---> 查看列表指定范围的元素
llen key ---> 查看列表元素个数
lindex key index ---> 查看列表指定位置元素
lrem key count value ---> 删除列表中指定元素
4. 集合 - set
sadd key value1 value2 value3 ---> 添加元素
srem key value ---> 删除元素
spop ---> 获取随机元素
scard key ---> 查看元素个数
smembers key ---> 查看所有元素
sismember key value ---> 查看集合中有没有指定元素
sinter key1 key2 ---> 交集
sunion key1 key2 ---> 并集
sdiff key1 key2 ---> 差集
5. 有序集合 - zset
zadd key score1 mem1 score2 mem2 ---> 添加元素
zrem key mem ---> 删除元素
zrange key start end ---> 按score的升序查看元素
zrevrange key start end ---> 按score的降序查看元素
zscore key mem ---> 查看元素对应的score
zincrby key value mem ---> 修改元素的score值
四、骆老师补充讲解(linux,python3,mysql,django)
1、在Linux系统中启停服务
~ 启动:systemctl start nginx
service nginx start
~ 停止:systemctl stop nginx
service nginx stop
~ 重启:systemctl restart nginx
~ 查看状态:systemctl status nginx
~ 开机自启:systemctl enable nginx
~ 禁用自启:systemctl disable nginx
2、一些常识
2.1 网络应用的模式:
~ C/S Client/Server - 客户端/服务器模式
~ B/S Browser/Server - 浏览器/服务器模式
~ P2P peer-to-peer - 对等模式
2.2 URL/URI - 统一资源定位符/统一资源标识符
~URL:uniform resource locator
https://www.baidu.com:443/index.html
~URI:uniform resource indentifier
https://www.baidu.com:443/img/bd_logo1.png
2.3 DNS - 域名服务器(将服务器的域名转换成对应的IP地址)
2.4 反向代理 - 代理用户浏览器向服务器发起请求
~ 保护真正的服务器免于直接被攻击
~ 配置负载均衡,将流量分摊到多台服务器上
2.5 Web服务器 - 处理静态资源 - Nginx / Apache
2.6 应用服务器 - uWSGI / Gunicorn
2.7 其他服务器
~ 缓存服务器 - Redis
~ 数据库服务器 - MySQL
~ 邮件服务器 - Sendmail
~ 文件服务器 - NFS / FastDFS
~ 消息队列服务器 - RabbitMQ / Kafka
2.8. HTTP - 超文本传输协议
~ HTTP请求报文
请求行 - GET /path/resource HTTP/1.1
请求头 - 键值对
消息体 - 发给服务器的数据
~ HTTP响应报文
响应行 - HTTP/1.1 200 OK
响应头 - 键值对
消息体 - 服务器返回的数据
2.9 一些Python解释器
CPython - C语言实现的Python解释器
Jython - Java实现的Python解释器
IronPython - C#实现的Python解释器
PyPy - Python实现的Python解释器 - JIT
Anaconda - 不仅有Python解释器还有诸多三方库
2.10 其它
配置PATH环境变量保证在命令行模式下
Python解释器和相关工具在任何路径都能运行
Web应用 - 基于浏览器来使用的应用程序
手机App - 应用中呈现的数据和内容是通过服务端的程序动态生成的
用程序动态生成页面内容
用Python编写服务器端的程序,为Web和手机应用生成动态内容
开发效率高 + 生态圈非常繁荣
对本地代码实施版本控制并同步到版本控制服务器
1. git init ---> 将普通文件夹变成版本仓库
2. git add命令
git add ---> 是将工作区内容添加到暂存区
git add -A ---> 提交所有变化
git add -u ---> 提交被修改(modified)和被删除(deleted)文件,不包括新文件(new)
git add . ---> 提交新文件(new)和被修改(modified)文件,不包括被删除(deleted)文件
3. git commit -m '...' ---> 将暂存区内容添加到版本库
4. git status / git log
5. git remote add origin ---> 绑定远端仓库
6. git push -u origin master ---> 将本地代码推到服务器
4、一些补充知识点
4.1 linux:
history -c - 清楚历史命令
i历史记录编号 - 再次执行命令
alias '命令简化名=原本命令' - 命令别名
unalisa 命令简化名 - 取消命令别名
echo $PATH - 显示当前PATH环境变量
4.2 安装Python3
1. 安装依赖项
yum install -y zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel
2. 下载Python3源代码
wget https://www.python.org/ftp/python/3.7.6/Python-3.7.6.tar.xz
3. 解压缩和解归档
xz -d Python-3.7.6.tar.xz
tar -xvf Python-3.7.6.tar
4. 执行安装前的配置
cd Python-3.7.6
./configure --prefix=/usr/local/python37 --enable-optimizations
-- prefix:将要安装的应用安装到指定目录
-- enable-optimizations:是优化选项,加上这个 flag 编译后,性能有 10% 左右的优化
5. 构建和安装
make && make install
(这一步可以让进程放在后台运行: nohup make >> ~/install.log &)
6. 注册环境变量
- 打开配置文件:vim ~/.bash_profile
- 添加如下内容:
PATH=$PATH:/usr/local/python37/bin
export PATH
4.3 配置程序软连接:
例子:
配置pip的软链接:
ln -s /usr/local/python37/bin/pip /usr/bin/pip3
验证
pip3 --version
配置python的软链接:
ln -s /usr/local/python37/bin/python3 /usr/bin/python3
4.4 执行py文件前置条件:
1.给文件添加执行权限
2.在文件内容第一排添加:
#!/usr/bin/python3 (软连接)
--便于可以用 ./文件名 的方式运行py文件
4.5 删除命令行中的主机名:
vim /etc/bashrc
第41行: 删除 @\h
保存并退出登录
4.6 安装Nginx:
yum install -y nginx
systemctl start nginx
systemctl stop nginx
4.7 安装MySQL:
1. 清除掉所有跟mariadb相关的东西
yum list installed | grep mariadb | awk '{print $1}' | xargs yum erase -y
2. 清理之前的数据和日志文件(如果存在)
rm -rf /var/lib/mysql
rm -f /var/log/mysqld.log
3. 下载MySQL官方提供的RPM包并解归档
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar
tar -xf mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar
4. 使用rpm包管理工具安装MySQL
rpm -ivh mysql-community-common-...rpm
rpm -ivh mysql-community-libs-...rpm
rpm -ivh mysql-community-client-...rpm
rpm -ivh mysql-community-server-...rpm
5. 启动服务查看随机密码
systemctl start mysqld
cat /var/log/mysqld.log | grep password
6. 用客户端工具连接MySQL
mysql -u root -p
7. 修改root用户口令
set global validate_password_policy=0;
set global validate_password_length=6;
alter user 'root'@'localhost' identified by '123456';
五、git 基础
1、git基础命令
1.1 创建和关联
- 在本机创建git仓库先创建一个空的文件夹,从shell通过cd指令进入到新建的空的文件夹中,然后执行git init指令将该文件夹变成git仓库,创建成功后会多出一个.git隐藏文件夹,但不要对它进行操作
注意:git仓库中不能再创建其他git仓库
1、git add命令
git add ---> 是将工作区内容添加到暂存区
git add -A ---> 提交所有变化
git add -u ---> 提交被修改(modified)和被删除(deleted)文件,不包括新文件(new)
git add . ---> 提交新文件(new)和被修改(modified)文件,不包括被删除(deleted)文件
2、git status ---> 查看git状态
3、git commit -m '描述' ---> 将缓存区全部提交git本地仓库
4、git log ---> 查看提交日志
5、git reset --hard HEAD ---> 让工作目录和仓库内容一致(如果没有保存到本地-commit)可以恢复缓存中的数据
6、git reset --hard 版本号 ---> 回到指定版本
7、git reset --hard HEAD^ ---> 有几个^回退几个版本
8、git checkout 文件名 ---> 从缓存区恢复工作中的内容(回到上次提交的状态)
9、git clone ---> 将服务器上的项目(仓库)克隆到本地(https地址需要密码,ssh地址)不要在git仓库里创建!克隆下来直接是git仓库!回到普通文件夹再克隆!
git clone --depth=1 地址 ---> 克隆不要之前的版本
10、git remote add origin 地址 ---> 关联远程仓库(只需关联一次)
11、git push -u origin master ---> 提交(-u在第一次提交的时候才用)
12、git push ---> 将本地仓库提交到远程master分支上
13、git push origin 分支名 ---> 提交到远程对应的分支上,不存在会自动创建
14、git pull ---> 将远程仓库内容更新到本地仓库和工作区
1.2 分支管理
- 创建仓库会默认给我们创建一个master分之,这个分之一般作为提交和发布分之;开发一般会自己创建一个develop分之,用来开发和测试;多人协作的时候还可能根据不同的人或者(不同的功能)创建不同的分之,用来独立开发
1、git branch [-a] ---> 查看分之
2、git branch 分之名 ---> 创建分之
3、git checkout 分支名 ---> 切换分之
4、git checkout -b 分之名 ---> 切换并创建新的分之
5、git diff 分之1 分之2 ---> 查看两个分之之间的差异
6、git merge 分之名 ---> 让当前分之和指定分之进行合并
注意: 切换分之、push、pull,这些操作前要保证工作区是clean
2、在本机创建git仓库
- 先创建一个空的文件夹,从shell通过cd指令进入到新建的空的文件夹aaa中;
- 然后执行git init指令将文件夹aaa变成git仓库;
- 创建成功后aaa文件夹会多出一个.git的隐藏文件夹,不能删除
- 注意:git仓库中不能在创建其他的git仓库
- 将文件从工作区添加到缓存区
git add \b.txt
- 将文件从缓存区添加到本地仓库
git commit -m 'add b.txt'
- 查看当前版本
git log
- 将本地仓库的内容放回工作区并且可以选择版本
git reset -hard 版本号
- 将缓存区的内容放回工作区
git checkout 文件名
- 将本地仓库的内容 提交到关联的远程仓库
git push -u origin 分支名
3、复用别人仓库
1. 搭建git连接
- 初始化文件夹
git init
- 关联地址
git remote add origin 网址
(若需取消仓库连接: git remote remove origin)
- 查看远程连接
git remote -v
- 拷贝内容
git fetch origin
- 转换到主分支
git checkout master
2. 更新内容
git pull
六、Django初识
0、引言
高内聚低耦合:
在软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准。划分模块的一个准则是高内聚低耦合。从模块粒度来看,高内聚:尽可能类的每个成员方法只完成一件事(最大限度的聚合); 低耦合:减少类内部,一个成员方法调用另一个成员方法。从类角度来看, 高内聚低耦合:减少类内部,对其他类的调用;从功能块来看 高内聚低耦合:减少模块之间的交互复杂度(接口数量,参数数据)即横向:类与类之间、模块与模块之间;纵向:层次之间;尽可能,内容内聚,数据耦合
项目架构模式:mvc架构模式
数据和数据的显示要分离(数据和显示解耦合)
同一个模型可以渲染成不同的视图,同一个视图可以加载不同的模型
model -- 模型 -- 数据
view -- 视图
controller -- 控制器 -- 数据的显示
Django中的MTV架构
Model -- 数据
Temlplate -- 模板
View -- 控制器
Django ORM框架 (对象关系映射框架)
- 解决对象模型到关系模型双向转换问题
Django框架本身扮演了一部分控制器的角色
控制器 views.py \
- 接受用户的请求,验证用户的请求
- 操作模型
- 产生响应 (渲染页面)