Linux用户管理

  1. 对于一个QQ群而言,有哪些角色划分,权利的划分“
  2. 群主—QQ群里面权限最大
  3. 管理员—root临时赋予的超级权限,—在用皇帝的身份狐假虎威,拿着尚方宝剑—Linux中的sudo命令
  4. 吃瓜群众—权限最低,基本只能够在自己的家目录进行增删改查,其他目录的权限都很低—-Linux的普通用户

系统创建了用户,同时也会创建一个同名的组,例如

  1. useradd canxun # 创建普通用户
  2. 系统会在 ```/etc/passwd```下增加一行用户信息,且同时创建了一个用户组,也叫做*canxun*
  3. 该用户组存放在/etc/group

查看普通用户

  1. tail -5 /etc/passwd
  2. polkitd:x:999:998:User for polkitd:/:/sbin/nologin
  3. tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
  4. sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
  5. postfix:x:89:89::/var/spool/postfix:/sbin/nologin
  6. caesar:x:1000:1000::/home/caesar:/bin/bash

root而言

为什么叫做root用户?

  1. 因为系统设计了`UID`的概念,用户ID号码,用户ID为零,指的是系统的超级用户;
  2. 普通用户由root用户创建,默认的`UID`是从1000开始,权限很低;

普通用户

默认用户的家目录都在 /home下,例如:

  1. `/home/caesar`
  2. `/home/tylor`

用户管理的命令

添加删除用户,需要注意的是:涉及到权限的修改,只能由root用户操作,其他人基本没有权限;

  1. useradd canxun # 创建用户:canxun
  2. passwd canxun # 给用户修改密码
  3. userdel canxun # 删除用户
  4. userdel -rf canxun # 删除用户以及用户home目录
  5. passwd # 未指定用户则修改当前用户的密码

删除用户以及重新检查

  1. [root@vvkt7whznuckhiz2-0723575 ~]# userdel -rf caesar
  2. [root@vvkt7whznuckhiz2-0723575 ~]# grep "caesar" /etc/passwd
  3. [root@vvkt7whznuckhiz2-0723575 ~]#

用户切换

  1. # 添加用户以及设置密码
  2. useradd tylor
  3. passwd qwe98322@
  4. # 切换用户以及环境变量
  5. [root@vvkt7whznuckhiz2-0723575 home]# su - tylor
  6. [tylor@vvkt7whznuckhiz2-0723575 ~]$
  7. # 当前用户的工作目录
  8. [tylor@vvkt7whznuckhiz2-0723575 ~]$ pwd
  9. /home/tylor

尚方宝剑命令

  1. 1. tylor用户想要进入/root文件夹时发现用户权限不够,应该怎么办呢?
  2. 思路:
  3. 1. 使用sudo命令,默认以root身份去执行命令
  4. 例如: sudo cd /root
  5. 2. tylor用户加入root组里,也就拥有了root权限,但还是需要查看用户组权限;

[sudo]命令使用配置流程

  1. 1. 使用visudo命令,修改配置文件,添加 你允许执行的sudo命令用户
  2. 修改配置信息,如下:
  3. 99 ## Allow root to run any commands anywhere
  4. 100 root ALL=(ALL) ALL
  5. 101 tylor ALL=(ALL) ALL
  6. 2. 代码示例
  7. [tylor@vvkt7whznuckhiz2-0723575 ~]$ sudo cd /root
  8. [sudo] password for tylor:
  9. [tylor@vvkt7whznuckhiz2-0723575 ~]$ sudo cd /root # 加上sudo命令已经能够进入 /root文件夹
  10. [tylor@vvkt7whznuckhiz2-0723575 ~]$ pwd
  11. /home/tylor
  12. [tylor@vvkt7whznuckhiz2-0723575 ~]$ sudo ls /root # 查看root下所有文件
  13. admin.text admir.text
  14. [tylor@vvkt7whznuckhiz2-0723575 ~]$ touch /root/tylor到此一游 # 普通用户身份仍然无法创建文件夹
  15. touch: cannot touch ‘/root/tylor到此一游’: Permission denied
  16. [tylor@vvkt7whznuckhiz2-0723575 ~]$ sudo touch /root/person
  17. [tylor@vvkt7whznuckhiz2-0723575 ~]$ sudo ls /root # 创建成功查看文件信息
  18. admin.text admir.text person

