大纲


    首页 linus笔记 详情
    Linux 系统的管理和维护

    Linux 系统的管理和维护

    第一章:Linux 系统的权限控制

    1.1 权限

    • 权限 = 权力 + 限制。
    • 对任何计算机系统来说,我们都不能允许用户在系统中为所欲为,所以,我们必须知道 谁在什么时候对资源做了什么样的操作 ,这也是系统日志要记录的内容。不仅如此,系统还必须有能力禁止用户操作没有权限的资源。
    • 上述内容转换成 权限控制系统 中的专业术语:
    • 用户:系统使用者登录系统时使用的账号、密码等。系统通过用户来识别使用者的身份,使用者以用户的名义操作系统资源。
    • 登录:使用者想让系统任何自己的身份就必须提供账号、密码等信息,更专业的说法是:认证(Authentication)。
    • 资源:权限控制系统要保护的对象。权限控制系统必须要保存每一个资源所要求的访问权限。即使不需要任何权限,任何人都可以使用,这也是权限信息的一种描述,这类资源我们称之为公共资源。
    • 授权(Authentication):系统给用户分配权限,这些权限代码用户可以做什么。
    • 校验:一个用户访问一个资源的时候,权限控制系统必须要检查这个用户持有的资源是否满足目标资源所要求的权限。
    • 用户组:同一类的用户归到同一个组,也可以称为角色。

    1.2 基础命令

    # 返回用户信息,检查用户是否存在:
    id 用户名
    
    # 创建用户组
    groupadd 组名
    
    # 创建用户
    useradd -g 组名 用户名
    
    
    # 给用户设置密码
    passwd 用户名
    
    
    # 删除用户 -r 表示将用户的家目录一起删除
    userdel [-r] 用户名
    

    1.3 文件权限信息说明

    • 权限信息共分为三组,每组三位:

    权限信息分为三组.png

    • 下面介绍 rwx- 分别是什么意思:
    • r:读
      • 读文件:查看文件内容,例如:cat、less、tail 等命令。
      • 读目录:查看目录内容,例如:使用 ll 命令查看目录内容。
    • w:写
      • 写文件:向文件中写入新内容。
      • 写目录:在目录中增删内容,例如:在目录内新建文件、删除文件(打狗还须看主人)、新建目录、删除目录(打狗还须看主人)、给目录重命名。
    • x:执行
      • 执行文件:将文件作为可执行文件来运行。
      • 执行目录:使用 cd 命令进入目录。
    • -:无权限
    • 由于每一位要么有权限要么没有权限,所以天然可以使用二进制来表示权限信息:
    • 1:有。
    • 0:没有。 | 权限的符号表示 | 权限的二进制表示 | 权限的十进制表示 | | --- | --- | --- | | rwx r-x r-x | 111 101 101 | 7 5 5 | | rw- r-- r-- | 110 100 100 | 6 4 4 |

    1.4 chxxx 命令

    1.4.1 简介

    命令名 作用
    chmod 修改权限信息
    chown 修改文件或目录的所属主
    chgrp 修改文件或目录的所属组

    1.4.2 以 chmod 作为操作演示

    # 创建 tom 用户
    useradd tom
    # 给 tom 设置密码
    passwd tom
    # 使用 tom 登录 Linux 系统
    # 使用 root 账户新建文件,并修改权限
    touch demo.txt
    chmod 600 demo.txt
    # 使用 root 账户 将 demo.txt 移动到 /tmp 目录下
    mv demo.txt /tmp
    # 使用 tom 账户查看 demo.txt 
    cat demo.txt
    

    注意:对于可执行文件,即权限中带有 x 的文件,需要在前面加上 ./ ,方可执行。比如:现在  /tmp 目录下有 demo.sh 文件,其权限为 rwxr--r-- ,那么只要在 /tmp 目录中输入 ./demo.sh ,那么 demo.sh 就会执行,为什么?是因为需要 Linux 知道该文件的具体位置(其实是 $PATH 环境变量对应的解析器来执行的),当时输入 /tmp/demo.sh 也可以,或者使用对应的解析器 sh demo.sh。

    1.5 普通用户提升权限

    1.5.1 简介

    • 在公司参与开发的过程中,通常我们不会拿到服务器系统的 root 权限,而是普通用户权限。但是普通用户很多操作无法执行,如:在 /opt 目录下新建目录等等。

    1.5.2 操作演示

    # 使用 tom 账户在 /opt 目录下查看有没有 aaa 目录,如果没有此账户,请先自行创建:
    cd /opt
    
    #  使用 tom 账号新建 aaa 目录,提示权限不够
    mkdir aaa
    
    # 使用 sudo 命令临时提权被提示不在 sudoers 文件中
    sudo mkdir aaa
    
    # 通过 root 账户将需要提权的 tom 普通账户加入到 /etc/sudoers 文件中
    vim /etc/sudoers
      ## Allow root to run any commands anywhere 
      root    ALL=(ALL)   ALL
      tom     ALL=(ALL)   ALL
    
    # 不需要重启系统,再次使用 tom 账户在 /opt 目录下创建目录 aaa,需要输入密码
    sudo mkdir aaa
    
    # 使用 root 账户修改  /etc/sudoers 文件:使用 sudo 命令就不需要再次输入密码了
    vim /etc/sudoers
      ## Allow root to run any commands anywhere 
      root    ALL=(ALL)       ALL
      tom     ALL=(ALL)   NOPASSWD:ALL
    

    注意: - 在同一次登录中,即使不加 NOPASSWD 也只需要输入一次密码,所以 NOPASSWD 是否生效需要退出登录后再重新登录来测试。 - 使用 sudo 提权后创建的目录仍然是 root root 权限,如果有需要那就还要使用 chown 或 chgrp 来修改。

    第二章:Linux 系统的服务管理

    2.1 服务的概念

    • 操作系统中在后台持续运行的程序,本身并没有操作界面,需要通过端口号访问和操作。
    • CentOS 6 和 CentOS 7 的服务管理有很大区别

    2.2 CentOS 6 服务

    2.2.1 service 命令

    # 启动服务
    service 服务名 start
    
    # 停止服务
    service 服务名 stop
    
    #  重启服务
    service 服务名 restart
    
    # 重新加载服务
    service 服务名  reload
    
    # 查看服务状态
    service 服务名 status
    

    2.2.2 chkconfig 命令:

    # 查看服务列表
    chkconfig --list
    
    # 设置具体服务开机自动启动
    chkconfig 服务名 on
    
    # 取消具体服务开启自动启动
    chkconfig 服务名 off
    

    2.2.3 运行级别

    • CentOS 6 系统使用 0 ~ 6 这 7 个数字来控制 Linux 系统的启动方式。
    • 查看 CentOS 6 的运行级别:
    cat /etc/inittab
    
    • 运行级别:
    • 运行级别 0 :系统停机状态,系统默认运行级别不能设为 0 ,否则不能正常启动。
    • 运行级别 1 :单用户工作状态,root 权限,用于系统维护,禁止远程登陆。
    • 运行级别 2 :多用户状态(没有 NFS ),没有网络服务。
    • 运行级别 3 :完全的多用户状态(有 NFS ),登录后进入控制台命令行模式。
    • 运行级别 4 :系统未使用,保留。
    • 运行级别 5 :X11 表示控制台,进入图形界面。
    • 运行级别 6 :系统正常关闭并重启,默认运行级别不能设为 6 ,否则不能正常启动。
    • 常用的运行级别是 3 或 5
    • 控制某个服务在某个运行级别是否自动启动:
    chkconfig 服务名 --level 运行级别数值
    

    2.2.4 防火墙

    • 防火墙默认会阻止绝大部分端口号的访问,在实际生产环境下,运维工程师需要为服务器设置详细的访问规则。
    • 在练习和学习阶段,我们可以直接将防火墙关闭。由于防火墙默认开机自动启动,所以除了 停止服务 ,还需要 设置开机不自动启动
    # 停止防火墙
    service iptables stop
    
    # 取消防火墙开机自动启动
    chkconfig iptables off
    

    2.3 CentOS 7 服务(⭐)

    2.3.1 systemctl 命令

    systemctl start 服务名
    systemctl restart 服务名
    systemctl stop 服务名
    systemctl reload 服务名
    systemctl status 服务名
    

    2.3.2 systemctl 命令代替 chkconfig 命令

    # 查看服务列表
    systemctl list-unit-files
    
    # 设置具体服务开机自动启动
    systemctl enable 服务名
    
    # 取消具体服务开启自动启动
    systemctl disable 服务名
    

    2.3.3 运行级别

    • CentOS 7 简化了运行级别
    # 查看 CentOS 7 的运行级别
    cat /etc/inittab
    

    2.3.4 关闭防火墙

    # 停止防火墙
    systemctl stop firewalld
    # 取消防火墙开机自动启动
    systemctl disable firewalld
    

    第三章:Linux 系统下 Shell 脚本开发

    3.1 概述

    3.1.1 简介

    • Shell 是一个命令行解释器,它接收应用程序或用户的命令,然后调用操作系统内核。

    Shell 编程概述.jpg

    • Shell 还是一个功能强大的编程语言,易编写、易调试、灵活性强。

    3.1.2 Linux 系统提供的 Shell 解析器

    • 查看 Linux 系统提供的 Shell 解析器:
    cat /etc/shells
    
    • 其中,最常用的是 /bin/sh/bin/bash

    3.1.3 bash 和 sh 的关系

    • bash 和 sh 的关系:
    ll /usr/bin | grep bash$
    

    bash 和 sh 的关系.png

    • sh 是 bash 的软链接

    3.1.4 LInux 默认的解析器

    • Linux 默认的解析器(/bin/bash):
    echo $SHELL
    

    3.1.5 Shell 语法总述

    Shell 语法总述.png

    3.2 Shell 入门案例

    • ① 创建脚本文件:通常以 .sh 作为扩展名
    #!/bin/bash    # 第一行指定当前脚本的解析器
    
    # 实现具体功能
    echo "hello world"
    
    • ③ Shell 脚本的运行方式: | 命令名 | 在当前进程运行 | 新建子进程运行 | | --- | --- | --- | | source | √ | | | . | √ | | | sh | | √ | | bash | | √ | | chmod +x后直接运行 | | √ |

    其中,. 是 source 的另一种写法,在当前进程中发布的全局变量可以在当前进程的其他脚本中继续沿用,也可以在子进程中使用;但是,子进程 export 发布的变量仅限于子进程内部使用

    3.3 变量

    3.3.1 系统预定义变量

    • 常用的系统变量包括:$USER$HOME$PWD$SHELL 等,可以使用 echo 命令输出它们的值。
    echo $USER
    echo $HOME
    echo $PWD
    echo $SHELL
    

    3.3.2 使用 set 命令查看所有变量

    • 查看所有变量:
    set | less # less 可以分屏查看
    

    3.3.3 自定义变量

    自定义变量的 = 两边不能有空格

    # 定义变量
    USER_NAME=tom
    # 使用变量
    echo $USER_NAME
    # 撤销变量
    unset USER_NAME
    
    #  声明静态变量(不能修改,不能撤销)
    readonly SCHOOL=suzhoudaxue
    

    3.3.4 自定义变量的语法规则

    • ① 变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。
    • 等号两侧不能有空格,衍生规则就是变量声明时必须初始化
    • ③ 在 bash 中,变量默认类型都是字符串类型,无法直接进行数值运算
    • ④ 变量的值如果有空格,需要使用双引号或单引号括起来。
    • 变量名区分大小写

    3.3.5 特殊变量 $n

    • n 是数字,$0 表示当前脚本的名称,从 $1 开始代表对应的脚本参数,从   ${10} 开始数字需要使用 {} 括起来。
    # vim parameter.sh
    
    #!/bin/bash
    echo "$0 $1 $2"
    
    # 赋权
    chmod 777 parameter.sh
    
    # 执行
    ./parameter.sh cls xz
    

    3.3.6 特殊变量 $#

    • 返回输入参数的个数。
    vim parameter.sh
    
    #!/bin/bash
    echo "$0 $1 $2"
    echo "$#"
    
    chmod 777 parameter.sh
    
    ./parameter.sh cls xz
    

    3.3.7 特殊变量 $*$@

    • 都能够返回全部参数,以空格分隔开。不加引号的时候两者没区别,加引号后两者区别如下
    • $*: 会把接收到的所有参数当成一个整体对待,表示一个参数
    • $@ 会对待接收到的所有参数进行区分,独立的多个参数。
    [root@fengge sh]# cat param2.sh 
    #!/bin/bash
    # ------------------------------------------
    echo '$* print'
    for i in "$*"
        do
            echo "The parameters is: $i"
        done
    
    echo '$@ print'
    for y in "$@"
        do
            echo "The parameter$x is: $y"
        done
    
    
    [root@fengge sh]# ./param2.sh a b c d
    $* print  //将所有参数作为一个整体进行打印,只循环一次
    The parameters is: a b c d
    $@ print  //将所有参数单独处理,循环了4次
    The parameter is: a
    The parameter is: b
    The parameter is: c
    The parameter is: d
    

    3.3.8 特殊变量 $?

    • 返回上一条命令的返回结果。
    • 条件判断语句:
    • 返回 0 表示 true 。
    • 返回 1 表示 false 。
    • 普通语句:
    • 返回 0 表示成功 。
    • 返回非 0 数表示失败

    单引号、双引号、反引号的区别

    # 1. 单引号括起来的字符都作为普通字符出现,特殊字符用单引号括起来后,也会失去原有的含义,作为普通字符
    string='$PATH' # $PATH是系统变量,但是用单引号括起来,只是普通的字符
    echo $string  # 输出 $PATH
    
    # 2. 双引号括起来的字符,除了 $ ` \ 三个仍然保留原有含义,其余字符均作为普通字符对待
    # $ 变量替换
    # ` 命令替换
    # \ 转义字符
    echo "My current dir is `pwd` and logname is $LOGNAME"  
    # 输出为:My current dir is /home/hadoop and logname is hadoop
    # `pwd` 是shell命令,将输出结果返回
    # $LOGNAME 是系统变量,将变量值输出
    
    # ``括起来的内容被作为shell的命令执行,并将其标准输出的结果取代整个``部分
    
    # 综合例子
    a=1
    echo "$a"  # 1   $被bash解释到
    $ echo "'$a'"  # '1' 单引号失效
    $ echo '$a'  # $a            
    $ echo '"$a"'  # "$a"  双引号失效
    

    3.4 运算符

    • $((表达式))$[表达式]
    echo $((1+2))
    echo $[1+2]
    

    3.5 条件判断

    # 写法一
    test condition
    写法二:condition 前后有空格,空字符串视为 false, 非空字符串视为 true
    [ condition ]
    
    数据类型 写法 单词 含义
    数值 -lt less than 小于
    数值 -le less equal 小于等于
    数值 -eq equal 等于
    数值 -gt greater than 大于
    数值 -ge greater equal 大于等于
    数值 -ne not equal 不等于
    文件 -r read 判断当前用户是否可以读取该文件
    文件 -w write 判断当前用户是否可以修改该文件
    文件 -x execute 判断当前用户对该文件是否有执行权限
    文件 -f file 判断当前文件是否存在并且是一个常规的文件
    文件 -e existence 判断文件是否存在
    文件 -d directory 判断是否存在并且是一个目录
    #!/bin/bash
    
    # 条件判断表达式写法一:test
    test 10 -gt 7
    
    # 使用$?获取上一条语句的执行结果
    echo $?
    
    # 使用$?获取上一条语句的执行结果
    test 10 -lt 7
    echo $?
    
    # 条件判断表达式写法二:[ condition ]
    # 注意:condition两边要有空格
    [ 10 -gt 7 ]
    echo $?
    
    [ 10 -lt 7 ]
    echo $?
    
    # 专门针对文件进行操作的运算符
    [ -e aaa.txt ]
    echo $?
    
    [ -r aaa.txt ]
    echo $?
    
    [ -w aaa.txt ]
    echo $?
    

    3.6 流程控制

    3.6.1 三目运算符

    # 条件 && 表达式1||表达式2
     [ 10 -gt 5 ] && echo "10大于5" || echo "10小于5"
    

    3.6.2 单 if 判断

    # 注意:if 后面有空格
    if [ ... ]
    then
    ...
    fi
    
    #!/bin/bash
    if [ 10 -gt 5 ]
    then
    echo "10 大于 5"
    fi
    

    3.6.3 if ... else

    if [ ... ]
    then
    ...
    else 
    ...
    fi
    
    #!/bin/bash
    if [ 10 -gt 5 ]
    then
        echo "10 大于 5"
    else 
        echo "10 小于 5"
    fi
    

    3.6.4 if ... elif ... else

    if [ ... ]
    then
    ...
    elif [ ... ]
    then 
    ...
    else 
    ...
    fi
    
    #!/bin/bash
    if [ $1 -eq 5 ]
    then
        echo "$1 等于 5"
    elif [ $1 -gt 5 ]
    then
        echo "$1 大于 5"
    else 
        echo "$1 小于 5"
    fi
    

    3.6.5 for 循环

    for (( i =1;i<=10;i++ ))
    do
        echo $i
    done;
    
    #!/bin/bash
    # 如果要使用外部数据,则需要将外部数据赋值给一个变量,不能在for语句中直接使用
    len=$1
    for (( i=1;i<=len;i++ ))
    # 从do关键字开始是循环体开始
    do
    echo $1
    # 到done关键字为止是循环体结束
    done
    

    3.6.6 for ... in 循环

    for i in $*
    do 
        echo $i
    done
    

    没有引号的 $*$@ 一样,加了引号就有区别了。**“$*”** 不换行,**"$@"** 换行

    3.6.7 while 循环

    while [ ... ]
    do
    ...
    done
    
    #!/bin/bash
    s=0
    i=1
    while [ $i -le 100 ]
    do
        s=$[$s+$i]
        i=$[Si+1]
    done
    
    echo $s
    

    3.6.8 case

    case expression in
        pattern1)
            statement1
            ;;
        pattern2)
            statement2
            ;;
        pattern3)
            statement3
            ;;
        ……
        *)
            statementn
            ;;
    esac
    
    • case、in 和 esac 都是 Shell 关键字,expression 表示表达式,pattern 表示匹配模式
    • expression 既可以是一个变量、一个数字、一个字符串,还可以是一个数学计算表达式,或者是命令的执行结果,只要能够得到 expression 的值就可以
    • pattern 可以是一个数字、一个字符串,甚至是一个简单的正则表达式
    • case 会将 expression 的值与 pattern1、pattern2、pattern3 逐个进行匹配
    • 如果 expression 和某个模式(比如 pattern2)匹配成功,就会执行这模式(比如 pattern2)后面对应的所有语句(该语句可以有一条,也可以有多条),直到遇见双分号;;才停止;然后整个 case 语句就执行完了,程序会跳出整个 case 语句,执行 esac 后面的其它语句。
    • 如果 expression 没有匹配到任何一个模式,那么就执行)后面的语句(表示其它所有值),直到遇见双分号;;或者esac才结束。*)相当于多个 if 分支语句中最后的 else 部分

    支持的正则语法:

      • 表示任意字符串。
    • [abc] 表示 a、b、c 三个字符中的任意一个。比如,[15ZH] 表示 1、5、Z、H 四个字符中的任意一个。
    • [m-n] 表示从 m 到 n 的任意一个字符。比如,[0-9] 表示任意一个数字,[0-9a-zA-Z] 表示字母或数字。
    • | 表示多重选择,类似逻辑运算中的或运算。比如,abc | xyz 表示匹配字符串 “abc” 或者 “xyz”

    3.7 函数

    • Shell 编程中的函数和我们以前熟悉的函数最大的区别是:
    • Shell 编程中的要求函数的返回值只能是整数,且只能通过 $? 的方式获取,可以显式加:return 返回,return 后跟数值 n(0 - 255),如果超过则取255的余数
    • 如果不加,将以最后一条命令运行结果,作为返回值
    • 使用 $? 接收结果
    #!/bin/bash
    function sum() {
        return $[$1+$2]
    }
    sum 10 20
    echo "sum 10 20执行的结果是$?"
    
    • 使用变量接收结果
    # 错误示范
    #!/bin/bash
    function sum() {
        return $[$1+$2]
    }
    res=`sum 10 20`
    echo "sum 10 20执行的结果是$res"  
    
    # 用变量接收,需要用echo输出
    #!/bin/bash
    function sum() {
        echo $[$1+$2]
    }
    res=`sum 10 20`  # 可以写成 res=$(sum 10 20)
    echo "sum 10 20执行的结果是$res"
    

    3.8 获取脚本外部数据

    • ① 获取参数:通过 $1$2 等方式获取,从 ${10} 开始需要使用大括号。
    • ② 使用 read 读取用户输入,read 命令有两个常用参数:
    • 参数 -t 用于指定输入等待时间,单位是秒。
    • 参数 -p 用于指定提示文字。
    #!/bin/bash
    read -t 10 -p "please enter:" NAME
    echo $NAME
    

    第四章:服务器端应用程序安装(⭐)

    4.1 软件包管理

    4.1.1 rpm

    • rpm 是 Redhat Package Management 的缩写,实际上,通过 rpm 可以管理 Linux 环境下的安装包,类似于 Windows 里面的 setup.exe | 参数名 | 作用 | | --- | --- | | -qa | 查询系统中已经安装的程序,通常配合管道,使用 grep 精确匹配想要查询的包 | | -ivh | 执行 rpm 包安装操作 | | -e | 卸载 rpm 包 | | --nodeps | 在卸载过程中忽略依赖关系 |
    # rpm 查询命令:
    rpm -qa | grep xxx
    
    # rpm 卸载命令:
    rpm -e xxx --nodeps
    
    # rpm 安装命令
    rpm -ivh xxx
    

    4.1.2 yum

    • yum(全称为 Yellow dog Updater, Modified)是一个在 Fedora 和 RedHat 以及 CentOS 中的 Shell 前端软件包管理器。基于 RPM 包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。
    • yum 类似于 Java 中的 Maven工具。
    • yum 的语法:
    # -y 对所有提问都回答“yes”
    yum [-y] [参数]
    
    • yum 的参数说明: | 参数 | 功能 | | --- | --- | | install | 安装rpm软件包 | | update | 更新rpm软件包 | | check-update | 检查是否有可用的更新rpm软件包 | | remove | 删除指定的rpm软件包 | | list | 显示软件包信息 | | clean | 清理yum过期的缓存 | | deplist | 显示yum软件包的所有依赖关系 |

    • yum 镜像源修改:

    # 备份
    mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
    
    # 下载新的 CentOS-Base.repo 到 /etc/yum.repos.d/
    # CentOS 7
    wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
    
    # 清理缓存
    yum clean all
    
    # 生成缓存
    yum makecache
    

    4.2 安装 JDK

    4.2.1 卸载系统预装的 JDK

    • 查询系统中已经安装的 JDK :
    rpm -qa | grep jdk
    
    • 执行卸载,卸载过程使用 --nodeps 忽略依赖信息:
    rpm -e java-1.8.0-openjdk-headless-1.8.0.312.b07-1.el7_9.x86_64 --nodeps
    rpm -e copy-jdk-configs-3.3-10.el7_5.noarch --nodeps
    rpm -e java-1.8.0-openjdk-1.8.0.312.b07-1.el7_9.x86_64 --nodeps
    rpm -e java-1.7.0-openjdk-headless-1.7.0.261-2.6.22.2.el7_8.x86_64 --nodeps
    rpm -e java-1.7.0-openjdk-1.7.0.261-2.6.22.2.el7_8.x86_64 --nodeps
    
    • 上面的两步,可以使用下面的命令合并为一步:
    rpm -qa | grep jdk | xargs rpm -e --nodeps
    
    • 重启系统生效:
    reboot
    

    4.2.2 解压 JDK 的 tar 包配置环境变量

    • ① 上传 JDK 到 Linux 中的 /opt 目录 安装包.zip
    • ② 解压 JDK :
    cd /opt
    tar -zxvf jdk-8u152-linux-x64.tar.gz
    
    • ③ 配置 JDK 相关环境变量:
    • 配置环境变量的配置文件:/etc/profile。
    • 为了避免配置错误导致运行失败,提前复制一份 /etc/profile。
    cp /etc/profile /etc/profile.bak
    
    • 编辑 /etc/profile 文件,在文件末尾加上如下的内容:
    vim /etc/profile
    
    # 声明 JAVA_HOME 环境变量,等号两边不能有空格
    JAVA_HOME=/opt/jdk1.8.0_152
    
    # 给 PATH 环境变量附加 $JAVA_HOME/bin 部分
    # $PATH 表示引用 PATH 环境变量以前的旧值
    # 使用英文冒号连接
    # $JAVA_HOME 表示对 JAVA_HOME 变量的引用
    # $JAVA_HOME/bin 表示指向可执行文件
    PATH=$JAVA_HOME/bin:$PATH
    
    # 发布
    # 发布是发布变量名,不是引用变量的值,所以前面不写 $ 符号
    export JAVA_HOME PATH
    
    • 保存退出 vim 后,使用 source 命令 执行 /etc/profile 文件,让文件中发布的环境变量生效,但是仅限于当前进程,如果想让新环境变量全局生效,还需要重启系统。
    source /etc/profile
    

    4.4 安装 MySQL

    • 卸载系统预装 mariadb :
    rpm -qa | grep mariadb | xargs rpm -e --nodeps
    

    注:MySQL 被 Oracle 收购,社区担心将来 MySQL 被 Oracle 关闭开源模式,和 Oracle 数据库一样变成商业化运作。所以社区开发了一个 MySQL 的社区版,内部和 MySQL 一样,只是名字不同,这就是 mariadb。但是我们当前在 Linux 系统中已经预装的 mariadb 只是一个残片,不能直接使用。所以还是要先卸载。

    • 安装 MySQL :
    cd /opt/MySQL
    rpm -ivh 01_mysql-community-common-5.7.29-1.el7.x86_64.rpm
    rpm -ivh 02_mysql-community-libs-5.7.29-1.el7.x86_64.rpm
    rpm -ivh 03_mysql-community-libs-compat-5.7.29-1.el7.x86_64.rpm
    rpm -ivh 04_mysql-community-client-5.7.29-1.el7.x86_64.rpm
    rpm -ivh 05_mysql-community-server-5.7.29-1.el7.x86_64.rpm
    

    安装 MySQL Server的时候可能出现如下的异常: - 错误:依赖检测失败: libaio.so.1()(64bit) 被 mysql-community-server-5.7.29-1.el7.x86_64 需要。 - 通过 yum 安装缺少的依赖:yum install -y libaio 。

    • 配置:
    # 初始化
    mysqld --initialize --user=mysql
    # 查看 MySQL 的临时密码
    cat /var/log/mysqld.log
    # 启动 MySQL(MySQL 安装完默认是开机自动启动的,但是服务没有启动)
    systemctl start mysqld
    # 使用临时密码登录 MySQL ,之后修改密码
    mysql -uroot -p'BcF,lAonl0F>'
    set password=password('123456')
    # 在 MySQL 服务器端设置允许任何主机地址访问
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION
    # 重启 MySQL 服务
    systemctl restart mysqld
    # 解决字符乱码问题
    # 查看字符相关变量
    show variables like "%char%"
    # 编辑 /etc/my.cnf 配置文件设置 MySQL 客户端和服务端的字符集为 utf8
    [mysql]
    default-character-set=utf8 # 新增
    [mysqld]
    character-set-server=utf8 # 新增
    collation-server=utf8_general_ci # 新增
    

    第五章:VMWare 软件联网原理说明和故障解决

    5.1 原理

    VMWare 软件联网原理.jpg

    5.2 常见问题1:Windows 端虚拟网卡虚拟网络连接丢失

    Windows端虚拟网卡虚拟网络连接丢失.jpg

    • 修复办法:
    • ① 首先将 Linux 系统关机。
    • ② 打开 虚拟网络编辑器
    • ③ 点击 还原默认设置(不保证和之前是同一个网段,所以大概率 IP 地址网段会变) 。
    • ④ 如果修复了虚拟网卡和虚拟网络连接 。
    • 进入 Linux 系统修改 IP 地址,还是要求和虚拟网络编辑器中限定的网段一致 。
    • ⑤ 如果没有修复成功尝试下面操作:
    • 安装 CCleaner 软件 。
    • 清理注册表 。
    • ⑥ 重新进入 虚拟网络编辑器执行 还原默认设置
    • ⑦ 如果还没有解决,可以尝试卸载 VMWare 并清理残留重新安装 VMWare 。
    • ⑧ 如果还不行,重装 Windows 系统 。

    5.3 常见问题2:虚拟网络连接 IP 地址乱了

    • 虚拟网卡还在,虚拟网络连接也在,但是和 NAT 方式对应的虚拟网络连接的 IP 不是 192.168.xxx.xxx 了,而是 169.254.xxx.xxx 。此时已经没法和 Linux 的 IP 保持同一个网段了。
    • 此时唯一的办法:在虚拟网络编辑器中 还原默认设置 。让 VMWare 的虚拟网络编辑器重置网络连接。

    5.4 常见问题3:各方面正常就是连不上

    • 检查一下是不是 Windows 系统中 VMware 的服务没有启动,如果是就把服务启动起来。或 Linux 网卡使用的是仅主机模式,而 Linux 中 IP 地址使用的是 NAT 模式的网段。
    评论
    您尚未登录,请 登录 后评论
    共 0 条评论 | 欢迎尬评