day02 linux常用命令

news2024/11/29 10:53:13

day02 linux

第一章 Linux常用命令

第一节 进程相关命令

1. 查看进程状态

1.1 命令的使用

ps命令是用于查看进程状态的命令,它常和e参数(对应单词entire,表示全部。具体指显示系统中全部的进程信息。),以及f参数(对应单词full-formate,表示完整格式。) 一起使用

在这里插入图片描述

进程信息中各列数据的说明:

列名含义
UID进程的用户信息
PID进程id。由系统分配,不会重复。
PPID父进程的id。父进程和子进程的关系是:父进程启动了子进程。
CMD当前进程所对应的程序。
C用整数表示的CPU使用率
STIME进程启动时间
TTY进程所在终端。所谓终端就是用户输入命令的操作界面。
TIME进程所占用的CPU时间
1.2 父进程和子进程之间的关系

简单来说,父进程和子进程的关系是:父进程启动了子进程。我们可以使用pstree命令查看整个进程树。

在这里插入图片描述

1.3 和其它命令配合一起查看进程
1.3.1 分屏查看进程信息

全部进程的信息太多了,一屏无法全部显示,所以我们希望可以分屏显示并由我们来控制翻页。为了达到这个目标,我们可以使用管道符号将ps -ef命令的输出数据传送给less命令。 ps -ef | less

1.3.2 精确查询一个具体进程信息

我们通过Xshell远程连接Linux系统,靠的是sshd这个服务。这个服务如果正在运行中,那么一定会有这个服务对应的进程。所以下面我们来查询一下sshd这个命令的进程。
在这里插入图片描述

我们看到这里返回了3条结果,其中前两天都是和sshd服务相关的结果,但是最后一条不是。

root 72826 3456 0 20:06 pts/0 00:00:00 grep --color=auto sshd

仔细观察一下就能发现,这其实是grep命令本身。因为grep命令运行过程中本身也是一个进程,“grep sshd”正好也匹配sshd,所以就被选中了。但是这是一个干扰项,并不是我们真正要查询的内容,所以需要把它从查询结果中排除。
在这里插入图片描述

再用一层管道,使用grep命令的-v参数把匹配grep的行排除,返回不匹配的结果,这就是我们最终想要的。

2. 杀死进程

2.1 命令的使用

kill -9 进程id表示杀死指定id的进程

2.2 举例
  1. 打开Linux内置的火狐浏览器
    在这里插入图片描述

  2. 查看火狐浏览器的进程id
    在这里插入图片描述

    另外一个是浏览器插件,不用管。

  3. 使用kill命令结束火狐浏览器进程: kill -9 3325

3. 实时查看系统运行情况和健康状态(了解)

3.1 命令和参数
命令名更新时间间隔(秒)不显示任何闲置或者僵死进程通过进程id监控单一进程
top-d 间隔秒数-i-p 进程id

在这里插入图片描述

3.2 按键操作
按键功能
P默认值,根据CPU使用率排序
M以内存的使用率排序
N以PID排序
d设置数据刷新的时间间隔,单位是秒
q退出
3.3 查询结果的字段解释
3.3.1 第一行信息为任务队列信息
内容举例说明
12:26:49系统当前时间
up 1 day, 13:32系统的运行时间,前面例子表示本机已经运行1天13小时32分钟
2 users当前登录了2个用户
load average:0.00, 0.00, 0.00系统在之前1分钟,5分钟,15分钟的平均负载。 一般认为小于1时,负载较小。如果大于1,系统已经超出负荷。
3.3.2 第二行为进程信息
内容举例说明
Tasks: 95 total系统中的进程总数
1 running正在运行的进程数
94 sleeping睡眠的进程
0 stopped正在停止的进程
0 zombie僵尸进程。如果不是0,需要手工检查僵尸进程
3.3.3 第三行为CPU信息
内容举例说明
Cpu(s):0.1%us用户空间占用的CPU百分比,us对应user
0.1%sy内核空间占用的CPU百分比,sy对应system
0.0%ni改变过优先级的进程占用的CPU百分比,ni对应niced
99.7%id空闲CPU的CPU百分比
0.1%wa等待输入/输出的进程的占用CPU百分比,wa对应IO wait
0.0%hi硬中断请求服务占用的CPU百分比,hi对应hardware IRQ
0.1%si软中断请求服务占用的CPU百分比,si对应software IRQ
0.0%stst(Steal time)虚拟时间百分比,也叫被hypervisor偷走的时间。 就是当有虚拟机时,虚拟CPU等待实际CPU的时间百分比。
3.3.4 第四行为物理内存信息
内容举例说明
2031912 total物理内存的总量,单位KB
70496 free空闲的物理内存数量
1780676 used已经使用的物理内存数量
174864 buff/cache作为缓冲的内存数量