id命令

查看用户的账户信息

  1. [root@vvkt7whznuckhiz2-0723575 ~]# id root
  2. uid=0(root) gid=0(root) groups=0(root)

组的概念

对于技术部门,运维需要分配单个用户的权限太散,太多;

  1. [权限控制:针对不同的组,不同的用户,针对不同的文件夹,文件设置不同的权限];
  2. 前端组;后端组;运维组;测试部门;安全部门;DB部门;

运维都得对上述的人进行权限控制,对于服务器操作权限;因此引入组的概念,针对整个组进行管理,更加方便;

比如:

  1. MySQL的默认数据存放位置,如/var/lib/mysql/* 那么这个MySQL数据文件以及文件夹是属于哪个组,那个用户管理呢?
  2. [root@vvkt7whznuckhiz2-0723575 ~]# ll /tmp/
  3. total 44828
  4. -rw-r--r-- 1 root root 946 Sep 30 16:09 admin.text
  5. drwxr-xr-x 2 root root 4096 Sep 30 20:48 hsperfdata_root
  6. drwxr-xr-x 2 root root 4096 Sep 29 16:03 python1
  7. 第一组数据指的是读写权限,第二组为当前所属用户,第三组为当前所属组,

Linux文件,目录权限管理

对于Linux而言,文件夹,文件都有user, group,属主和属组的角色划分,还存在一个other其他人三个身份的划分;

设置了三种权限,可读可写可执行,分别为 R, W, X;

文件与目录权限

Linux设置权限的目的:保护账户资料

Linux权限主要按照三种身份划分:

  1. other/owner 文件使用者,文件属于哪个用户;
  2. group 属组。文件属于哪个组;
  3. other既不是 user 也不是group,就是other,其他人;

Linux的权限观察

  1. [root@vvkt7whznuckhiz2-0723575 ~]# ls -l /tmp
  2. total 44828
  3. -rw-r--r-- 1 root root 946 Sep 30 16:09 admin.text
  4. # 每三个一组
  5. - 代表普通文件类型
  6. rw-:user的权限
  7. r--:group的权限
  8. r--:other的权限
  9. # 1 指的是文件链接数目
  10. # 第一个root指的是属主,第二个root指的是属组
  11. # 其次为文件大小
  12. # 最后为文件最后修改日期和文件名字

案例1:普通用户如何写入root用户创建的文件呢?

  1. [root@vvkt7whznuckhiz2-0723575 tmp]# chmod o+w test.py
  2. [root@vvkt7whznuckhiz2-0723575 tmp]# su - tylor
  3. Last login: Fri Oct 1 11:11:02 CST 2021 on pts/0
  4. [tylor@vvkt7whznuckhiz2-0723575 ~]$ echo "给other赋予写入权限之后就可以自行写入文件,然而other是相当于属主而言的" >> test.py
  5. [tylor@vvkt7whznuckhiz2-0723575 ~]$ cat test.py
  6. other赋予写入权限之后就可以自行写入文件,然而other是相当于属主而言的

chmod命令总结

  1. chmod 可以更改文件权限,修改针对user, group, other的权限,例如:
  2. chmod u+r file.text # 给文件的user 添加读的权限
  3. chmod g-x file.text # 删除文件用户组的执行权限
  4. chmod o+r / o+w / o+x file.test # 给文件的other身份最大的权限,读写可执行
  5. chmod 000 file.text # 给文件最低的权限 任何人不能读写执行

chgrp命令

更改用户所属的组

  1. chgrp 新的属组 file.text

chown命令

更改文件的所有者owner/user

  1. chown 新的属主 file.text

对于文件的rwx权限

  1. 1. r cat, more, less, head,等读取文件的操作
  2. 2. w vim, echo 等写入文件的操作
  3. 3. x 可执行脚本,比如bash,python,文件会变为绿色

案例1—测试脚本文件的执行

  1. [tylor@vvkt7whznuckhiz2-0723575 tmp]$ vim echo.sh
  2. [tylor@vvkt7whznuckhiz2-0723575 tmp]$ bash echo.sh
  3. 我是用来测试脚本文件的
  4. [tylor@vvkt7whznuckhiz2-0723575 tmp]$ cat echo.sh
  5. echo "我是用来测试脚本文件的"
  6. # 第二种方法:给用户或者所有者添加可执行权限,然后以脚本方式运行
  7. [root@vvkt7whznuckhiz2-0723575 tmp]# chmod u+x echo.sh
  8. [root@vvkt7whznuckhiz2-0723575 tmp]# su - tylor
  9. Last login: Fri Oct 1 11:30:10 CST 2021 on pts/0
  10. [tylor@vvkt7whznuckhiz2-0723575 ~]$ cd /tmp
  11. [tylor@vvkt7whznuckhiz2-0723575 tmp]$ ./echo.sh
  12. 我是用来测试脚本文件的

对于文件夹的rwx

  1. R, W,X的数值分别是4,2,1,因此对用户,组,其他设置的权限可以用数字表达;
  2. 所以各个用户的最高权限为777, 最低权限为000. vim编辑后权限为664.;
  3. 如果一个文件的权限为664,表示对于用户的权限为读写,对于组权限为读写,对于其他的权限为读;

软链接

windows的一个快捷方式而已

创建语法: ln -s /tmp/test.py[原始文件] /opt/test.text[目标文件,开始链接时创建]

删除快捷方式:test.text不会影响原文件

  1. [root@vvkt7whznuckhiz2-0723575 tmp]# ls
  2. admin.text hsperfdata_root python2 python3 python4 python_a python_c python.txt wrapper-615-1-in
  3. echo.sh python1 python2.txt python3.txt python5 python_b python_d test.py wrapper-615-1-out
  4. [root@vvkt7whznuckhiz2-0723575 tmp]# echo "我是一只小小鸟" >> test.py
  5. [root@vvkt7whznuckhiz2-0723575 tmp]# cat /tmp/test.py
  6. "我是测试数据"
  7. 我是一只小小鸟
  8. [root@vvkt7whznuckhiz2-0723575 tmp]# ln -s /tmp/test.py /opt/test.text
  9. [root@vvkt7whznuckhiz2-0723575 opt]# ll
  10. total 0
  11. lrwxrwxrwx 1 root root 12 Oct 1 16:59 test.text -> /tmp/test.py
  12. -rw-r--r-- 1 root root 0 Oct 1 16:56 test.txt
  13. [root@vvkt7whznuckhiz2-0723575 opt]# cat test.text
  14. "我是测试数据"
  15. 我是一只小小鸟

打包,压缩,解压缩

简介以及语法

打包不节省空间,便于传输;压缩,节省磁盘空间;

  1. 语法
  2. tar 命令
  3. 功能参数
  4. -z 调用gzip命令,对文件压缩,加上这个参数才会节省磁盘空间
  5. -x 解包,拆快递包裹的过程
  6. -v 显示整个过程
  7. -f 必须写在参数的结尾,指定压缩文件的名字
  8. -c 打包,收拾快递
  9. # 压缩文件的后缀只是告诉别人,该文件用什么命令压缩和解压缩
  10. ```*.gz``` gzip命令解压缩
  11. ```*.tar``` tar命令解压缩
  12. ```*.gz``` xz解压缩
  13. ```*.zip``` unzip解压缩

案例1

打包test.txt文件,打包为tar文件allopt.tar

  1. [root@vvkt7whznuckhiz2-0723575 opt]# tar -cvf allopt.tar test.txt
  2. test.txt
  3. [root@vvkt7whznuckhiz2-0723575 opt]# ls
  4. allopt.tar q1.txt q2.txt q3.txt q.txt quanquan.txt test.text test.txt
  5. # 解包操作
  6. [root@vvkt7whznuckhiz2-0723575 zip]# tar -xvf /opt/allopt.tar
  7. test.txt
  8. [root@vvkt7whznuckhiz2-0723575 zip]# ls
  9. test.txt
  10. # 解包
  11. 第一步 打包某个文件
  12. tar -cvf /opt/test.py allopt.tar
  13. 第二步 解包tar到当前文件夹
  14. tar -xvf allopt.tar

案例2

打包且压缩/opt下所有内容,生成tar.gzallopt.tar.gz

第一步

  1. 第一步:打包且压缩 tmp下所有文件打包为alltmp.tar.gz并且放置在opt目录下
  2. [root@vvkt7whznuckhiz2-0723575 tmp]# tar -zcvf /opt/alltmp.tar.gz /tmp/*
  3. tar: Removing leading `/' from member names
  4. /tmp/admin.text
  5. /tmp/echo.sh
  6. /tmp/hsperfdata_root/
  7. /tmp/hsperfdata_root/620
  8. /tmp/python1/
  9. /tmp/python2/
  10. /tmp/python2.txt
  11. /tmp/python3/
  12. /tmp/python3.txt
  13. /tmp/python4/
  14. /tmp/python5/
  15. /tmp/python_a
  16. /tmp/python_b
  17. /tmp/python_c
  18. /tmp/python_d
  19. /tmp/python.txt
  20. /tmp/test.py
  21. /tmp/wrapper-615-1-in
  22. /tmp/wrapper-615-1-out

第二步

  1. 第二步: 解压缩,常见的 ```*.tar.gz```,也会有人写为 ```*.tga

[root@vvkt7whznuckhiz2-0723575 tmp]# tar -zcvf /opt/alltmp.tar.gz /tmp/* tar: Removing leading `/‘ from member names /tmp/admin.text /tmp/echo.sh /tmp/hsperfdata_root/ /tmp/hsperfdata_root/620 /tmp/python1/ /tmp/python2/ /tmp/python2.txt /tmp/python3/ /tmp/python3.txt /tmp/python4/ /tmp/python5/ /tmp/python_a /tmp/python_b /tmp/python_c /tmp/python_d /tmp/python.txt /tmp/test.py /tmp/wrapper-615-1-in /tmp/wrapper-615-1-out [root@vvkt7whznuckhiz2-0723575 tmp]# cd /opt [root@vvkt7whznuckhiz2-0723575 opt]# ls alltmp.tar alltmp.tar.gz

  1. <a name="8606f66d"></a>
  2. # 防火墙
  3. <a name="69fa3701"></a>
  4. ## 作用
  5. > 用于控制服务器的出入流量;防止恶意流量攻击服务器,提供保护服务器的端口等服务;
  6. >
  7. > 在学习阶段直接关闭,专业的运维人员要学习`iptables`软件的一些指令
  8. <a name="706086ba"></a>
  9. ## 常识
  10. > 在云服务器上,默认有一个硬件防火墙和一个软件防火墙[`iptables, firewalled]`
  11. >
  12. > 在云服务器上运行`Django`,如果服务器开启了防火墙,且没有自定义规则,默认是拒绝所有外来流量,导致我们的Windows浏览器无法访问到Linux服务器上运行的`Django`等程序
  13. <a name="0dfbe902"></a>
  14. ## 常用命令
  15. ```shell
  16. # 1. 清空防火墙规则
  17. iptables -F
  18. # 2. 关闭防火墙的服务
  19. systemctl stop firewalld
  20. systemctl disable firewalld # 禁止防火墙开机自启

DNS域名解析

原理

  1. 机器去本地hosts文件,检查是否写了对应的域名解析关系;
  2. 去指定的DNS服务器上寻找对应的解析关系;
    公网中的域名解析服务器:腾讯119.29.29.29

Linux下DNS客户端的配置文件

  1. # 配置文件定义了主备两个```DNS```服务器地址
  2. vim /etc/resolv.conf
  3. # Generated by NetworkManager
  4. search openstacklocal novalocal
  5. nameserver 100.125.0.250
  6. nameserver 114.114.114.114
  7. options single-request-reopen
  8. # Linux本地DNS强制解析文件 /etc/hosts,可以写入一些域名供本地测试使用
  9. # 本地强制解析文件的优先级比/etc/resolv.conf更高

nslookup[查找NDS域名解析与主机名]命令

原理

  1. 浏览器进行```DNS```查找,解析域名对应的```IP```地址,找到之后浏览器访问该```IP```地址;用户请求访问网页,请求到达服务器时,优先发给 ```Nginx```,用户请求静态资源,```Nginx```则直接从磁盘上找到资料给用户查看;
  2. 如果``Nginx``检测到用户请求是一个动态请求,登录,注册,读取数据库,例如 ```.php ```例如 ```.aspx```,通过URL匹配发现是动态请求,转发给后端的应用服务器```[tomcat, php, django]

Django处理完用户的动态请求之后,如果发现需要读取数据库,再通过pymysqlMySQL读取数据;

如果处理请求发现读取的是redis, 再通过pyredis向redis拿数据; Django 处理完请求之后,返回给nginx数据,nginx再返回给用户浏览器,浏览器渲染好页面后再展示给用户; 推荐阅读 《大型网站技术架构》

  1. <a name="ddf7d2a5"></a>
  2. ## 命令
  3. ```shell
  4. # 查找提供此命令的包
  5. yum provides */nslookup
  6. # 安装对应的包
  7. yum -y install bind-utils
  8. # 输入nslookup进入交互式命令
  9. nslookup
  10. # 输入网址进行查询
  11. > www.pythonav.cn
  12. Server: 100.125.0.250
  13. Address: 100.125.0.250#53
  14. # 退出
  15. exit

