⭐表示重要。

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

1.1 权限

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

权限控制系统.png

1.2 基础命令

  • 返回用户信息,检查用户是否存在:
  1. id 用户名
  • 示例:
  1. id root

检查用户是否存在.png

  • 创建用户组:
  1. groupadd 组名
  • 示例:
  1. groupadd develop

创建用户组.png

  • 创建用户:
  1. useradd -g 组名 用户名
  • 示例:
  1. useradd -g develop xudaxian

创建用户.png

  • 给用户设置密码:
  1. passwd 用户名
  • 示例:
  1. passwd xudaxian

给用户设置密码.gif

  • 删除用户:
  1. # -r 表示将用户的家目录一起删除
  2. userdel [-r] 用户名
  • 示例:
  1. userdel -r xudaxian

删除用户.png

1.3 文件权限信息说明

文件权限信息说明.png

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

权限信息分为三组.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 用户:
  1. useradd tom

chmod 示例1.gif

  • ② 给 tom 设置密码:
  1. passwd tom

chmod 示例2.gif

  • ③ 使用 tom 登录 Linux 系统:

chmod 示例3.gif

  • ④ 使用 root 账户新建文件,并修改权限:
  1. touch demo.txt
  1. chmod 600 demo.txt

chmod 示例4.gif

  • ⑤ 使用 root 账户 将 demo.txt 移动到 /tmp 目录下:
  1. mv demo.txt /tmp

chmod 示例5.gif

  • ⑥ 使用 tom 账户查看 demo.txt :
  1. cat demo.txt

chmod 示例6.gif

注意:对于可执行文件,即权限中带有 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 目录,如果没有此账户,请先自行创建:
  1. cd /opt
  1. ll

sudo 示例1.png

  • ② 使用 tom 账号新建 aaa 目录,提示权限不够:
  1. mkdir aaa

sudo 示例2.png

  • ③ 使用 sudo 命令临时提权被提示不在 sudoers 文件中:
  1. sudo mkdir aaa

sudo 示例3.gif

  • ④ 目录没有创建成功:
  1. ll

sudo 示例4.png

  • ⑤ 通过 root 账户将需要提权的 tom 普通账户加入到 /etc/sudoers 文件中:
  1. vim /etc/sudoers
  1. 99 ## Allow root to run any commands anywhere
  2. 100 root ALL=(ALL) ALL
  3. 101 tom ALL=(ALL) ALL

sudo 示例5.gif

  • ⑥ 不需要重启系统,再次使用 tom 账户在 /opt 目录下创建目录 aaa :
  1. sudo mkdir aaa

sudo 示例6.gif

  • 使用 root 账户修改 /etc/sudoers 文件:
  1. vim /etc/sudoers
  1. 99 ## Allow root to run any commands anywhere
  2. 100 root ALL=(ALL) ALL
  3. 101 tom ALL=(ALL) NOPASSWD:ALL
  • 那么,使用 sudo 命令就不需要再次输入密码了。

注意:

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

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

2.1 服务的概念

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

2.2 CentOS 6 服务

2.2.1 service 命令

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

2.2.2 chkconfig 命令

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

2.2.3 运行级别

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

2.2.4 防火墙

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

  • 示例:

  • 停止防火墙:
  1. service iptables stop

CentOS 6停止防火墙.png

  • 取消防火墙开机自动启动:
  1. chkconfig iptables off

CentOS 6设置防火墙开机不自动启动.png

2.3 CentOS 7 服务(⭐)

2.3.1 systemctl 命令

  • 启动服务:
  1. systemctl start 服务名
  • 重启服务:
  1. systemctl restart 服务名
  • 停止服务:
  1. systemctl stop 服务名
  • 重新加载服务:
  1. systemctl reload 服务名
  • 查看服务状态:
  1. systemctl status 服务名

2.3.2 systemctl 命令代替 chkconfig 命令

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

2.3.3 运行级别

  • CentOS 7 简化了运行级别。
  • 查看 CentOS 7 的运行级别:
  1. cat /etc/inittab

查看 CentOS 7 的运行级别.png