使用中的内存总量(used)指的是现在系统内核控制的内存数,空闲内存总量(free)是还未纳入内核管控范围的数量。

纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存还给free,因此Linux系统运行过程中free内存会越来越少,但不影响系统运行。因为这表示更多的空闲内存被内核管理了。

3.3.5 第五行为交换分区(swap)信息
内容举例说明
2097148 total交换分区(虚拟内存)的总大小
1137824 free空闲交换分区的大小
959324 used已经使用的交互分区的大小
58640 avail Mem在不交换的情况下,对启动新应用程序可用内存的估计

交换分区是一个非常值得关注的地方,如果swap区的used数值持续发生变化那么说明在内核和交换分区之间正在持续发生数据交换,这表示内存不够用了——必须不断把内存中的数据保存到硬盘上。

4. 查看网络状态命令(了解)

4.1 命令和参数

netstat命令是查看网络状态,常用参数列表如下:

参数名作用
-a显示所有正在或不在侦听的套接字。
-n显示数字形式地址而不是去解析主机、端口或用户名。
-p显示套接字所属进程的PID和名称。

常用: netstat -anp

4.2 查询结果的解释

netstat命令显示的网络状态信息包含两部分内容:

  • 本机和外部的连接状态信息(重点)
    在这里插入图片描述
  • 本机系统内部进程间通信信息(了解)
    在这里插入图片描述
4.3 使用技巧
4.3.1 分屏查看网络状态

netstat -anp | less

4.3.2 根据进程名称查看网络状态

netstat -anp | grep sshd

4.3.3 根据端口号查看网络状态

netstat -anp | grep :22

这里需要注意一下,端口号本身就是一串数字,进程id也是一串数字。那么根据端口号匹配时,很多无关的进程id也会被匹配到,造成大量不必要的干扰。此时给端口号数字前加上冒号就好多了。

第二节 字符串处理的命令

1. basename

返回路径字符串中的资源(文件或目录本身)部分
在这里插入图片描述

如果指定了后缀,basename会帮我们把后缀部分也去掉
在这里插入图片描述

2. dirname

返回路径字符串中的目录部分
在这里插入图片描述

注意: 这里dd是文件

3. cut

根据指定符号拆分字符串并提取。默认根据 \t 拆分。

  • -f 参数:指定要提取的列
  • -d 参数:指定拆分依据的字符

准备测试数据:
在这里插入图片描述

切割提取第一列:
在这里插入图片描述

切割提取第二、第三列:
在这里插入图片描述

选取系统 PATH 变量值,第2个 “:” 开始后的所有路径:
在这里插入图片描述

切割ifconfig 后打印的IP地址:
在这里插入图片描述

另一种做法:
在这里插入图片描述

4. sort

sort命令是在Linux里非常有用,它将文件进行排序,并将排序结果标准输出。

参数名作用
-n依照数值大小排序
-r相反顺序排序
-t设置排序时使用的分隔字符
-k指定需要排序的列

在这里插入图片描述

第二章 Linux权限管理

第一节 权限管理中的专业术语

1. 用户

系统使用者登录系统时使用的账号、密码。系统通过“用户”来识别使用者的身份。使用者以“用户”的名义操作系统资源。

2. 登录

使用者想要让系统认可自己的身份就必须提供账号、密码等信息。更专业的说法是:“认证(authentication)”。

3. 资源

权限控制系统要保护的对象。权限控制系统中必须要保存每一个资源所要求的访问权限。哪怕是“不需要任何权限,任何人都可以使用”也是权限信息的一种描述——没有要求也是一种要求。

4. 授权

authorization,系统给用户分配权限。这些权限代表了用户可以做什么。

5. 校验

一个用户访问一个资源的时候,权限控制系统必须要检查这个用户持有的权限是否满足目标资源所要求的权限。

6. 用户组

同一类的用户归到同一个组,也可以叫做角色。

在这里插入图片描述

第二节 创建用户和用户组的基本命令

命令作用
groupadd 组名创建用户组
id 用户名返回用户信息,检查用户是否存在
useradd -g 组名 用户名创建用户,同时指定所属用户组
passwd 用户名给用户账号设置密码

第三节 文件权限

1. 文件权限信息说明

在这里插入图片描述