crontab定时任务

定时任务的语法规则

  1. 为什么设置脚本时使用绝对路径?
  2. crontab 存在局部环境变量,如果不指定精确位置,那么脚本运行时则没有支撑文件
  3. * * * * * 命令的绝对路径
  4. 分 时 日 月 周
  5. 3,5 * * * * 每小时的第三分钟,第五分支执行命令
  6. 15, 2-5 * * * 每天的两点一刻,三点一刻,四点一刻和五点一刻执行命令
  7. 30 08 * * * 每天八点半上班
  8. 00 00 * * * 每天24点下班
  9. 每分钟执行一次命令
  10. * * * * *
  11. 每小时的第三分钟,第五分钟执行
  12. 3, 15 * * *
  13. 上午8-11点的第三分钟,第十五分钟执行
  14. 3, 15 8-11 * * *
  15. 每晚九点半执行
  16. 30 21 * * * 二十四小时制
  17. 每周六,周日1:30执行
  18. 30 13 * * 6, 7
  19. 每周一至周五的凌晨一点,清空 /tmp 目录下的所有文件,注意执行命令请使用绝对路径,否则会失效
  20. 0 1 * * 1-5 /usr/bin rm -rf /tmp/*
  21. 每晚零点重启 nginx
  22. 0 0 * * * /usr/bin/systemctl restart nginx
  23. 每个月的1, 10, 22日的4:55重启nginx
  24. 55 4 1,10,22 * * /usr/bin/systemctl restart nginx
  25. 每个星期一的上午八点到十一点的第三分钟到第十五分钟执行命令
  26. 3-15 8-11 * * 1

定时任务服务,提供了一个客户端管理命令;几号和星期几不能共存;

  1. 命令说明
  2. crontab -e # 编辑定时任务配置文件
  3. crontab -l #查看定时任务的规则
  4. 配置参数说明
  5. minute hour day month week command
  6. 其中:
  7. minute 表示分钟,可以是从059之间的任何整数。
  8. hour:表示小时,可以是从023之间的任何整数。
  9. day:表示日期,可以是从131之间的任何整数。
  10. month:表示月份,可以是从112之间的任何整数。
  11. week:表示星期几,可以是从07之间的任何整数,这里的07代表星期日。
  12. command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。
  13. 星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
  14. 逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9
  15. 中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6
  16. 正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,
  17. 例如*/10,如果用在minute字段,表示每十分钟执行一次。

