diff --git "a/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/4\347\217\255/4\347\217\255_LiPing/\347\254\254\345\215\201\344\270\203\345\221\250/\347\254\254\345\215\201\344\270\203\345\221\250-\347\254\254\344\270\200\350\212\202\350\257\276.md" "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/4\347\217\255/4\347\217\255_LiPing/\347\254\254\345\215\201\344\270\203\345\221\250/\347\254\254\345\215\201\344\270\203\345\221\250-\347\254\254\344\270\200\350\212\202\350\257\276.md" new file mode 100644 index 0000000000000000000000000000000000000000..90fc697473894f83ef4ff07c2abb9ee275298488 --- /dev/null +++ "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/4\347\217\255/4\347\217\255_LiPing/\347\254\254\345\215\201\344\270\203\345\221\250/\347\254\254\345\215\201\344\270\203\345\221\250-\347\254\254\344\270\200\350\212\202\350\257\276.md" @@ -0,0 +1,169 @@ +# 第十七周-第一节课 + +> 计算机系统涉及了太多分支和商业纠葛, 我们不纠结正统的问题, 只从涉及的概念上进行分类 + +## Unix和linux + +- Unix + + 最古老的现代计算机系统, 始于20世纪60年代. 商业上来说, 只有unix认证的系统才是unix系统, 但是现在谈论unix系统指的是涉及理念. + + - linux + + linux和unix不是一种单纯的继承关系, linux只是继承unix的设计思想, 但是底层实现不同, 所以不完全兼容. + + > ubuntu和centos都是linux发行版, 只是侧重点不同. 本质是包管理不同. + + - ubuntu + - 更加侧重于个人用户 + - 对图形界面支持更加友好 + - 社区活跃, 更新更加积极 + - 使用`apt`包管理工具 + - centos + - 更加侧重于企业用户 + - 对底层硬件的兼容性更好 + - 使用`yum`包管理工具 + + - mac os + + mac os和unix可以看作是一种继承关系, 完全符合unix规范. + +- Windows + + 始于20世纪80年代, 强大的图形界面操作逻辑, 对用户更加友好. + +## win10安装linux + +``` +https://jingyan.baidu.com/article/ae97a64617a90bbbfd461d80.html +``` + +## 为什么使用linux做服务器 + +- linux服务器占用资源小, 使用费用低 +- linux是开源的 +- linux社区活跃 +- 很多新技术都是优先适配linux, 之后再移植到windows和mac os +- linux管理员拥有实际意义上的最高权限, windows和macos很多时候没办法修改 + +## 远程连接linux服务器 + +- SSH连接 + + - linux + + ``` + ssh user@host + + ssh ubuntu@121.5.18.188 + ``` + + - window + + mobaXterm + + - Mac OS + + shellcraft + +- SSH + + - 什么是SSH + + SSH是一种网络协议, 用于计算机之间的加密登录. + + - SSH原理 + + 利用非对称加密, 客户端和服务端互相保存对方的公钥, 在传输过程中对传输数据用公钥进行加密, 得到加密后的数据后再通过私钥进行解密. + + - SSH是绝对安全的吗 + + 是也不是, 建立的连接一定的安全的. 但是有一个前提, 那就是第一次连接的时候需要确认连接的服务器是安全的, 这个风险由用户自己承担. + +- 公钥登录 + + 其实就是将公钥持久化, 由客户端生成一对私钥和公钥, 并将公钥持久地保存在服务器当中 + + - 生成私钥和公钥 + + ``` + ssh-keygen + ``` + + - 将公钥发送给服务端 + + ``` + ssh-copy-id user@host + ``` + + - 取消公钥登录 + + 在服务端删除持久化的公钥即可. + + ``` + cd /home/用户/.ssh && vim .ssh/authorized_keys + ``` + +## linux目录树 + +> linux没有像windows盘符这样的概念, 像python一切皆对象的思想一样, 在linux当中一切皆文件. 换句话说对于linux来说访问硬盘和访问文件没有任何区别. +> +> linux的根目录是/ +> +> 删除当前文件夹下所有文件我们喜欢使用`rm -rf ./*`, 但是有的时候忘记用`.`来表示当前目录. 如果比较担心删错文件, 尽量使用绝对路径来删除文件. + +- / + + - bin + + 我们执行命令其实都是运行可执行文件. 系统的基础可执行文件都在bin目录下. + + - sbin + + 跟/bin一致, 只有管理员权限才能执行 + + - boot + + 引导程序所在目录, 引导系统是用来开机进入系统的, 多系统就会拥有多个引导程序. + + - dev + + 设备文件目录, 将对设备文件的访问转变为设备的访问 + + - etc + + 系统和程序设置文件存放的目录 + + - home + + 普通用户目录 + + - lib + + 存放系统共享库的地方 + + - sys + + 存放内核文件的目录 + + - var + + 存放增量数据的目录. 一般日志都在`/var/log`中 + + - usr(unix shared resources) + + - bin + + - lib + + - local + + 用户级的程序目录, 用户自己编译的程序会默认安装到当前目录 + + - sbin + +## 课后作业 + +- 安装linux服务器连接管理工具 +- 学会在linux下远程连接linux服务器 +- 学会公钥登录 \ No newline at end of file diff --git "a/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/4\347\217\255/4\347\217\255_LiPing/\347\254\254\345\215\201\344\270\203\345\221\250/\347\254\254\345\215\201\344\270\203\345\221\250-\347\254\254\344\270\211\350\212\202\350\257\276.md" "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/4\347\217\255/4\347\217\255_LiPing/\347\254\254\345\215\201\344\270\203\345\221\250/\347\254\254\345\215\201\344\270\203\345\221\250-\347\254\254\344\270\211\350\212\202\350\257\276.md" new file mode 100644 index 0000000000000000000000000000000000000000..c0206230b5a7bd719a6a96fb36104fcfd0154c0a --- /dev/null +++ "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/4\347\217\255/4\347\217\255_LiPing/\347\254\254\345\215\201\344\270\203\345\221\250/\347\254\254\345\215\201\344\270\203\345\221\250-\347\254\254\344\270\211\350\212\202\350\257\276.md" @@ -0,0 +1,211 @@ +# 第十七周-第三节课 + +## 用apt进行包管理 + +- 安装 + + ``` + apt-get install 包名 + + # 安装python2的pip工具 + apt-get install python2-pip + # 安装python3的pip工具 + apt-get install python3-pip + ``` + +- 换源 + + > 由于各种各样的原因, 很多源无法访问或者下载速度奇慢无比, 所以我们需要换一个速度更快的镜像源 + + ``` + # 备份源配置文件 + cp /etc/apt/sources.list /etc/apt/sources.list.bk + + # 新建/修改源配置文件 + vim /etc/apt/sources.list + + # 更新源 + apt-get update + ``` + + - 阿里源 + + ``` + https://developer.aliyun.com/mirror/ + ``` + +- 卸载 + + ``` + apt-get remove python2.7 + apt-get autoremove python2.7 // 自动卸载依赖, 慎用, 对于熟悉的包可以使用这个命令. + ``` + +- 更新 + + 其实就是安装指定版本 + + ``` + apt-get install redis-server=5:4.0.9-1ubuntu0.2 + ``` + +- 搜索包 + + ``` + apt-cache madson redis-server + ``` + +## 通过Nginx + uWSGI的方式正式部署项目 + +- 通过git拉项目 +- 安装虚拟环境 + +## Nginx + +- 什么是nginx + + 高性能http服务器及反向代理服务器. + + ![hrKZO.jpg](https://i.im5i.com/2021/02/28/hrKZO.jpg) + +- 为什么使用nginx + + 一台服务器上可能部署多个服务, nginx就是统一管理当前服务器内开启的对外暴露的服务. + + - 顺带减少了对外暴露的端口, 隐藏真实的服务器, 增加了安全性. + +- 安装nginx + + ``` + apt-get install nginx + ``` + +- 启动和关闭nginx + + ``` + service nginx start + service nginx stop + service nginx restart + ``` + + - `127.0.0.1`, `0.0.0.0`和`localhost`的区别 + + - 127.0.0.1 + + 回环地址, 127开头的地址是一类向自身发送通信的地址 + + - 0.0.0.0 + + 代表本机所有IP地址, 如果想通过外网访问本机服务, 则需要将服务绑定到`0.0.0.0`地址上. + + - localhost + + 默认本机域名, 绑定在127.0.0.1上, 你可以自定义配置; + +- nginx部署静态资源 + + - 修改nginx配置文件 + + ``` + vim /etc/nginx/sites-available/default + + # 添加以下内容 + location /static/ { + root /var/; + expires 30d; + add_header Cache-Control private; + } + ``` + + - 重启 + + ``` + service nginx restart + ``` + + - 配置静态资源的好处 + + - 前后端分离流程下, 前端可以自行控制和管理静态资源. + - 解决多项目共用静态资源的问题 + +## uWSGI + +- 什么是uWSGI + + uWSGI是一个项目, 目的是通过统一的api和配置风格, 集成应用服务器, 代理, 进程管理, 监控等功能 + +- 为什么选哟uWSGI + + - 性能问题: 通过`python manage.py runserver`命令来启动是单进程多线程的 + - uWSGI可以更好地控制并发 + +- 安装uwsgi + + ``` + apt-get install uwsgi + ``` + +- 配置uwsgi + + - 在当前项目根目录下新建`uwsgi.ini`(可以是任意文件名) + + - 添加以下内容 + + ``` + [uwsgi] + # 项目本地服务地址 + http=127.0.0.1:5000 + + # 观察项目运行情况 + stats=127.0.0.1:5100 + + # 项目的运行环境 + virtualenv=/home/tunan/PyProjects/my_blog/venv + + # 项目的根目录 + chdir=/home/tunan/PyProjects/my_blog + + # 绑定wsgi协议 + wsgi-file=myblog/wsgi.py + + # 进程数目, 跟cpu一致即可 + processes=12 + + # 线程数目 + threads=4 + + # 导出的日志 + logto=/var/log/myblog.log + + # 如果在django项目中使用了STATIC, 就要做静态资源的映射, 不然会找不到 + static-map=/static=static + ``` + + - 启动uwsgi + + ``` + uwsgi --ini uwsgi.ini + ``` + + - 在nginx中代理转发 + + ``` + location /blog/ { + proxy_pass http://127.0.0.1:5000; + } + + # 代理转发之后 + http://127.0.0.1:5000 相当于 nginx所在服务 http:域名/blog/ + ``` + + - 解决url匹配问题 + + ``` + 需要在原有路径前加入 blog 路径 + ``` + + - 查看nginx日志 + + ``` + cd /var/log/nginx + ``` \ No newline at end of file diff --git "a/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/4\347\217\255/4\347\217\255_LiPing/\347\254\254\345\215\201\344\270\203\345\221\250/\347\254\254\345\215\201\344\270\203\345\221\250-\347\254\254\344\272\214\350\212\202\350\257\276.md" "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/4\347\217\255/4\347\217\255_LiPing/\347\254\254\345\215\201\344\270\203\345\221\250/\347\254\254\345\215\201\344\270\203\345\221\250-\347\254\254\344\272\214\350\212\202\350\257\276.md" new file mode 100644 index 0000000000000000000000000000000000000000..fdbfd7c651b7e9502f50a1dc026883b0c8c43fc1 --- /dev/null +++ "b/\347\254\254\344\272\214\346\234\237\350\256\255\347\273\203\350\220\245/4\347\217\255/4\347\217\255_LiPing/\347\254\254\345\215\201\344\270\203\345\221\250/\347\254\254\345\215\201\344\270\203\345\221\250-\347\254\254\344\272\214\350\212\202\350\257\276.md" @@ -0,0 +1,296 @@ +# 第十七周-第二节课 + +> linux命令几乎所有的命令都可以通过 --help查看当前的参数 + +## 文件与目录 + +- 切换目录 + + ``` + cd .. 返回上一级 + cd 目录名 + ``` + +- Create + + - 创建文件 + + ``` + > 文件名 // > 表示导出到文件, 如果没有该文件则创建 + ``` + + - 创建目录 + + ``` + mkdir 目录 + ``` + + ``` + mkdir -pv {dir_1,dir_2}/{dir_a,dir_b} + ``` + + > 不要把写代码的习惯带到命令行当中, dir_1, dir_2之间是没有空格, 有空格会导致后续参数被识别为单纯的字符串 + + - 复制文件 + + ``` + cp 文件路径 目标路径 + ``` + + - 复制目录 + + ``` + cp -r 目录路径 目标路径 + ``` + +- Retrieve + + - 显示目录下的文件和目录 + + ``` + ls 目录 // 显示目录下的文件和子目录, 如果不指定目录参数, 则默认为当前目录 + ls -a // 显示隐藏文件和目录 + ls -a -l // 显示文件和目录详情 + ``` + + - 匹配目标 + + > 管道符`|`, 可以接收上一条命令执行后的结果加以处理 + > + > grep (global search regular expression and print out the line) 全局搜索正则并输出 + + ``` + ls -a |grep ".*[0-9]" // 匹配带有数字的目录和文件 + ``` + + - 排序 + + ``` + ls -l -s //根据文件大小进行排序 + ls -l -t //根据文件修改时间进行排序 + ``` + + - 搜索/递归查询 + + > 可以通过ls -R 来做递归搜索, 但是有更专业的命令find + + - 根据关键字搜索 + + ``` + find 路径 -name "regex" + ``` + + - 根据类型来进行搜索 + + ``` + find 路径 -type d // 匹配目录 + find 路径 -type f // 匹配文件 + ``` + + - Update + + - 移动文件或目录(剪切) + + ``` + mv 目录/文件路径 目标目录 + ``` + + - Delete + + - 删除文件 + + ``` + rm -f 文件路径 // -f 表示强制删除, force + ``` + + - 删除目录 + + ``` + rm -rf 目录路径 // -r 表示递归, recursive + ``` + + - 删除指定规则的文件或者目录 + + ``` + rm -rf *.log + ``` + +## 修改权限 + +> linux中权限其实还是比较复杂得到, 要考虑到 拥有者(user), 组(group), 其他组(other)三个用户维度 +> +> 还要考虑文件的读(r), 写(w), 可执行(x)三个操作维度 +> +> 三个操作维度可以用数字简单地表示, 分别为4, 2, 1 + +- 设置所有人拥有所有权限 + + ``` + chmod 777 文件路径 + chmod 777 -R 目录路径 // 该目录下的文件和子目录的权限都会和该目录保持一致 + ``` + +- 设置只有当前用户拥有权限 + + ``` + chmod 700 文件路径 + chmod 700 -R 目录路径 + ``` + +## 文本操作 + +> 主要通过vim来对文本就行简单的编辑. + +- 安装vim + + ``` + apt-get install vim + ``` + +- Create + + - 新建/打开文件 + + ``` + vim 文件路径 + ``` + + - 输入模式 + + ``` + > 输入 a/i 进入INSERT模式 + > 输入 esc 退出INSERT模式 + > 输入 : 进入控制台 + > 输入 w 进行保存 + > 输入 : 进入控制台 + > 输入 q 退出 + ``` + + > 可以合并wq命令, 保存并退出 + > + > 对命令加上!, 表示强制, 比如q!表示强制退出 + +- Retrieve + + - 搜索 + + ``` + > 输入 : 进入控制台 + > /string 搜索字符串 + > 输入 N 表示next + > 输入 shift+N 表示last + ``` + + - 移动到第一行 + + > 不需要进入控制台 + + ``` + gg + ``` + + - 移动到最后一行 + + ``` + G + ``` + +- Update + + - 复制一段文本 + + 光标选中后右键 + + - 粘贴 + + 在光标位置右键 + + - 复制当前行 + + ``` + yy + ``` + + - 粘贴 + + 在光标位置右键 + +- Delete + + ``` + dd 删除光标所在行 + ``` + +## 状态查看 + +> 查看详情需要在root用户下执行 + +- **查看资源使用情况** + + ``` + top + ``` + + - PID + + 当前程序运行的进程id + + ``` + kill -9 pid // 强制关闭该进程 + ``` + +- 查看内存使用情况 + + ``` + free + ``` + +- **查看网络使用情况** + + ``` + netstat -tunple + ``` + +- 查看磁盘的使用情况 + + ``` + df -h // h表示human-readable + ``` + +- 查看你历史命令记录 + + ``` + history + ``` + + - 调用历史命令 + + ``` + !history_command_id + ``` + +## 硬件/系统信息 + +- 查看系统版本 + + ``` + cat /proc/version + ``` + +- 查看cpu信息 + + ``` + cat /proc/cpuinfo + ``` + +- 查看内存信息 + + ``` + cat /proc/meminfo + ``` + +- 查看显卡信息 + + ``` + lspci |grep -i "vga" // -i表示ignore, 忽略大小写 + ``` \ No newline at end of file