权限信息共分三组,每组三位:
在这里插入图片描述

下面介绍rwx-分别是什么意思:

  • r:读(read)

    • 读文件:查看文件内容

      例如:cat、less、tail等命令

    • 读目录:查看目录内容

      例如:使用ll命令查看目录内容

  • w:写(write)

    • 写文件:向文件中写入新内容

    • 写目录:在目录里面增删内容

      例如:在目录内新建文件、删除文件、新建目录、删除目录给目录重命名

  • x:执行(execute)

    • 执行文件:把文件当作可执行文件来运行
    • 执行目录:使用cd命令进入目录
  • -:无权限

由于每一位要么有权限要么没有权限,所以天然可以使用二进制来表示权限信息:

  • 1:有
  • 0:无
权限的符号表示权限的二进制表示权限的十进制表示
rwx r-x r-x111 101 1017 5 5
rw- r-- r–110 100 1006 4 4

2. 修改文件权限

2.1 命令介绍
命令名作用
chmod修改权限信息
chown修改文件或目录的所属用户
chgrp修改文件或目录的所属用户组
2.2 演示chmod命令
2.2.1 修改权限信息前

在这里插入图片描述

2.2.2 添加权限

增加执行权限

chmod +x fruit/content

添加权限信息后
在这里插入图片描述

2.2.3 删除权限

删除执行权限

chmod -x fruit/content

删除权限信息后
在这里插入图片描述

2.2.4 修改权限

方法1: chmod 三位数字

这三位数字分别表示: 拥有者的权限、同组用户的权限、其它用户的权限

r:是4; w:是2;x:是1

例如chmod 755 fruit/content 表示将权限设置为:
在这里插入图片描述

方法2: chmod u=rwx,g=rx,o=rx,其中u表示拥有者,g表示同组用户,o表示其它用户

第四节 提升普通用户的权限(sudo)

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

提升普通用户的权限其实就是赋予普通用户那些超级管理员才有的权限,我们需要在 /etc/sudoers.d/中创建配置文件my-sudoers,这样相比直接在/etc/sudoers中修改更安全

luozhixiang ALL=(ALL)   ALL

不需要重启系统,我们再次测试:
在这里插入图片描述

但此时我们发现,每次使用sudo都需要输入密码,很麻烦,所以我们可以在/etc/sudoers中进行配置

luozhixiang ALL=(ALL)   NOPASSWD:ALL

这样再使用sudo命令就不需要输入密码了

这里有两点需要注意:

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

第三章 Linux系统的服务管理

第一节 服务的概念

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

第二节 CentOS6的服务(了解)

1. service命令

启动服务:service 服务名 start

停止服务:service 服务名 stop

重启服务:service 服务名 restart

重新加载服务:service 服务名 reload

查看服务状态:service 服务名 status

2. chkconfig命令

查看服务列表:chkconfig [–list]

设置具体服务开机自动启动状态:chkconfig 服务名 on/off

3. 防火墙

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

服务名:iptables

停止防火墙:service iptables stop

设置开机不自动启动:chkconfig iptables off

第三节 CentOS7的服务

1. systemctl命令

启动服务:systemctl start 服务名(xxxx.service)

重启服务:systemctl restart 服务名(xxxx.service)

停止服务:systemctl stop 服务名(xxxx.service)

重新加载服务:systemctl reload 服务名(xxxx.service)

查看服务状态:systemctl status 服务名(xxxx.service)

2. systemctl命令代替chkconfig命令

查看服务状态:systemctl list-unit-files

设置或取消服务开机自动启动:

  • 设置开机自动启动:systemctl enable 服务名

  • 取消开机自动启动:systemctl disable 服务名

3. 防火墙的操作

  • 开启防火墙 systemctl start firewalld
  • 重启防火墙 systemctl restart firewalld
  • 关闭防火墙systemctl stop firewalld
  • 设置开机启动systemctl enable firewalld
  • 停止并关闭开机启动systemctl disable firewalld
  • 查看防火墙状态systemctl status firewalld 或者 firewall-cmd --state
  • 查看防火墙开机时是否启动systemctl list-unit-files | grep firewalld

4. 防火墙端口设置

  • 开放端口 firewall-cmd --add-port=端口号/tcp --permanent

  • 更新防火墙规则firewall-cmd --reload

  • 查看

    firewall-cmd --zone=public --query-port=端口号/tcp 查看某个端口是否放行
    firewall-cmd --zone=public --list-ports 查看所有放行的端口号

  • 取消端口开放 firewall-cmd --remove-port=端口/tcp --permanent

  • 常用端口

    • 8080 tomcat
    • 80 http协议
    • 443 https协议
    • 22 ssh远程连接
    • 3306 mysql
    • 6379 redis