2.3.4 关闭防火墙

  • 停止防火墙:
  1. systemctl stop firewalld

CentOS 7 关闭防火墙.png

  • 取消防火墙开机自动启动:
  1. systemctl disable firewalld

CentOS 7 取消防火墙开机自动启动.png

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

3.1 概述

3.1.1 简介

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

Shell 编程概述.jpg

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

3.1.2 Linux 系统提供的 Shell 解析器

  • 查看 Linux 系统提供的 Shell 解析器:
  1. cat /etc/shells

查看 Linux 系统提供的 Shell 解析器.png

  • 其中,最常用的是 /bin/sh/bin/bash

3.1.3 bash 和 sh 的关系

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

bash 和 sh 的关系.png

  • sh 是 bash 的软链接。

3.1.4 LInux 默认的解析器

  • Linux 默认的解析器:
  1. echo $SHELL

Linux 默认的解析器.png

3.1.5 Shell 语法总述

Shell 语法总述.png

3.2 Shell 入门案例

  • 步骤:
  • ① 创建脚本文件:通常以 .sh 作为扩展名。
  • ② 脚本内容:

    • 第一行指定当前脚本的解析器:

      1. #!/bin/bash
    • 实现具体功能:

      1. echo "hello world"
  • ③ Shell 脚本的运行方式: | 命令名 | 在当前进程运行 | 新建子进程运行 | | —- | —- | —- | | source | √ | | | . | √ | | | sh | | √ | | bash | | √ | | chmod +x后直接运行 | | √ |

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

  • 示例:
  1. vim demo.sh
  1. #!/bin/bash
  2. echo "hello world"
  1. sh demo.sh

Shell 入门案例.gif

3.3 变量

3.3.1 系统预定义变量

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

  • 示例:

  1. echo $USER
  1. echo $HOME
  1. echo $PWD
  1. echo $SHELL

系统预定义变量.png

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

  • 查看所有变量:
  1. set
  • 示例:
  1. set | less

使用 set 命令查看所有变量.gif

3.3.3 自定义变量

  • ① 定义变量:
  1. USER_NAME=tom
  • 示例:
  1. USER_NAME=tom
  2. echo $USER_NAME

Shell 之定义变量.png

  • ② 撤销变量:
  1. unset USER_NAME
  • 示例:
  1. USER_NAME=tom
  2. echo $USER_NAME
  3. unset USER_NAME
  4. echo $USER_NAME

Shell 之撤销变量.png

  • ③ 声明静态变量(不能修改,不能撤销):
  1. readonly SCHOOL=suzhoudaxue
  • 示例:
  1. readonly SCHOOL=suzhoudaxue
  2. echo $SCHOOL

Shell 之声明静态变量.png

3.3.4 自定义变量的语法规则

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

3.3.5 特殊变量 $n

  • n 是数字,$0 表示当前脚本的名称,从 $1 开始代表对应的脚本参数,从 ${10} 开始数字需要使用 {} 括起来。

  • 示例:

  1. vim parameter.sh
  1. #!/bin/bash
  2. echo "$0 $1 $2"
  1. chmod 777 parameter.sh
  1. ./parameter.sh cls xz

特殊变量 $n.gif

3.3.6 特殊变量 $#

  • 返回输入参数的个数。

  • 示例:

  1. vim parameter.sh
  1. #!/bin/bash
  2. echo "$0 $1 $2"
  3. echo "$#"
  1. chmod 777 parameter.sh
  1. ./parameter.sh cls xz

特殊变量 $#.gif

3.3.7 特殊变量 $*$@

  • 都能够返回全部参数,但是只有在循环中且放在引号中能够体现出它们的区别。

  • 示例:

  1. vim parameter.sh
  1. #!/bin/bash
  2. echo "$0 $1 $2"
  3. echo "$#"
  4. echo "$*"
  5. echo $@
  1. chmod 777 parameter.sh
  1. ./parameter.sh 1 2

其他特殊变量.gif

3.3.8 特殊变量 $?

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