案例1-每分钟将一句话追加到一份文件当中

  1. 1. 打开配置文件
  2. crontab -e
  3. 2. 写入如下命令,命令写入后会有已安装的提示信息
  4. * * * * * /usr/bin/echo "有人问王思聪,钱是万能的吗?王思聪答:钱是万达的!" >> /tmp/wsc.txt
  5. 3. 检查命令
  6. crontab -l
  7. 4. 实时刷新
  8. tail -f /tmp/wsc.txt

其他小技巧–快速上手服务器

  1. ps -ef # 查看运行了那些进程
  2. netstat -tunlp # 查看监听了那些端口
  3. crontabl -l # c
  4. 原则: 绝对路径优先,一般不会出错

Linux软件包管理

软件安装形式

  1. 源代码安装,较为麻烦,可以自选软件版本,亦可扩展第三方额外功能,指定软件安装目录五颗星
  2. rpm包手动安装,需要手动解决依赖关系,两颗星
  3. yum 自动化安装,需配置好yum源,能够自行搜索依赖关系,下载安装和处理依赖关系,
  4. 缺点:版本可能较低;机器数量较多时不容易控制;

更换yum

  1. yum源的默认仓库文件夹是:/etc/yum.repos.d,只有在目录第一层的```*.repo```结尾的文件才会被```yum```读取;
  2. 1. 备份旧的仓库源
  3. cd /etc/yum.repos.d
  4. mkdir repobak
  5. mv *.repo repobak/
  6. 2. 下载repo,epl源文件
  7. wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
  8. wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
  9. 3. 测试安装速度
  10. yum -y install redis