第四章 Linux下的Shell脚本开发

第一节 Shell编程概述

Shell是一个命令行解释器,它接收应用程序或用户的命令,然后调用操作系统内核。 它是一个功能强大的编程语言,易编写、易调试、灵活性强

在这里插入图片描述

第二节 Linux系统提供的Shell解析器

在这里插入图片描述

其中最常用的是 /bin/sh 和 /bin/bash

1. bash 和 sh 的关系

在这里插入图片描述

sh是bash的软链接 ,Linux默认使用的是bash

第三节 Shell编程入门

1. 创建脚本文件

使用touch命令创建脚本文件, 通常以.sh作为扩展名

2. 编写脚本内容

第一行通常指定脚本解析器

#!/bin/bash
echo "hello world"

3. 脚本文件的运行方式

命令名在当前进程运行新建子进程运行
source
.
sh
bash
chmod +x后直接运行

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

第四节 Shell的语法

1. 变量

1.1 系统预定义变量

常用系统变量包括:$USER$HOME$PWD$SHELL等,可以使用echo命令输出它们的值。使用set命令可以查看所有系统预定义变量

1.2 自定义变量
1.2.1 定义变量
USER_NAME=tom
1.2.2 输出变量
echo $USER_NAME
1.2.3 撤销变量
unset USER_NAME
1.2.4 定义静态变量
readonly COMPANY_NAME=atguigu

静态变量不能撤销,也不能修改

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

n是数字,$0代表当前脚本名称。从$1开始代表对应的脚本参数。从${10}开始数字需要使用{}括起来。
在这里插入图片描述

1.3.2 $#

返回输入参数的个数
在这里插入图片描述

1.3.3 $*和$@

都能够返回全部参数,但是只有在循环中且放在引号中能够体现出它们的区别。
在这里插入图片描述

1.3.4 $?

返回上一条命令的执行结果。

  • 条件判断语句
    • 返回 0 表示 true
    • 返回 1 表示 false
  • 普通语句
    • 返回 0 表示成功
    • 返回非 0 数表示失败

2. 运算符

Shell的运算表达式的语法如下: $((表达式))$[表达式]
在这里插入图片描述

3. 条件判断

3.1 基本语法
  • 写法1:test condition
  • 写法2:[ condition ]
    • 注意 condition 前后有空格
    • 空字符串视为 false,非空字符串视为 true
3.2 常用判断条件
数据类型写法单词含义
数值-ltless than小于
数值-leless equal小于等于
数值-eqequal等于
数值-gtgreater than大于
数值-gegreater equal大于等于
数值-nenot equal不等于
文件-rread判断当前用户是否可以读取该文件
文件-wwrite判断当前用户是否可以修改该文件
文件-xexecute判断当前用户对该文件是否有执行权限
文件-ffile判断当前文件是否存在并且是一个常规的文件
文件-eexistence判断文件是否存在
文件-ddirectory判断是否存在并且是一个目录

可以参考下面例子:

#!/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 $?

4. 流程控制

4.1 三元运算

在这里插入图片描述

4.2 if判断
4.2.1 单if
if [ 10 -gt 5 ]
then
echo "10大于5"
fi
4.2.2 if…else…
if [ 10 -gt 5 ]
then
echo "10大于5"
else
echo "10小于5"
fi
4.2.3 if…elif…
if [ 10 -gt 5 ]
then
echo "10大于5"
elif [ 10 -lt 5 ]
then
echo "10小于5"
else
echo "10等于5"
fi
4.3 case判断
AGE=10
case $AGE in
"10")
echo 10
;;
"20")
echo 20
;;
*)
echo other
;;
esac

在这里插入图片描述

4.4 for循环

简单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 $i;

# 到done关键字为止是循环体结束
done
4.5 for in循环
for i in $*
do
echo $i
done

没有引号的时候 ∗ 和 *和 @一样,加了引号就有区别

for i in "$*"
do
echo $i
done

上面代码输出的结果是:
在这里插入图片描述

"$*“会将所有元素当成一个值处理,”$@"将所有元素每一个都遍历一次进行处理。

4.6 while循环
sum=0
start=1
while [ $start -le 100 ]
do
# 累加
sum=$[$sum+$start]
# start的值自增1
start=$[$start+1]
done
echo $sum

5. 函数

