# linux 基础 mysql 安装
* 复习
* shell
* screen
* 磁盘管理
* 负载均衡
* mysql安装
## 复习
```
./configure
--prefix
--with-
--enable
make && make install
python
默认有两个版本 2.7 和3.5
pyenv
pyenv install --list
pyenv versions
pyenv global 3.6.4
pyenv uninstall 3.6.4
用pvenv 安装 python
cd ~/.pyenv
mkdir cache
pyenv install 3.6.4
pyenv rehash
pyenv 不能管理默认版本 智能管理 通过pyenv 安装的python 版本
pip install virtualenv
pip install psm #psm 解决了 pip 从国内源下载 提高下载速度
virtualenv+pyenv 实现 不同的项目用共同的python版本 但是 不同的 django 和 flask版本
1.先创建项目目录
2.进入项目目录
3.pyenv virtualenv 3.6.4 env36
pyenv virtualenv 3.6.4 env361
4.进入虚拟环境
pyenv activate env361 前边 会多一个(env361)
5.pyenv deactivate evn361
```
## shell
```
1.环境变量
echo $PATH 列出系统的所有环境变量
我们需要测试 pyenv 是否安装成功
在安装完成之后 可以 echo $PATH 查看是否出现
/home/tuizz/bin:/home/tuizz/.local/bin:/home/tuizz/.pyenv/plugins/pyenv-virtualenv/shims:/home/tuizz/.pyenv/shims:/home/tuizz/.pyenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin 中 是否有 shims 如果有 说明安装成功
tuizz@tuizz:~$ export name='qiulinxiong' 设定新的环境变量
tuizz@tuizz:~$ echo $name
$PATH 用户的搜索路径
$HOME 用户的工作目录
$LOGNAME 用户的登陆名
当前用户想设定环境变量
~/.bashrc
~/.bash_profile
~/.profile
在上面三个文件设定环境变量 只对当前用户生效 不能对 全局用户生效
临时设定 PATH 环境变量
PATH=$PATH:/home/kangbazi
将 /home/kangbazi 添加到环境变量 但是这个是临时的
全局用户生效
vim /etc/profile
最后一行 加入
export PATH=$PATH:/usr/local/nginx/sbin
上面 写法 所有的用户都有效
source /etc/profile #让配置文件立即生效
# 让 登陆用户生效
vim ~/.bashrc
export PATH=$PATH:/usr/local/nginx/sbin
soucre ~/.bashrc 让配置文件立即生效
```
### shell
```
tuizz@tuizz:~$ vim ~/.bashrc 这就是一个shell
文件脚本 一般 以.sh 结尾
文件内部 以 #!/bin/bash 开头
chmod +x 脚本名称.sh 让脚本具备执行的权限
执行脚本
1./usr/local/nginx/sbin/nginx
2.切换到脚本所在的目录 ./nginx
3.切换到脚本所在的目录 sh nginx
```
#### 定义变量
```
1.定义局部变量
a=10
b=$a 将变量赋值
echo $b 输出的时候 别忘了$
10
echo ${b} 输出变量另外一种方式
10
echo "a=$a" 双引号 解析变量
销毁变量
unset a 销毁变量的时候 不要加$
```
#### 位置变量
```
$0 表示脚本的名称
$1~$9 表示传递给脚本的参数
$1 表示第一个参数
#!/bin/bash
echo '就算我有9条命 也跟你一起过'
echo $0
echo $1 $2 $3 $4
sudo chmod +x test.sh
~/test.sh
cd ~
./test.sh
sh test .sh
输出结果
就算我有9条命 也跟你一起过
test.sh
./test.sh haha xixi hehe heihei #这四个就是所谓的脚本参数
输出的结果就是
就算我有9条命 也跟你一起过
test.sh
haha xixi hehe heihei
#!/bin/bash
echo '就算我有9条命 也跟你一起过'
echo $0
echo $1 $2 $3 $4
echo $# 表示参数的个数
echo $* 表示所有的参数
echo $? 返回值 0表示成功执行 否则返回错误
输出结果
就算我有9条命 也跟你一起过
./test.sh
1 22 333 4444
4
1 22 333 4444
0
定义常量
tuizz@tuizz:~$ readonly a=100
tuizz@tuizz:~$ echo $a
100
tuizz@tuizz:~$ a='haha'
-bash: a: readonly variable 不让随便改
readonly unset a 释放常量
```
#### 引号
```
双引号 解析变量 解析特殊字符
单引号 不解析变量 不解析特殊字符
`echo $a` 反引号 会解析里边的内容
特殊字符 记得转义 比如 & * ? | \ 反斜线
```
#### 字符串
```
tuizz@tuizz:~$ b='我就是什么数,你心里必须有我'
tuizz@tuizz:~$ echo ${#b} 计算字符串的长度 ${#字符串名字 }
14
tuizz@tuizz:~$ echo ${b:5:8} 提取字符串
数,你心里必须有 从下标为5的开始 提取8个 shell 字符串 下标也是从0开始
```
#### 数组
```
tuizz@tuizz:~$ c=(1 2 3 4 5 666 888) 数值之间 用 空格 隔开
tuizz@tuizz:~$ echo ${c[5]} 输出下标为5的元素
c[0]=100
给第一个元素重新赋值
tuizz@tuizz:~$ echo ${#c[*]} #输出数组的长度
```
#### 生成随机数
```
seq 1 10 生成 1-10之间的连续整数
```
#### 运算
```
tuizz@tuizz:~$ c=100 #$[$变量名+]
tuizz@tuizz:~$ echo $[$c+100]
200
tuizz@tuizz:~$ echo $[$c/2]
50
tuizz@tuizz:~$ echo $[$c*2]
200
tuizz@tuizz:~$ echo $[$c-2]
98
tuizz@tuizz:~$ echo $[$c%2]
0
tuizz@tuizz:~$ let a=10+10
tuizz@tuizz:~$ echo $a
20
tuizz@tuizz:~$ let a+=10
tuizz@tuizz:~$ echo $a
30
```
#### 关系运算
| 运算符 | 说明 | 举例子 |
| ------ | --------------------- | --------- |
| -eq | 等于 == 相等返回true | [a -eq b] |
| -ne | != | |
| -gt | > | |
| -lt | < | |
| -ge | >= | |
| -le | <= | |
#### 逻辑运算
| 运算符 | 说明 |
| ------ | ------ |
| && | 逻辑与 |
| \|\| | 逻辑或 |
#### 字符判断
| 字符 | 说明 |
| ---- | -------------------------------- |
| = | 字符串是否相等 |
| != | 如果不相等 返回true |
| -z | 是否长度是否为0 如果为0返回true |
| -n | 是否长度是否为0 不为0 返回true |
| str | 是否为空 不为空返回true |
| | |
```
c='kanbazi'
#if [ -z $c ] 88
#if [ -n $c ] 66
if [ $c ] 66
then
echo '66'
else
echo '88'
fi
```
#### 文件 判断
| 操作符 | 说明 | 举例 |
| -------- | ----------------------------------------------------- | ---- |
| -d $file | 判断是否是目录 是返回true | |
| -f $file | 判断 普通文件 不是 目录 不是设备文件 如果是返回true | |
| -r $file | 是否可读 | |
| -w $file | 是否可写 | |
| -x $file | 是否可执行 | |
| -s $file | 表示该文件是否为空 为空返回true | |
| -e $file | 表示是该文件是否存在 存在返回true | |
| | | |
#### 分支语句
```
if-else
c='kanbazi'
#if [ -z $c ]
#if [ -n $c ]
if [ $c ]
then
echo '66'
else
echo '88'
fi
case $变量名 in
模式)
命令
;;
模式2)
命令2
;;
*)
默认执行的命令
;;
esac
#!/bin/bash
case $1 in
start | begin)
echo 'start'
;;
stop | end)
echo 'stop'
;;
*)
echo 'i do not konw'
esac
./python10.sh start
./python10.sh stop
```
#### 循环 语句
```
for in ----------------------------------------
for 变量 in 列表
do
命令1
命令2
done
#!/bin/bash
for file in ~/*; 读取目录列表
do
echo $file
done
for i in 1,2,3,4,5,6,7
do
echo $i
done
for line in `cat haha.txt` ``内容会被执行
do
echo $line
done
sum=0
for i in `seq 1 100`;do #值累加
let sum+=$i
done
echo $sum
a=(1 2 3 4 5 666 888) #遍历数组
for x in ${a[*]};do
echo $x
done
while ----------------------------------------
#!/bin/bash
sum=0
i=0
while [ $i -lt 100 ]
do
let sum+=$i
let i+=1
done
echo $sum
上面叫当型循环 只要为真 执行 只要遇到假 停止
until ---------------------------------------------
直到型循环
#!/bin/bash
i=0
until [ ! $i -lt 100 ]为假执行循环 直到真为止
do
echo $i
let i+=1
done
```
#### 需求
```
加入 启动服务 需要同时启动 网络 nginx mysql
service networking start
service nginx start
service mysql start
三个命令 繁琐
nnm start 以上三个同时启动
cd /sbin 切换到 /sbin
sudo vim nnm
#!/bin/bash
if [ $1 == "start" ]
then
service networking start
service nginx start
service mysql start
fi
if [ $1 == "stop" ]
then
service networking stop
service nginx stop
service mysql stop
fi
if [ $1 == "restart" ]
then
service networking restart
service nginx restart
service mysql restart
fi
sudo chmod +x nnm
```
#### 一键 切换脚本
```
cd ~
mkdir -p aliyun 163
cd aliyun
vim source.list 将yum源 复制过来
cd 163
vim source.list 将yum源 复制过来
sudo vim check_yum.sh
#!/bin/bash
rm -rf /etc/apt/source.list
read -p "请选择阿里云yum源或者163yum源(阿里云1:163 2):" yums #yums用来接收 1 或者2
if [ $yums -eq 1 ]
then
echo '您选择了阿里云'
cp ~/aliyun/source.list /etc/apt
else
echo '您选择了163'
cp ~/163/source.list /etc/apt
fi
sudo apt-get update
sudo apt-get upgrade
sudo chmod +x check_yum.sh
```
## screen 不中断进行中的任务 也不耽误 接下来的任务
> linux 是 多用户多任务操作系统
>
> 当在一个窗口打开的时候 进行一个任务 耗时长 但是 不能终止 还必须进行另外一个任务
>
> 这个时候 可以使用 screen
```
sudo apt-get -y install screen
sudo screen -S 窗口的名字 #新建一个窗口
-ls #查看多少个窗口
-r 窗口名字 #进入到指定的窗口
-X -S 窗口名 quit # 推出这个窗口
快捷键
ctrl+a+d 推出会话
```
## 磁盘管理
### 硬盘类型
* HDD 机械硬盘
* SSD 固态
* HHD 混合硬盘
### 文件系统类型
* windows : fat32 ntfs
* linux: ext2 ext3 ext4
### 查看磁盘的使用情况 df
```
df -h
sda 第一块硬盘
sdb 第二块他硬盘
sdc 第三块硬盘
df -k 以k为单位查看 查看 硬盘 使用了多少 还剩多少
df -m 以m为单位
df -h 以最佳阅读体验查看
```
### 查看目录和文件的占用空间情况 du
```
du -a 显示当前目录下所有的子目录及子文件空间的占用情况
du -s 显示当前整个目录的占用情况
du -s -h 以最佳阅读体验阅读
du -h haha.txt 查看文件的大小
```
### 磁盘分区 fdisk 分区工具
```
硬盘操作步骤
1.添加硬盘
2.分区
3.格式化
4.挂载
添加成功之后 fdisk -l 会有 /dev/sdb
fdisk -l 列出所有的磁盘 查看磁盘的分区情况
fdisk /dev/sdb
-m 查看帮助文件
-n 新建一个分区
-d 删除一个分区
-w 保存
-q 退出
fdisk /dev/sdb
-m
-n
p 主分区
e 扩展分区 原则 :先创建主分区 然后创建扩展分区
Select (default p): p
分区号 (1-4, default 1): 1
First sector (2048-41943039, default 2048): 2048
Last sector, +sectors or +size{K,M,G,T,P} (2048-41943039, default 41943039): +8G
命令(输入 m 获取帮助): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
上面表示创建成功
fdisk -l
会发现多了一个 /dev/sdb1
创建完成 之后 进行格式化
sudo mke2fs -t ext4 /dev/sdb1
-t 文件系统类型 进行分区的目标
df -h
并没有出现 /dev/sdb1 说明不能用
挂载
qulinx@qulinx-virtual-machine:~$ mkdir -p kangbazi
sudo mount -t ext4 /dev/sdb1 ~/kangbazi/
df -h
发现多了一个/dev/sdb1
以上挂载 是临时挂载 重启或者关机以后 这个就找不到了
取消挂载
qulinx@qulinx-virtual-machine:~$ sudo umount /home/qulinx/kangbazi #一定要从 kangbazi目录退出来
永久挂载
sudo vim /etc/fstab
/dev/sdb1 /home/qulinx/kangbazi ext4 defaults 0 0
要挂载的目标 挂载的位置 文件系统类型 默认参数 0 0 (第一个0表示 是否需要备份 0 不备份 第二个0表示 是否开机检查磁盘 0表示不检查 1 表示检查 )
sudo mount -a 挂载立即生效
```
## 别名
```
ls -al 这个命令 多个地方使用
想 l 跟 ls -al 实现一样的效果
alias l='ls -al'
alias tg='tar -zxvf'
alias tb='tar -jxvf'
以上是临时别名
永久别名
yyz@yyz-virtual-machine:~$ vim ~/.bashrc
alias 别名='原来的命令'
alias l='ls -al'
yyz@yyz-virtual-machine:~$ source ~/.bashrc 让配置文件立即生效
```
## MySQL安装
```
sudo apt-get install mysql-server mysql-client libmysqlclient-dev
中间输入一次 mysql 密码 tab键切换到 确定或者ok
再输入一次
qulinx@qulinx-virtual-machine:~$ sudo netstat -ntlp | grep mysql #查看服务是否启动
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 7752/mysqld
mysql -u root -p
输入密码
show databases;
配置远程连接
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
#bind-address = 127.0.0.1 要么注释掉
bind-address = 0.0.0.0 要么将127.0.0.1 改成 0.0.0.0 允许所有的IP地址访问
保存退出
接下来 mysql -u root -p
use mysql;
grant all on *.* to root@'%' identified by '123456' with grant option;
flush privileges;
sudo ufw allow 3306
service mysql restart #重启mysql 服务
到 navicat 查看是否连接成功
```