Linux编译python3开发环境

采用编译安装的方式

下载包[从国内镜像站]

  1. wget http://npm.taobao.org/mirrors/python/3.9.6/Python-3.9.6.tgz
  2. wget http://npm.taobao.org/mirrors/python/3.10.4/Python-3.10.4.tgz

解决编译安装依赖

  1. yum -y install gcc path libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
  2. yum -y install wget xz tar gcc make tk-devel sqlite-devel zlib-devel readline-devel openssl-devel curl-devel tk-devel gdbm-devel xz-devel bzip2-devel

ubuntu下的依赖处理

  1. sudo apt update && sudo apt upgrade
  2. sudo apt install gcc g++ libffi-dev build-essential checkinstall
  3. sudo apt install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev

当前目录下解压

  1. tar -zxvf Python-3.9.6.tgz

删除个别配置

  1. vim configure
  2. enable-optimizations # 删除该行

开始指定安装目录和检查依赖

  1. ./configure --prefix=/opt/python396

开始编译安装

  1. make && make install

安装成功显示的代码

  1. Looking in links: /tmp/tmpprh3c1wl
  2. Processing /tmp/tmpprh3c1wl/setuptools-56.0.0-py3-none-any.whl
  3. Processing /tmp/tmpprh3c1wl/pip-21.1.3-py3-none-any.whl
  4. Installing collected packages: setuptools, pip
  5. WARNING: The scripts pip3 and pip3.9 are installed in '/opt/python396/bin' which is not on PATH.
  6. Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
  7. Successfully installed pip-21.1.3 setuptools-56.0.0
  8. WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv

检查python396的可执行程序目录

  1. [root@vvkt7whznuckhiz2-0723575 bin]# pwd
  2. /opt/python396/bin
  3. opt/python310/bin

系统环境变量中添加如下配置

  1. vim /etc/profile
  2. ### 自定义的python3.9.6的目录
  3. PATH="/opt/python396/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"

检查环境变量,重新读取,检查环境是否安装成功

  1. echo $PATH
  2. source /etc/profile
  3. echo $PATH
  4. which pip3
  5. which python3

Linux运行Django3

1 安装django

  1. pip3 install django==3.2.7 -i https://pypi.tuna.tsinghua.edu.cn/simple

2 升级pip

  1. cd /opt/python396/bin/
  2. pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade pip

3 创建项目并且进入

  1. django-admin startproject mysite
  2. cd mysite
  3. tree
  4. .
  5. ├── manage.py
  6. └── mysite
  7. ├── asgi.py
  8. ├── __init__.py
  9. ├── settings.py
  10. ├── urls.py
  11. └── wsgi.py
  12. 1 directory, 6 files

4 创建 app01并且查看目录结构

  1. django-admin startapp app01
  2. tree
  3. .
  4. ├── app01
  5. ├── admin.py
  6. ├── apps.py
  7. ├── __init__.py
  8. ├── migrations
  9. └── __init__.py
  10. ├── models.py
  11. ├── tests.py
  12. └── views.py
  13. ├── manage.py
  14. └── mysite
  15. ├── asgi.py
  16. ├── __init__.py
  17. ├── settings.py
  18. ├── urls.py
  19. └── wsgi.py

5 settings.py下注册 app01

  1. cd /opt/mysite/mysite
  2. vim settings.py
  3. /INSTALL搜索字符串
  4. 新增如下内容

Linux进阶命令 - 图1

编写URL

  1. vim urls.py
  2. 写入以下内容

Linux进阶命令 - 图2

6 编写Djangoapp01/views.py

  1. cd /opt/mysite/app01

7 启动项目

  1. cd /opt/mysite
  2. python3 manage.py runserver 0.0.0.0:10001

8 版本降级重新配置

  1. 20 urlpatterns = [
  2. 21 url('^admin/', admin.site.urls),
  3. 22 url('^hello/', views.hello),
  4. 23 ]