Shell 编程中的函数和我们以前熟悉的函数最大的区别是:Shell 编程中要求函数的返回值只能是整数。并且只能通过 $? 方式获得。可以显示加:return 返回,如果不加,将以最后一条命令运行结果(这个运算结果可以表示true或者false,以及执行成功或者执行失败),作为返回值。return 后跟数值 n(0-255)。

#!/bin/bash
# 声明函数
function sum(){
	# 使用$1、$2引用函数传入的参数
	return $[$1+$2]
}

# 调用函数,传入参数
sum 10 20

# 使用$?获取函数执行结果
echo "sum 10 20执行的结果是$?"

6. 获取脚本外部数据

6.1 获取参数

这个前面说过了,通过$1、$2、……方式获取,从${10}开始需要使用大括号。

6.2 使用read读取用户输入

read命令有两个常用参数

  • -t用于指定输入等待时间,单位是秒
  • -p用于指定提示文字
read -t 10 -p "please enter:" NAME
echo $NAME

第五章 服务器端应用程序的安装

第一节 备份配置文件

Linux 系统环境下配置文件通常内容很多。如果不小心修改了不该修改的地方,自己有不记得做了修改,那么将来报错很难找到错误位置。

为了避免这样的问题,我们可以在修改任何配置文件之前都多复制一份:把原始、纯净、正确的配置文件执行了备份。将来万一发生问题,拿原始配置文件覆盖错误配置文件,瞬间恢复到正确状态可以重新开始。

第二节 快照备份虚拟机

1. 使用场景

1.1 场景一

针对需要通过安装过程来安装的程序,如果安装失败需要卸载后重新安装,那最好是卸载干净再重新执行安装。Linux 环境下不方便执行『清理残留』。

所以为了避免安装失败以后没有退路可以重新开始,建议在执行相关安装之前拍摄快照。一旦发生问题,可以恢复快照重新开始。

1.2 场景二

对于已经安装好的程序(特别是系统当中安装了很多程序都已成功),强烈建议通过拍摄快照的方式保留这个正确的状态。

2. 具体操作

2.1 保存快照

在这里插入图片描述

给快照文件命名:
在这里插入图片描述

2.2 恢复快照

在这里插入图片描述

2.3 删除快照

在这里插入图片描述

第三节 安装JDK

1. rpm命令

rpm 是 Redhat package management 的缩写,实质上来说,通过 rpm 可以管理 Linux 环境下的安装包。

参数名作用
-qa查询系统中已经安装的程序,通常配合管道,使用 grep 精确匹配想要查询的包
-ivh执行 rpm 包安装操作
-e卸载 rpm 包
–nodeps在卸载过程中忽略依赖关系

注:Linux 系统中命令的参数往往有这样的特点:

  • 参数如果是一个或多个完整的单词那么前面是两个“-”
  • 参数如果是单词的缩写,是一个字母,那么前面是一个“-”

2. 具体安装步骤

2.1 卸载系统预装的JDK
  1. 查询系统中已经安装的 JDK

    rpm -qa | grep openjdk
    
  2. 执行卸载,卸载过程中使用 --nodeps 忽略依赖关系

    rpm -e --nodeps 第一步查询出来的数据,如果是多个则用空格分隔
    
2.2 安装JDK
  1. 使用xftp将资料中的jdk的压缩包传输到虚拟机的/opt目录中
    在这里插入图片描述

  2. 解压jdk压缩包

    cd /opt
    tar -zxvf jdk-8u152-linux-x64.tar.gz
    
  3. 配置JDK的环境变量

    为了避免配置错误导致运行失败,进入/etc/profile.d目录中创建一个文件myprofile.sh

    profile会自动获取myprofile.sh中的配置信息

    touch /etc/profile.d/myprofile.sh
    

    编辑/etc/profile.d/myprofile.sh 文件(下面内容添加到文件末尾):

    # 声明 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脚本,让脚本中发布的环境变量生效。但是仅限于当前进程,如果想让新环境变量全局生效,可以reboot。

    source /etc/profile
    

    验证一下:

    echo $JAVA_HOME
    echo $PATH
    java -version
    

第四节 安装Tomcat

1. 具体安装步骤

  1. 使用xftp将资料中的Tomcat的压缩包传输到虚拟机的/opt目录中
    在这里插入图片描述

  2. 解压Tomcat的压缩包

    cd /opt
    tar -zxvf /opt/apache-tomcat-8.5.32.tar.gz
    

