Linux用户管理
- 对于一个
QQ
群而言,有哪些角色划分,权利的划分“ - 群主—
QQ
群里面权限最大 - 管理员—root临时赋予的超级权限,—在用皇帝的身份狐假虎威,拿着尚方宝剑—Linux中的
sudo
命令 - 吃瓜群众—权限最低,基本只能够在自己的家目录进行增删改查,其他目录的权限都很低—-Linux的普通用户
系统创建了用户,同时也会创建一个同名的组,例如
useradd canxun # 创建普通用户
系统会在 ```/etc/passwd```下增加一行用户信息,且同时创建了一个用户组,也叫做*canxun*
该用户组存放在/etc/group
查看普通用户
tail -5 /etc/passwd
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
caesar:x:1000:1000::/home/caesar:/bin/bash
root
而言
为什么叫做root用户?
因为系统设计了`UID`的概念,用户ID号码,用户ID为零,指的是系统的超级用户;
普通用户由root用户创建,默认的`UID`是从1000开始,权限很低;
普通用户
默认用户的家目录都在 /home
下,例如:
`/home/caesar`
`/home/tylor`
用户管理的命令
添加删除用户,需要注意的是:涉及到权限的修改,只能由root用户操作,其他人基本没有权限;
useradd canxun # 创建用户:canxun
passwd canxun # 给用户修改密码
userdel canxun # 删除用户
userdel -rf canxun # 删除用户以及用户home目录
passwd # 未指定用户则修改当前用户的密码
删除用户以及重新检查
[root@vvkt7whznuckhiz2-0723575 ~]# userdel -rf caesar
[root@vvkt7whznuckhiz2-0723575 ~]# grep "caesar" /etc/passwd
[root@vvkt7whznuckhiz2-0723575 ~]#
用户切换
# 添加用户以及设置密码
useradd tylor
passwd qwe98322@
# 切换用户以及环境变量
[root@vvkt7whznuckhiz2-0723575 home]# su - tylor
[tylor@vvkt7whznuckhiz2-0723575 ~]$
# 当前用户的工作目录
[tylor@vvkt7whznuckhiz2-0723575 ~]$ pwd
/home/tylor
尚方宝剑命令
1. 当tylor用户想要进入/root文件夹时发现用户权限不够,应该怎么办呢?
思路:
1. 使用sudo命令,默认以root身份去执行命令
例如: sudo cd /root
2. 将tylor用户加入root组里,也就拥有了root权限,但还是需要查看用户组权限;
[sudo]
命令使用配置流程
1. 使用visudo命令,修改配置文件,添加 你允许执行的sudo命令用户
修改配置信息,如下:
99 ## Allow root to run any commands anywhere
100 root ALL=(ALL) ALL
101 tylor ALL=(ALL) ALL
2. 代码示例
[tylor@vvkt7whznuckhiz2-0723575 ~]$ sudo cd /root
[sudo] password for tylor:
[tylor@vvkt7whznuckhiz2-0723575 ~]$ sudo cd /root # 加上sudo命令已经能够进入 /root文件夹
[tylor@vvkt7whznuckhiz2-0723575 ~]$ pwd
/home/tylor
[tylor@vvkt7whznuckhiz2-0723575 ~]$ sudo ls /root # 查看root下所有文件
admin.text admir.text
[tylor@vvkt7whznuckhiz2-0723575 ~]$ touch /root/tylor到此一游 # 普通用户身份仍然无法创建文件夹
touch: cannot touch ‘/root/tylor到此一游’: Permission denied
[tylor@vvkt7whznuckhiz2-0723575 ~]$ sudo touch /root/person
[tylor@vvkt7whznuckhiz2-0723575 ~]$ sudo ls /root # 创建成功查看文件信息
admin.text admir.text person
id
命令
查看用户的账户信息
[root@vvkt7whznuckhiz2-0723575 ~]# id root
uid=0(root) gid=0(root) groups=0(root)
组的概念
对于技术部门,运维需要分配单个用户的权限太散,太多;
[权限控制:针对不同的组,不同的用户,针对不同的文件夹,文件设置不同的权限];
前端组;后端组;运维组;测试部门;安全部门;DB部门;
运维都得对上述的人进行权限控制,对于服务器操作权限;因此引入组的概念,针对整个组进行管理,更加方便;
比如:
MySQL的默认数据存放位置,如/var/lib/mysql/* 那么这个MySQL数据文件以及文件夹是属于哪个组,那个用户管理呢?
[root@vvkt7whznuckhiz2-0723575 ~]# ll /tmp/
total 44828
-rw-r--r-- 1 root root 946 Sep 30 16:09 admin.text
drwxr-xr-x 2 root root 4096 Sep 30 20:48 hsperfdata_root
drwxr-xr-x 2 root root 4096 Sep 29 16:03 python1
第一组数据指的是读写权限,第二组为当前所属用户,第三组为当前所属组,
Linux文件,目录权限管理
对于Linux而言,文件夹,文件都有user, group,属主和属组的角色划分,还存在一个other其他人三个身份的划分;
设置了三种权限,可读可写可执行,分别为 R, W, X;
文件与目录权限
Linux设置权限的目的:保护账户资料
Linux权限主要按照三种身份划分:
other/owner 文件使用者,文件属于哪个用户;
group 属组。文件属于哪个组;
other既不是 user, 也不是group,就是other,其他人;
Linux的权限观察
[root@vvkt7whznuckhiz2-0723575 ~]# ls -l /tmp
total 44828
-rw-r--r-- 1 root root 946 Sep 30 16:09 admin.text
# 每三个一组
- : 代表普通文件类型
rw-:user的权限
r--:group的权限
r--:other的权限
# 1 指的是文件链接数目
# 第一个root指的是属主,第二个root指的是属组
# 其次为文件大小
# 最后为文件最后修改日期和文件名字
案例1:普通用户如何写入root用户创建的文件呢?
[root@vvkt7whznuckhiz2-0723575 tmp]# chmod o+w test.py
[root@vvkt7whznuckhiz2-0723575 tmp]# su - tylor
Last login: Fri Oct 1 11:11:02 CST 2021 on pts/0
[tylor@vvkt7whznuckhiz2-0723575 ~]$ echo "给other赋予写入权限之后就可以自行写入文件,然而other是相当于属主而言的" >> test.py
[tylor@vvkt7whznuckhiz2-0723575 ~]$ cat test.py
给other赋予写入权限之后就可以自行写入文件,然而other是相当于属主而言的
chmod
命令总结
chmod 可以更改文件权限,修改针对user, group, other的权限,例如:
chmod u+r file.text # 给文件的user 添加读的权限
chmod g-x file.text # 删除文件用户组的执行权限
chmod o+r / o+w / o+x file.test # 给文件的other身份最大的权限,读写可执行
chmod 000 file.text # 给文件最低的权限 任何人不能读写执行
chgrp
命令
更改用户所属的组
chgrp 新的属组 file.text
chown
命令
更改文件的所有者owner/user
chown 新的属主 file.text
对于文件的rwx
权限
1. r cat, more, less, head,等读取文件的操作
2. w vim, echo 等写入文件的操作
3. x 可执行脚本,比如bash,python,文件会变为绿色
案例1—测试脚本文件的执行
[tylor@vvkt7whznuckhiz2-0723575 tmp]$ vim echo.sh
[tylor@vvkt7whznuckhiz2-0723575 tmp]$ bash echo.sh
我是用来测试脚本文件的
[tylor@vvkt7whznuckhiz2-0723575 tmp]$ cat echo.sh
echo "我是用来测试脚本文件的"
# 第二种方法:给用户或者所有者添加可执行权限,然后以脚本方式运行
[root@vvkt7whznuckhiz2-0723575 tmp]# chmod u+x echo.sh
[root@vvkt7whznuckhiz2-0723575 tmp]# su - tylor
Last login: Fri Oct 1 11:30:10 CST 2021 on pts/0
[tylor@vvkt7whznuckhiz2-0723575 ~]$ cd /tmp
[tylor@vvkt7whznuckhiz2-0723575 tmp]$ ./echo.sh
我是用来测试脚本文件的
对于文件夹的rwx
- R, W,X的数值分别是4,2,1,因此对用户,组,其他设置的权限可以用数字表达;
- 所以各个用户的最高权限为777, 最低权限为000. vim编辑后权限为664.;
- 如果一个文件的权限为664,表示对于用户的权限为读写,对于组权限为读写,对于其他的权限为读;
软链接
windows的一个快捷方式而已
创建语法: ln -s /tmp/test.py[原始文件] /opt/test.text[目标文件,开始链接时创建]
;
删除快捷方式:test.text
不会影响原文件
[root@vvkt7whznuckhiz2-0723575 tmp]# ls
admin.text hsperfdata_root python2 python3 python4 python_a python_c python.txt wrapper-615-1-in
echo.sh python1 python2.txt python3.txt python5 python_b python_d test.py wrapper-615-1-out
[root@vvkt7whznuckhiz2-0723575 tmp]# echo "我是一只小小鸟" >> test.py
[root@vvkt7whznuckhiz2-0723575 tmp]# cat /tmp/test.py
"我是测试数据"
我是一只小小鸟
[root@vvkt7whznuckhiz2-0723575 tmp]# ln -s /tmp/test.py /opt/test.text
[root@vvkt7whznuckhiz2-0723575 opt]# ll
total 0
lrwxrwxrwx 1 root root 12 Oct 1 16:59 test.text -> /tmp/test.py
-rw-r--r-- 1 root root 0 Oct 1 16:56 test.txt
[root@vvkt7whznuckhiz2-0723575 opt]# cat test.text
"我是测试数据"
我是一只小小鸟
打包,压缩,解压缩
简介以及语法
打包不节省空间,便于传输;压缩,节省磁盘空间;
语法
tar 命令
功能参数
-z 调用gzip命令,对文件压缩,加上这个参数才会节省磁盘空间
-x 解包,拆快递包裹的过程
-v 显示整个过程
-f 必须写在参数的结尾,指定压缩文件的名字
-c 打包,收拾快递
# 压缩文件的后缀只是告诉别人,该文件用什么命令压缩和解压缩
```*.gz``` gzip命令解压缩
```*.tar``` tar命令解压缩
```*.gz``` 用xz解压缩
```*.zip``` 用unzip解压缩
案例1
打包test.txt
文件,打包为tar
文件allopt.tar
[root@vvkt7whznuckhiz2-0723575 opt]# tar -cvf allopt.tar test.txt
test.txt
[root@vvkt7whznuckhiz2-0723575 opt]# ls
allopt.tar q1.txt q2.txt q3.txt q.txt quanquan.txt test.text test.txt
# 解包操作
[root@vvkt7whznuckhiz2-0723575 zip]# tar -xvf /opt/allopt.tar
test.txt
[root@vvkt7whznuckhiz2-0723575 zip]# ls
test.txt
# 解包
第一步 打包某个文件
tar -cvf /opt/test.py allopt.tar
第二步 解包tar到当前文件夹
tar -xvf allopt.tar
案例2
打包且压缩/opt
下所有内容,生成tar.gz
包 allopt.tar.gz
第一步
第一步:打包且压缩 将tmp下所有文件打包为alltmp.tar.gz并且放置在opt目录下
[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
第二步
第二步: 解压缩,常见的 ```*.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
<a name="8606f66d"></a>
# 防火墙
<a name="69fa3701"></a>
## 作用
> 用于控制服务器的出入流量;防止恶意流量攻击服务器,提供保护服务器的端口等服务;
>
> 在学习阶段直接关闭,专业的运维人员要学习`iptables`软件的一些指令
<a name="706086ba"></a>
## 常识
> 在云服务器上,默认有一个硬件防火墙和一个软件防火墙[`iptables, firewalled]`
>
> 在云服务器上运行`Django`,如果服务器开启了防火墙,且没有自定义规则,默认是拒绝所有外来流量,导致我们的Windows浏览器无法访问到Linux服务器上运行的`Django`等程序
<a name="0dfbe902"></a>
## 常用命令
```shell
# 1. 清空防火墙规则
iptables -F
# 2. 关闭防火墙的服务
systemctl stop firewalld
systemctl disable firewalld # 禁止防火墙开机自启
DNS
域名解析
原理
- 机器去本地
hosts
文件,检查是否写了对应的域名解析关系;- 去指定的
DNS
服务器上寻找对应的解析关系;
公网中的域名解析服务器:腾讯119.29.29.29
Linux下DNS
客户端的配置文件
# 配置文件定义了主备两个```DNS```服务器地址
vim /etc/resolv.conf
# Generated by NetworkManager
search openstacklocal novalocal
nameserver 100.125.0.250
nameserver 114.114.114.114
options single-request-reopen
# Linux本地DNS强制解析文件 /etc/hosts,可以写入一些域名供本地测试使用
# 本地强制解析文件的优先级比/etc/resolv.conf更高
nslookup
[查找NDS
域名解析与主机名]命令
原理
浏览器进行```DNS```查找,解析域名对应的```IP```地址,找到之后浏览器访问该```IP```地址;用户请求访问网页,请求到达服务器时,优先发给 ```Nginx```,用户请求静态资源,```Nginx```则直接从磁盘上找到资料给用户查看;
如果``Nginx``检测到用户请求是一个动态请求,登录,注册,读取数据库,例如 ```.php ```例如 ```.aspx```,通过URL匹配发现是动态请求,转发给后端的应用服务器```[tomcat, php, django]
Django
处理完用户的动态请求之后,如果发现需要读取数据库,再通过pymysql
向 MySQL
读取数据;
如果处理请求发现读取的是redis, 再通过pyredis向redis拿数据; Django 处理完请求之后,返回给nginx数据,nginx再返回给用户浏览器,浏览器渲染好页面后再展示给用户; 推荐阅读 《大型网站技术架构》
<a name="ddf7d2a5"></a>
## 命令
```shell
# 查找提供此命令的包
yum provides */nslookup
# 安装对应的包
yum -y install bind-utils
# 输入nslookup进入交互式命令
nslookup
# 输入网址进行查询
> www.pythonav.cn
Server: 100.125.0.250
Address: 100.125.0.250#53
# 退出
exit
crontab
定时任务
定时任务的语法规则
为什么设置脚本时使用绝对路径?
crontab 存在局部环境变量,如果不指定精确位置,那么脚本运行时则没有支撑文件
* * * * * 命令的绝对路径
分 时 日 月 周
3,5 * * * * 每小时的第三分钟,第五分支执行命令
15, 2-5 * * * 每天的两点一刻,三点一刻,四点一刻和五点一刻执行命令
30 08 * * * 每天八点半上班
00 00 * * * 每天24点下班
每分钟执行一次命令
* * * * *
每小时的第三分钟,第五分钟执行
3, 15 * * *
上午8-11点的第三分钟,第十五分钟执行
3, 15 8-11 * * *
每晚九点半执行
30 21 * * * 二十四小时制
每周六,周日1:30执行
30 13 * * 6, 7
每周一至周五的凌晨一点,清空 /tmp 目录下的所有文件,注意执行命令请使用绝对路径,否则会失效
0 1 * * 1-5 /usr/bin rm -rf /tmp/*
每晚零点重启 nginx
0 0 * * * /usr/bin/systemctl restart nginx
每个月的1, 10, 22日的4:55重启nginx
55 4 1,10,22 * * /usr/bin/systemctl restart nginx
每个星期一的上午八点到十一点的第三分钟到第十五分钟执行命令
3-15 8-11 * * 1
定时任务服务,提供了一个客户端管理命令;几号和星期几不能共存;
命令说明
crontab -e # 编辑定时任务配置文件
crontab -l #查看定时任务的规则
配置参数说明
minute hour day month week command
其中:
minute: 表示分钟,可以是从0到59之间的任何整数。
hour:表示小时,可以是从0到23之间的任何整数。
day:表示日期,可以是从1到31之间的任何整数。
month:表示月份,可以是从1到12之间的任何整数。
week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。
星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,
例如*/10,如果用在minute字段,表示每十分钟执行一次。
案例1-每分钟将一句话追加到一份文件当中
1. 打开配置文件
crontab -e
2. 写入如下命令,命令写入后会有已安装的提示信息
* * * * * /usr/bin/echo "有人问王思聪,钱是万能的吗?王思聪答:钱是万达的!" >> /tmp/wsc.txt
3. 检查命令
crontab -l
4. 实时刷新
tail -f /tmp/wsc.txt
其他小技巧–快速上手服务器
ps -ef # 查看运行了那些进程
netstat -tunlp # 查看监听了那些端口
crontabl -l # c
原则: 绝对路径优先,一般不会出错
Linux软件包管理
软件安装形式
源代码安装,较为麻烦,可以自选软件版本,亦可扩展第三方额外功能,指定软件安装目录五颗星
rpm包手动安装,需要手动解决依赖关系,两颗星
yum 自动化安装,需配置好yum源,能够自行搜索依赖关系,下载安装和处理依赖关系,
缺点:版本可能较低;机器数量较多时不容易控制;
更换yum
源
yum源的默认仓库文件夹是:/etc/yum.repos.d,只有在目录第一层的```*.repo```结尾的文件才会被```yum```读取;
1. 备份旧的仓库源
cd /etc/yum.repos.d
mkdir repobak
mv *.repo repobak/
2. 下载repo,epl源文件
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
3. 测试安装速度
yum -y install redis
Linux编译python3开发环境
采用编译安装的方式
下载包[从国内镜像站]
wget http://npm.taobao.org/mirrors/python/3.9.6/Python-3.9.6.tgz
wget http://npm.taobao.org/mirrors/python/3.10.4/Python-3.10.4.tgz
解决编译安装依赖
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
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下的依赖处理
sudo apt update && sudo apt upgrade
sudo apt install gcc g++ libffi-dev build-essential checkinstall
sudo apt install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev
当前目录下解压
tar -zxvf Python-3.9.6.tgz
删除个别配置
vim configure
enable-optimizations # 删除该行
开始指定安装目录和检查依赖
./configure --prefix=/opt/python396
开始编译安装
make && make install
安装成功显示的代码
Looking in links: /tmp/tmpprh3c1wl
Processing /tmp/tmpprh3c1wl/setuptools-56.0.0-py3-none-any.whl
Processing /tmp/tmpprh3c1wl/pip-21.1.3-py3-none-any.whl
Installing collected packages: setuptools, pip
WARNING: The scripts pip3 and pip3.9 are installed in '/opt/python396/bin' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Successfully installed pip-21.1.3 setuptools-56.0.0
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的可执行程序目录
[root@vvkt7whznuckhiz2-0723575 bin]# pwd
/opt/python396/bin
opt/python310/bin
系统环境变量中添加如下配置
vim /etc/profile
### 自定义的python3.9.6的目录
PATH="/opt/python396/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
检查环境变量,重新读取,检查环境是否安装成功
echo $PATH
source /etc/profile
echo $PATH
which pip3
which python3
Linux运行Django3
1 安装django
包
pip3 install django==3.2.7 -i https://pypi.tuna.tsinghua.edu.cn/simple
2 升级pip
cd /opt/python396/bin/
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade pip
3 创建项目并且进入
django-admin startproject mysite
cd mysite
tree
.
├── manage.py
└── mysite
├── asgi.py
├── __init__.py
├── settings.py
├── urls.py
└── wsgi.py
1 directory, 6 files
4 创建 app01
并且查看目录结构
django-admin startapp app01
tree
.
├── app01
│ ├── admin.py
│ ├── apps.py
│ ├── __init__.py
│ ├── migrations
│ │ └── __init__.py
│ ├── models.py
│ ├── tests.py
│ └── views.py
├── manage.py
└── mysite
├── asgi.py
├── __init__.py
├── settings.py
├── urls.py
└── wsgi.py
5 settings.py
下注册 app01
cd /opt/mysite/mysite
vim settings.py
/INSTALL搜索字符串
新增如下内容
编写URL
vim urls.py
写入以下内容
6 编写Django
的 app01/views.py
cd /opt/mysite/app01
7 启动项目
cd /opt/mysite
python3 manage.py runserver 0.0.0.0:10001
8 版本降级重新配置
20 urlpatterns = [
21 url('^admin/', admin.site.urls),
22 url('^hello/', views.hello),
23 ]
8 报错 django.core.exceptions.ImproperlyConfigured: SQLite 3.9.0 or later is required (found 3.7.17).
自行创建数据库,用户及密码
MariaDB [(none)]> drop database blog;
Query OK, 0 rows affected (0.001 sec)
MariaDB [(none)]> drop user blogger;
Query OK, 0 rows affected (0.002 sec)
MariaDB [(none)]> create database blog charset=utf8;
Query OK, 1 row affected (0.000 sec)
MariaDB [(none)]> create user blogger identified by 'blogger123';
Query OK, 0 rows affected (0.001 sec)
MariaDB [(none)]> grant all on blog.* to 'blogger'@'%' with grant option;
Query OK, 0 rows affected (0.001 sec)
# 复习及拓展知识
如何查看系统发行版本?
cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
通用查看方案---适用于任何Linux系统
cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
Linux下UID GID
是什么?
id
uid=0(root) gid=0(root) groups=0(root)
如何切换用户?
su - 用户名 切换用户以及环境变量
普通用户无法执行命令怎么办?
1. 编辑配置文件
vim /etc/sudoers
sudo vim /etc/sudoers
2. 写入如下代码,添加用户
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
vistor ALL=(ALL) ALL
3. 测试权限
sudo touch /root/我五五开是清白的.txt
4. 查看文件
sudo ls /root
如何避免压缩时包含父文件夹?
1. 包含父文件夹的打包方式,当前在opt目录下
tar -zcvf /opt/tmpbak.tar.gz /tmp/*
2. 去掉父文件夹再打包, 当前就在tmp目录下
tar -zcvf /opt/tmpbak.tar.gz ./*
CentOS
使用什么命令管理服务?
systemctl # CentOS7
service # CentOS7更低版本使用的命令
CentOS7.9 2009 编译安装最新版本mysql
关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
查看和卸载mariadb
rpm -qa | grep mariadb
rpm -e --nodeps mariadb-libs
rpm -e --nodeps mariadb-devel
预先处理依赖
[root@centos7 ~]# yum -y install gcc-c++ ncurses ncurses-devel perl bison openssl openssl-devel gcc* libxml2 libxml2-devel
yum -y install gcc-c++ ncurses ncurses-devel perl bison openssl openssl-devel gcc* libxml2 libxml2-devel
创建仅用于启动MySQL的用户
useradd -s /sbin/nologin -M mysql
id mysql
官网下载版本
opt下新建mysql文件夹,解压并且安装
tar xf mysql-8.0.26-1.el7.x86_64.rpm-bundle.tar
rpm -ivh --nodeps mysql-community-common-8.0.26-1.el7.x86_64.rpm
rpm -ivh --nodeps mysql-community-libs-8.0.26-1.el7.x86_64.rpm
rpm -ivh --nodeps mysql-community-client-8.0.26-1.el7.x86_64.rpm
rpm -ivh --nodeps mysql-community-server-8.0.26-1.el7.x86_64.rpm
mysqld --initialize --user=mysql
查看文件权限
[root@localhost opt]# cd /var/lib/mysql
[root@localhost mysql]# ll
总用量 176568
-rw-r-----. 1 mysql mysql 56 10月 6 01:23 auto.cnf
-rw-------. 1 mysql mysql 1676 10月 6 01:23 ca-key.pem
-rw-r--r--. 1 mysql mysql 1112 10月 6 01:23 ca.pem
-rw-r--r--. 1 mysql mysql 1112 10月 6 01:23 client-cert.pem
-rw-------. 1 mysql mysql 1676 10月 6 01:23 client-key.pem
-rw-r-----. 1 mysql mysql 196608 10月 6 01:23 #ib_16384_0.dblwr
-rw-r-----. 1 mysql mysql 8585216 10月 6 01:23 #ib_16384_1.dblwr
-rw-r-----. 1 mysql mysql 5889 10月 6 01:23 ib_buffer_pool
-rw-r-----. 1 mysql mysql 12582912 10月 6 01:23 ibdata1
-rw-r-----. 1 mysql mysql 50331648 10月 6 01:23 ib_logfile0
-rw-r-----. 1 mysql mysql 50331648 10月 6 01:23 ib_logfile1
drwxr-x---. 2 mysql mysql 6 10月 6 01:23 #innodb_temp
drwxr-x---. 2 mysql mysql 143 10月 6 01:23 mysql
-rw-r-----. 1 mysql mysql 25165824 10月 6 01:23 mysql.ibd
drwxr-x---. 2 mysql mysql 8192 10月 6 01:23 performance_schema
-rw-------. 1 mysql mysql 1676 10月 6 01:23 private_key.pem
-rw-r--r--. 1 mysql mysql 452 10月 6 01:23 public_key.pem
-rw-r--r--. 1 mysql mysql 1112 10月 6 01:23 server-cert.pem
-rw-------. 1 mysql mysql 1680 10月 6 01:23 server-key.pem
drwxr-x---. 2 mysql mysql 28 10月 6 01:23 sys
-rw-r-----. 1 mysql mysql 16777216 10月 6 01:23 undo_001
-rw-r-----. 1 mysql mysql 16777216 10月 6 01:23 undo_002
查看密码
[root@localhost mysql]# cat /var/log/mysqld.log
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
2021-10-05T17:23:34.410027Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2021-10-05T17:23:35.309481Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2021-10-05T17:23:37.400348Z 0 [Warning] [MY-013746] [Server] A deprecated TLS version TLSv1 is enabled for channel mysql_main
2021-10-05T17:23:37.400750Z 0 [Warning] [MY-013746] [Server] A deprecated TLS version TLSv1.1 is enabled for channel mysql_main
2021-10-05T17:23:37.415729Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: hop+Dguuo8o=
登陆MySQL并且修改密码
mysql -u root -p
alter user user() identified by "root123";
默认密码
hop+Dguuo8o=
参考致谢
https://blog.csdn.net/qq_42527269/article/details/113835649
https://blog.csdn.net/qq_32077121/article/details/118578343
FROM centos
LABEL maintainer="caesartylor@gmail.com"
WORKDIR /usr/src
RUN yum -y update && yum -y install \
gcc\
make\
wget\
pcre-devel\
zlib\
zlib-devel\
vim\
curl
RUN wget https://nginx.org/download/nginx-1.21.3.tar.gz -P /usr/src
RUN tar xf nginx-1.21.3.tar.gz
RUN cd /usr/src/nginx-1.21.3
RUN mkdir /usr/local/nginx
RUN sh ./configure --prefix=/usr/local/nginx
RUN make && make install
RUN cd /usr/src && rm -rf nginx-1.21.3.tar.gz \
rm -rf nginx-1.21.23
EXPOSE 10001