8 报错 django.core.exceptions.ImproperlyConfigured: SQLite 3.9.0 or later is required (found 3.7.17).

自行创建数据库,用户及密码

  1. MariaDB [(none)]> drop database blog;
  2. Query OK, 0 rows affected (0.001 sec)
  3. MariaDB [(none)]> drop user blogger;
  4. Query OK, 0 rows affected (0.002 sec)
  5. MariaDB [(none)]> create database blog charset=utf8;
  6. Query OK, 1 row affected (0.000 sec)
  7. MariaDB [(none)]> create user blogger identified by 'blogger123';
  8. Query OK, 0 rows affected (0.001 sec)
  9. MariaDB [(none)]> grant all on blog.* to 'blogger'@'%' with grant option;
  10. Query OK, 0 rows affected (0.001 sec)

# 复习及拓展知识

如何查看系统发行版本?

  1. cat /etc/redhat-release
  2. CentOS Linux release 7.9.2009 (Core)
  3. 通用查看方案---适用于任何Linux系统
  4. cat /etc/os-release
  5. NAME="CentOS Linux"
  6. VERSION="7 (Core)"
  7. ID="centos"
  8. ID_LIKE="rhel fedora"
  9. VERSION_ID="7"
  10. PRETTY_NAME="CentOS Linux 7 (Core)"
  11. ANSI_COLOR="0;31"
  12. CPE_NAME="cpe:/o:centos:centos:7"
  13. HOME_URL="https://www.centos.org/"
  14. BUG_REPORT_URL="https://bugs.centos.org/"
  15. CENTOS_MANTISBT_PROJECT="CentOS-7"
  16. CENTOS_MANTISBT_PROJECT_VERSION="7"
  17. REDHAT_SUPPORT_PRODUCT="centos"
  18. REDHAT_SUPPORT_PRODUCT_VERSION="7"

Linux下UID GID是什么?

  1. id
  2. uid=0(root) gid=0(root) groups=0(root)

如何切换用户?

  1. su - 用户名 切换用户以及环境变量

普通用户无法执行命令怎么办?

  1. 1. 编辑配置文件
  2. vim /etc/sudoers
  3. sudo vim /etc/sudoers
  4. 2. 写入如下代码,添加用户
  5. ## Allow root to run any commands anywhere
  6. root ALL=(ALL) ALL
  7. vistor ALL=(ALL) ALL
  8. 3. 测试权限
  9. sudo touch /root/我五五开是清白的.txt
  10. 4. 查看文件
  11. sudo ls /root