2. 操作Tomcat

  1. 启动 Tomcat

    /opt/apache-tomcat-8.5.32/bin/startup.sh
    
  2. 停止 Tomcat

    /opt/apache-tomcat-8.5.32/bin/shutdown.sh
    
  3. 查看日志

    tail -F /opt/apache-tomcat-8.5.32/logs/catalina.out
    
  4. 如果要部署项目,将部署 war 包放在 webapps 目录下(这一步不一定要去做)

    /opt/apache-tomcat-8.5.32/webapps
    

注意:

  • 在 Linux 系统本地使用火狐浏览器访问可以使用 localhost
  • 在 Windows 系统访问 Linux 服务器端的 Tomcat 需要使用 LInux 的 IP 地址,并且要保证防火墙关闭,或者放行了8080端口

开发阶段可以关闭防火墙,关闭防火墙的命令:

systemctl stop firewalld.service

在开发阶段可以禁止防火墙开机自启动:systemctl disable firewalld.service

让防火墙放行8080端口的命令:

firewall-cmd --add-port=8080/tcp --permanent
# 放行端口后一定要重新加载防火墙配置
firewall-cmd --reload

第三节 安装MySQL(安装之前一定要快照)

1. 卸载系统预装 mariadb

  1. 查询系统中预装的mariadb

    rpm -qa | grep mariadb
    
  2. 删除系统中预装的mariadb(如果第一步没查到就不删)

    rpm -e --nodeps 第一步查询到的结果
    

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

2. 具体安装步骤

2.1 将mysql的压缩包拷贝到虚拟机中
  1. 在虚拟机中的/usr/local中创建一个mysql目录

    mkdir /usr/local/mysql
    
  2. 使用xftp将mysql压缩包拷贝到/usr/local/mysql目录中
    在这里插入图片描述

2.2 解压MySQL的tar包
cd /usr/local/mysql
tar -zxvf mysql-5.7.25-1.el7.x86_64.rpm-bundle.tar.gz
2.3 安装MySQL,下述步骤依次执行
rpm -ivh mysql-community-common-5.7.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-devel-5.7.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-compat-5.7.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.25-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.25-1.el7.x86_64.rpm
2.4 修改MySQL的字符集配置

MySql默认使用的字符集是latin1,即:iso-8859-1,是不支持中文的。

要想让MySql支持中文,需要通过配置文件设置指定MySql使用utf-8字符集才可以。

修改MySql的字符集:

使用vim打开mysql的配置文件: vim /etc/my.cnf

进入编辑模式,在[mysqld]下边添加内容:character-set-server=utf8

注意:别在 vim 的一般模式下直接粘贴!一定要进入编辑模式

2.5 启动MySQL服务
systemctl start mysqld
2.6 设置MySQL服务开机自启动
systemctl enable mysqld
2.7 查看MySQL初始密码

安装MySQL的过程中会自动生成初始密码,我们可以在/var/log/mysqld.log文件中进行查看

cat /var/log/mysqld.log | grep "temporary password" --color

在这里插入图片描述

2.8 使用初始密码登录MySQL
mysql -uroot -p'初始密码'

注意: p和初始密码之间千万不能空格

2.9 修改root的密码

在使用初始密码登录mysql之后,依次执行下面三行命令

set global validate_password_length=4;
set global validate_password_policy=LOW;
set password = password('root');

第一次修改密码一定要按照上述三步来做,修改完之后你如果想将密码改成其它的密码,你可以在退出mysql之后执行(需要在未登录mysql的情况下执行):

mysqladmin -uroot -p password 新密码  -- 新密码不需要加上引号

3. 在宿主机上用SqlYog远程连接虚拟机上的MySQL

3.1 会遇到的问题
3.1.1 被防火墙拦截

在这里插入图片描述

解决方案是关闭防火墙或者是让防火墙放行3306端口

关闭防火墙命令:

systemctl stop firewalld.service

放行3306端口的操作:

firewall-cmd --add-port=3306/tcp --permanent
# 放行端口后一定要重新加载防火墙配置
firewall-cmd --reload
3.1.2 MySQL服务器不允许远程访问

在这里插入图片描述

解决方案是让root用户能够远程访问MySQL服务器:

# 允许远程访问:创建一个新的root对象,并且指定这个root对象对所有数据库里面的所有表都有所有权限,并且指定这个root用户的密码是123456
grant all on *.* to 'root'@'%' identified by '123456';
# 刷新设置
flush privileges;

解决上述俩问题之后,就可以使用宿主机中的SQLYog远程连接访问虚拟机中的MySQL了

第六章 VMWare软件联网原理说明与故障解决

第一节 NAT的原理