3.4 运算符

  • $((表达式))$[表达式]

  • 示例:

  1. echo $((1+2))
  1. echo $[1+2]

运算符.png

3.5 条件判断

  • 基本语法:
  1. test condition
  1. # condition 前后有空格
  2. # 空字符串视为 false, 非空字符串视为 true
  3. [ 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 | 判断是否存在并且是一个目录 |
  • 示例:
  1. vim demo.sh
  1. #!/bin/bash
  2. # 条件判断表达式写法一:test
  3. test 10 -gt 7
  4. # 使用$?获取上一条语句的执行结果
  5. echo $?
  6. # 使用$?获取上一条语句的执行结果
  7. test 10 -lt 7
  8. echo $?
  9. # 条件判断表达式写法二:[ condition ]
  10. # 注意:condition两边要有空格
  11. [ 10 -gt 7 ]
  12. echo $?
  13. [ 10 -lt 7 ]
  14. echo $?
  15. # 专门针对文件进行操作的运算符
  16. [ -e aaa.txt ]
  17. echo $?
  18. [ -r aaa.txt ]
  19. echo $?
  20. [ -w aaa.txt ]
  21. echo $?

3.6 流程控制

3.6.1 三目运算符

  • 语法:
  1. 条件 && 表达式1 : 表达式2
  • 示例:
  1. [ 10 -gt 5 ] && echo "10大于5" || echo "10小于5"

Shell 三目运算符.png

3.6.2 单 if 判断

  • 语法:
  1. if [ ... ]
  2. then
  3. ...
  4. fi

注意:if 后面有空格。

  • 示例:
  1. vim demo.sh
  1. #!/bin/bash
  2. if [ 10 -gt 5 ]
  3. then
  4. echo "10 大于 5"
  5. fi
  1. sh demo.sh

shell 单 if 判断.gif

3.6.3 if … else

  • 语法:
  1. if [ ... ]
  2. then
  3. ...
  4. else
  5. ...
  6. fi
  • 示例:
  1. vim demo.sh
  1. #!/bin/bash
  2. if [ 10 -gt 5 ]
  3. then
  4. echo "10 大于 5"
  5. else
  6. echo "10 小于 5"
  7. fi
  1. sh demo.sh

shell if else.gif

3.6.4 if … elif … else

  • 语法:
  1. if [ ... ]
  2. then
  3. ...
  4. elif [ ... ]
  5. then
  6. ...
  7. else
  8. ...
  9. fi
  • 示例:
  1. vim demo.sh
  1. #!/bin/bash
  2. if [ 10 -eq 5 ]
  3. then
  4. echo "10 等于 5"
  5. elif [ 10 -gt 5 ]
  6. then
  7. echo "10 大于 5"
  8. else
  9. echo "10 小于 5"
  10. fi
  1. sh demo.sh

shell if elseif else.gif

3.6.5 for 循环

  • 语法:
  1. for (( i =1;i<=10;i++ ))
  2. do
  3. echo $i
  4. done;
  • 示例:
  1. vim demo.sh
  1. #!/bin/bash
  2. # 如果要使用外部数据,则需要将外部数据赋值给一个变量,不能在for语句中直接使用
  3. len=$1
  4. for (( i=1;i<=len;i++ ))
  5. # 从do关键字开始是循环体开始
  6. do
  7. echo $1
  8. # 到done关键字为止是循环体结束
  9. done
sh demo.sh 10

shell for 循环.gif

3.6.6 for … in 循环

  • 语法:
for i in $*
do 
echo $i
done

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

  • 示例:
vim demo.sh
#!/bin/bash
for i in "$*"
do
echo $i
done
sh demo.sh 1 2 3 4 5

shell for...in 循环.gif

3.6.7 while 循环

  • 语法:
while [ ... ]
do
...
done
  • 示例:
vim demo.sh
#!/bin/bash
s=0
i=1
while [ $i -le 100 ]
do
    s=$[$s+$i]
    i=$[Si+1]
done

echo $s
sh demo.sh

shell while循环.gif

3.7 函数

  • Shell 编程中的函数和我们以前熟悉的函数最大的区别是:Shell 编程中的要求函数的返回值只能是整数,且只能通过 $? 的方式获取。可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值,return 后跟数值 n(0 - 255)。
#!/bin/bash
function sum() {
    # 使用$1、$2引用函数传入的参数
    echo $[$1+$2]
}
# 调用函数,传入参数
sum 10 20
# 使用$?获取函数执行结果
echo "sum 10 20执行的结果是$?"
  • 在函数体中,$1$2 等是对函数参数的引用。

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 的语法:
yum [选项] [参数]
  • yum 的选项: | 选项 | 说明 | | —- | —- | | -y | 对所有提问都回答“yes” |
  • 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

查询系统中已经安装的 JDK.png

  • 执行卸载,卸载过程使用 —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

执行卸载,卸载过程使用 --nodeps 忽略依赖信息.gif

  • 上面的两步,可以使用下面的命令合并为一步:
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.gif

  • ③ 配置 JDK 相关环境变量:

    • 配置环境变量的配置文件:/etc/profile。
    • 为了避免配置错误导致运行失败,提前复制一份 /etc/profile。

      cp /etc/profile /etc/profile.bak
      
    • 编辑 /etc/profile 文件,在文件末尾加上如下的内容:

      vim /etc/profile
      

      ```shell

      声明 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 文件,让文件中发布的环境变量生效,但是仅限于当前进程,如果想让新环境变量全局生效,还需要重启系统。
```shell
source /etc/profile

配置 JDK 的环境变量.gif

4.3 安装 Tomcat

  • ① 解压 Tomcat :
cd /opt
tar -zxvf apache-tomcat-8.5.73.tar.gz

解压 Tomcat.gif

  • ② 启动 Tomcat :
cd /opt/apache-tomcat-8.5.73/bin
./startup.sh

启动 Tomcat.gif

  • ③ 停止 Tomcat :
cd /opt/apache-tomcat-8.5.73/bin
./shutdown.sh

停止 Tomcat.gif

  • ④ 查看 Tomcat 日志:
cd /opt/apache-tomcat-8.5.73/logs
tail -F catalina.out

查看 Tomcat 日志.gif

  • ⑤ 访问 Tomcat (需要关闭防火墙):

访问 Tomcat.png

  • 在 Linux 系统本地使用火狐浏览器访问可以使用 localhost 。
  • 在 Windows 系统访问 Linux 服务器端的 Tomcat 需要使用 LInux 的 IP 地址。

4.4 安装 MySQL

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

卸载 mariadb.gif

注: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 。

安装 MySQL.gif

  • ③ 初始化 MySQL :
mysqld --initialize --user=mysql

初始化 MySQL.gif

  • ④ 查看 MySQL 的临时密码:
cat /var/log/mysqld.log

查看 MySQL 的临时密码.png

临时密码:BcF,lAonl0F> 。

  • ⑤ 启动 MySQL :
systemctl start mysqld

启动 MySQL.gif

  • MySQL 安装完默认是开机自动启动的,但是服务没有启动。

MySQL 安装完默认开机自动启动.png

  • ⑥ 使用临时密码登录 MySQL ,之后修改密码:
mysql -uroot -p'BcF,lAonl0F>'
set password=password('123456');

使用临时密码登录 MySQL ,之后修改密码.gif

  • ⑦ 在 MySQL 服务器端设置允许任何主机地址访问:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;

在 MySQL 服务器端设置允许任何主机地址访问.png

  • ⑧ 重启 MySQL 服务:
systemctl restart mysqld

重启 MySQL 服务.gif

  • ⑧ 解决字符乱码问题:

    • 查看字符相关变量:

      show variables like "%char%";
      

      查看字符相关变量.png

    • 编辑 /etc/my.cnf 配置文件设置 MySQL 客户端和服务端的字符集为 utf8 。

      [mysql]
      default-character-set=utf8 # 新增
      [mysqld]
      character-set-server=utf8 # 新增
      collation-server=utf8_general_ci # 新增
      

      修改 MySQL 的字符集.gif

第五章: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 模式的网段。