如何避免压缩时包含父文件夹?

  1. 1. 包含父文件夹的打包方式,当前在opt目录下
  2. tar -zcvf /opt/tmpbak.tar.gz /tmp/*
  3. 2. 去掉父文件夹再打包, 当前就在tmp目录下
  4. tar -zcvf /opt/tmpbak.tar.gz ./*

CentOS使用什么命令管理服务?

  1. systemctl # CentOS7
  2. service # CentOS7更低版本使用的命令

CentOS7.9 2009 编译安装最新版本mysql

关闭防火墙

  1. systemctl stop firewalld
  2. systemctl disable firewalld

查看和卸载mariadb

  1. rpm -qa | grep mariadb
  2. rpm -e --nodeps mariadb-libs
  3. rpm -e --nodeps mariadb-devel

预先处理依赖

  1. [root@centos7 ~]# yum -y install gcc-c++ ncurses ncurses-devel perl bison openssl openssl-devel gcc* libxml2 libxml2-devel
  2. yum -y install gcc-c++ ncurses ncurses-devel perl bison openssl openssl-devel gcc* libxml2 libxml2-devel

创建仅用于启动MySQL的用户

  1. useradd -s /sbin/nologin -M mysql
  2. id mysql

官网下载版本

opt下新建mysql文件夹,解压并且安装

  1. tar xf mysql-8.0.26-1.el7.x86_64.rpm-bundle.tar
  2. rpm -ivh --nodeps mysql-community-common-8.0.26-1.el7.x86_64.rpm
  3. rpm -ivh --nodeps mysql-community-libs-8.0.26-1.el7.x86_64.rpm
  4. rpm -ivh --nodeps mysql-community-client-8.0.26-1.el7.x86_64.rpm
  5. rpm -ivh --nodeps mysql-community-server-8.0.26-1.el7.x86_64.rpm
  6. mysqld --initialize --user=mysql

查看文件权限

  1. [root@localhost opt]# cd /var/lib/mysql
  2. [root@localhost mysql]# ll
  3. 总用量 176568
  4. -rw-r-----. 1 mysql mysql 56 10 6 01:23 auto.cnf
  5. -rw-------. 1 mysql mysql 1676 10 6 01:23 ca-key.pem
  6. -rw-r--r--. 1 mysql mysql 1112 10 6 01:23 ca.pem
  7. -rw-r--r--. 1 mysql mysql 1112 10 6 01:23 client-cert.pem
  8. -rw-------. 1 mysql mysql 1676 10 6 01:23 client-key.pem
  9. -rw-r-----. 1 mysql mysql 196608 10 6 01:23 #ib_16384_0.dblwr
  10. -rw-r-----. 1 mysql mysql 8585216 10 6 01:23 #ib_16384_1.dblwr
  11. -rw-r-----. 1 mysql mysql 5889 10 6 01:23 ib_buffer_pool
  12. -rw-r-----. 1 mysql mysql 12582912 10 6 01:23 ibdata1
  13. -rw-r-----. 1 mysql mysql 50331648 10 6 01:23 ib_logfile0
  14. -rw-r-----. 1 mysql mysql 50331648 10 6 01:23 ib_logfile1
  15. drwxr-x---. 2 mysql mysql 6 10 6 01:23 #innodb_temp
  16. drwxr-x---. 2 mysql mysql 143 10 6 01:23 mysql
  17. -rw-r-----. 1 mysql mysql 25165824 10 6 01:23 mysql.ibd
  18. drwxr-x---. 2 mysql mysql 8192 10 6 01:23 performance_schema
  19. -rw-------. 1 mysql mysql 1676 10 6 01:23 private_key.pem
  20. -rw-r--r--. 1 mysql mysql 452 10 6 01:23 public_key.pem
  21. -rw-r--r--. 1 mysql mysql 1112 10 6 01:23 server-cert.pem
  22. -rw-------. 1 mysql mysql 1680 10 6 01:23 server-key.pem
  23. drwxr-x---. 2 mysql mysql 28 10 6 01:23 sys
  24. -rw-r-----. 1 mysql mysql 16777216 10 6 01:23 undo_001
  25. -rw-r-----. 1 mysql mysql 16777216 10 6 01:23 undo_002

查看密码

  1. [root@localhost mysql]# cat /var/log/mysqld.log
  2. 2021-10-05T17:23:34.388370Z 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (mysqld 8.0.26) initializing of server in progress as process 11108
  3. 2021-10-05T17:23:34.410027Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
  4. 2021-10-05T17:23:35.309481Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
  5. 2021-10-05T17:23:37.400348Z 0 [Warning] [MY-013746] [Server] A deprecated TLS version TLSv1 is enabled for channel mysql_main
  6. 2021-10-05T17:23:37.400750Z 0 [Warning] [MY-013746] [Server] A deprecated TLS version TLSv1.1 is enabled for channel mysql_main
  7. 2021-10-05T17:23:37.415729Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: hop+Dguuo8o=

登陆MySQL并且修改密码

  1. mysql -u root -p
  2. alter user user() identified by "root123";

默认密码

  1. hop+Dguuo8o=

参考致谢

  1. https://blog.csdn.net/qq_42527269/article/details/113835649
  2. https://blog.csdn.net/qq_32077121/article/details/118578343
  1. FROM centos
  2. LABEL maintainer="caesartylor@gmail.com"
  3. WORKDIR /usr/src
  4. RUN yum -y update && yum -y install \
  5. gcc\
  6. make\
  7. wget\
  8. pcre-devel\
  9. zlib\
  10. zlib-devel\
  11. vim\
  12. curl
  13. RUN wget https://nginx.org/download/nginx-1.21.3.tar.gz -P /usr/src
  14. RUN tar xf nginx-1.21.3.tar.gz
  15. RUN cd /usr/src/nginx-1.21.3
  16. RUN mkdir /usr/local/nginx
  17. RUN sh ./configure --prefix=/usr/local/nginx
  18. RUN make && make install
  19. RUN cd /usr/src && rm -rf nginx-1.21.3.tar.gz \
  20. rm -rf nginx-1.21.23
  21. EXPOSE 10001