在这里插入图片描述

NAT模式,利用虚拟的NAT设备以及虚拟DHCP服务器来使虚拟机连接外网,而VMware Network Adapter VMnet8虚拟网卡是用来与虚拟机通信的。

第二节 常见的问题

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

也就是在你的网络连接中丢失了VMware Network Adapter VMnet8虚拟网卡

修复办法:

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

2. 虚拟网络连接IP地址乱了

虚拟网卡还在,虚拟网络连接也在,但是和 NAT 方式对应的虚拟网络连接的 IP 不是 192.168.xxx.xxx 了,而是169.254.xxx.xxx。此时已经没法和 Linux 的 IP 保持同一个网段了。

此时唯一的办法:在虚拟网络编辑器中“还原默认设置”。让 VMWare 的虚拟网络编辑器重置网络连接。

3. 各方面正常就是连不上

检查一下是不是 Windows 系统中 VMware 的服务没有启动,如果是就把服务启动起来。或虚拟机网卡使用的是仅主机模式,而 Linux 中 IP 地址使用的是 NAT 模式的网段。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/41523.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Node.js 入门教程 13 在 Node.js 中从命令行接收输入

Node.js 入门教程 Node.js官方入门教程 Node.js中文网 本文仅用于学习记录&#xff0c;不存在任何商业用途&#xff0c;如侵删 文章目录Node.js 入门教程13 在 Node.js 中从命令行接收输入13 在 Node.js 中从命令行接收输入 如何使 Node.js CLI 程序具有交互性&#xff1f; 从…

卡塔尔世界杯--程序员的诗和远方

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; 卡塔尔世界杯–程序员的诗和远方 2022年卡塔尔世界杯&#xff08;FIFA World Cup Qatar 2022&#xff09;第二十二届世界杯足球赛&#xff0c;历史上首次在卡塔尔和中…

【学习笔记44】JavaScript的事件传播

JavaScript的事件传播一、事件传播1、事件传播的说明2、阻止事件传播二、目标冒泡捕获1、冒泡2、捕获三、事件委托1、事件委托的说明2、为什么要用事件委托四、阻止默认事件1、方法一2、方法二一、事件传播 在触发子元素的事件时, 会将行为传播给父级的同类型事件触发了子元素的…

机器学习1综述

文章目录一、综述学习环境&#xff1a;二、机器学习方法的分类1、监督学习&#xff1b;2、非监督学习&#xff1b;3、半监督学习&#xff1b;4、增强学习&#xff1b;三、机器学习方法分类2、批量学习&#xff08;离线学习&#xff09;Batch Learing&#xff1b;3、参数学习&am…

二叉树的递归问题

目录 一、相同的树 二、另一棵树的子树 三、翻转二叉树 四、平衡二叉树 五、对称二叉树 一、相同的树 给你两棵二叉树的根节点 p 和 q &#xff0c;编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同&#xff0c;并且节点具有相同的值&#xff0c;则认为它们是…

【毕业设计-课程设计】-超声波测距

资源链接在文章最后,订阅查看获取全部内容及资料,如需可私信提供硬件。 目 录 1 绪论 2 1.1 项目研究背景及意义 2 2 总体设计方案及论证 2 2.1 总体方案设计 2 3 硬件实现及单元电路设计 3 3.1 主控制模块 3 3.2 电源设计 4 3.3 超声波测试模块 4 3.3.1 超声波的特性 5 3.3…

【Python】顺序、条件、循环语句

文章目录一. 顺序语句二. 条件语句1. 什么是条件语句2. 缩进和代码块3. 空语句 pass4. 练习三. 循环语句1. while 循环2. for 循环一. 顺序语句 默认情况下&#xff0c;Python 的代码执行顺序&#xff0c;是从上到下依次执行的&#xff1a; 执行结果一定为 “123”&#xff0…

【工具门户】Backstage配置使用PostgreSQL(三)

先决条件 If the database is not hosted on the same server as the Backstage app, the PostgreSQL port needs to be accessible (the default is 5432 or 5433) PostgreSQL数据库默认端口为5432或5433,如果数据库与Backstage应用不在同一台机器上,需开放PostgreSQL端口…

MyBatis框架一二级缓存含代码演示

目录 1.什么是缓存? 2. Mybatis的一级缓存 2.1实验一: 2.2实验二: 3.Mybatis的二级缓存 3.1 二级缓存需要配置才可以使用: 3.2 实验开始&#xff01;&#xff01; 4.总结 1.什么是缓存? 缓存就是数据交换的缓冲区&#xff08;称作Cache&#xff09;&#xff0c;当某一…

