python技术--Linux基础05

#  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  查看是否连接成功 

```

猜你喜欢

转载自blog.csdn.net/qq_42336700/article/details/82390474