学习Python中turtle模块的基本用法(2:基本绘图函数测试)

个人感觉turtle模块中的绘图函数是按人手拿着画笔一笔一画地画图的思路定义的&#xff0c;这与C#中的GDI函数、html5中canvas的绘图函数及Tkinter中Canvas的绘图函数的定义思路存在差异&#xff0c;但也能完成后面绝大部分的绘图功能&#xff08;目前看到的turtle文章及帮助文档…

安装OpenGL

提示错误信息&#xff1a; (base) C:\Users\Tina\PycharmProjects\FunnyToys-main>conda install opengl Collecting package metadata (current_repodata.json): done Solving environment: failed with initial frozen solve. Retrying with flexible solve. Collecting…

python 栈空间不足异常 Process finished with exit code: -1073741571

问题现象 在pycharm使用debug模式调试代码时&#xff0c;异常退出&#xff0c;且错误码为-1073741571。除了错误码外&#xff0c;并没有看到其它报错。 分析 查阅资料&#xff1a; Process finished with exit code -1073741571 (0xC00000FD) when trying to implement ab…

AxureRP9的新特性介绍和技巧分享

AxureRP自去年8月第一个测试版本发布以来&#xff0c;已经一年多了&#xff0c;官方版本已经发布了近半年&#xff0c;但这个版本的用户声誉是褒贬不一的。许多用户反馈了他们对新版本的喜欢和肯定&#xff0c;但一些老用户仍然不愿意接受它&#xff0c;甚至保持抵制。 根据我…

【Hack The Box】linux练习-- Tabby

HTB 学习笔记 【Hack The Box】linux练习-- Tabby &#x1f525;系列专栏&#xff1a;Hack The Box &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f4c6;首发时间&#xff1a;&#x1f334;2022年11月22日&#x1f334; &#x1f36…

【数据结构】基础:二叉树

【数据结构】基础&#xff1a;二叉树基础 摘要&#xff1a;本文将会介绍二叉树的基础内容&#xff0c;首先引入树的概念&#xff0c;了解树的基本概念与性质&#xff0c;再对二叉树的概念和性质进行分析&#xff0c;最后对其方法进行实现&#xff0c;最重要的是理解对于二叉树方…

世界65个国家贸易开放度数据 2005-2019年

一、数据介绍 数据名称&#xff1a;UNtrade数据库 数据年份&#xff1a;2005-2019年 数据范围&#xff1a;世界65个国家 数据来源&#xff1a;各地方统计局 部分数据如下&#xff1a; 二、参考文献 用途&#xff1a;研究人民币实际汇率与贸易差额之间的关系等。 [1]卢向…

R语言文本挖掘tf-idf,主题建模,情感分析,n-gram建模研究

数据集中的Usenet公告板包括新汽车&#xff0c;体育和密码学等主题。最近我们被客户要求撰写关于主题建模的研究报告&#xff0c;包括一些图形和统计输出。我们对20个Usenet公告板的20,000条消息进行分析。 相关视频&#xff1a;文本挖掘&#xff1a;主题模型&#xff08;LDA&a…

SpringBoot SpringBoot 原理篇 2 自定义starter 2.1 记录系统访客独立IP访问次数案例介绍

SpringBoot 【黑马程序员SpringBoot2全套视频教程&#xff0c;springboot零基础到项目实战&#xff08;spring boot2完整版&#xff09;】 SpringBoot 原理篇 文章目录SpringBootSpringBoot 原理篇2 自定义starter2.1 记录系统访客独立IP访问次数案例介绍2.1.1 介绍2.1.2 需求…

SpringCloud 组件Gateway服务网关【断言工厂过滤器工厂】

目录 1&#xff1a;断言工厂 2&#xff1a;过滤器工厂 2.1&#xff1a;路由过滤器的种类 2.2&#xff1a;请求头过滤器 2.3&#xff1a;默认过滤器 2.4&#xff1a;总结 1&#xff1a;断言工厂 路由断言工厂Route Predicate Factory 路由配置包括&#xff1a; 1. 路由…

C++_串口编程_官方示例:监视通信事件

这是微软官方的一个例子&#xff0c;这个例子中&#xff0c;如果不做修改&#xff0c;那么他是可以异步运行的&#xff0c;会出现一个错误&#xff1a;官方也说了一下&#xff0c;但是不太好懂&#xff0c;我拷贝过来放在这里&#xff0c;作为参考。 如果无法立即完成重叠的操作…