第五天 - 用户与环境变量-yum-tomcat-shell编程基础
一、用户切换与环境变量
- 环境变量:/etc/profile 所有用户均可读取
- 用户变量:/home/$USER/.bash_profile
- su:切换用户,当不带用户名时,切换至root用户
用户环境变量演示
背景:bigdata用户安装了jdk并且配置了用户变量,而root未配置jdk环境变量
- 切换用户时带横杠‘-’代表完全切换(读取相关配置,即用户变量配置文件),能够使用目标用户下配置的命令
- root用户:su - bigdata切换至bigdata用户,此时以bigdata权限执行jdk中的命令,并且以bigdata用户的环境变量为准
- bigdata用户:su - root 切换至root用户,此时无法使用root用户执行jdk中的命令,以root用户的环境变量为准,而root用户未配置jdk环境变量
- 切换用户时无横杠代表使用目标用户的权限来执行命令,以原用户环境变量为准
- bigdata用户: su root切换至root用户,可以使用root用户执行jdk中的命令,此时以bigdata用户环境变量为准
- root用户su bigdata切换至bigdata用户,无法使用jdk中的命令,此时以root用户的环境变量为准
二、rpm安装mysql
注意:使用rpm安装软件时需要使用root用户操作
查询系统中已安装的版本
rpm -qa|grep MySQL
rpm -qa|grep mysql
在Linux系统中对大小写敏感,rpm安装包的命名是十分规范的,但是不排除某些包命名不规范的情况,所以查询时可以多尝试大小写不同的情况。
查询出一个与要安装版本不符的rpm包,此时需要卸载它
rpm -e -nodeps mysql-libs-5.1.73-5.el6_6.x86_64
卸载后再执行查询命令,此时就查不到了
安装服务端
使用Xftp上传安装包
使用cd命令切换至上传的文件目录
执行安装命令
rpm -ivh MySQL-server-5.6.40-1.el6.x86_63.rpm
-ivh 安装并且显示安装进度
安装过程中提示生成一个随机密码,路径在/root/.mysql_secret
提示首次连接mysql后使用SET PASSWORD命令修改密码
安装完服务端后再次使用rpm查询已安装的包,发现安装成功,多出了mysql的rpm包
安装客户端
rpm -ivh MySQL-client-5.6.40-1.el6.x86_64.rpm
启动服务
查看mysql服务状态
service mysql status
启动服务
service mysql start
再次查看mysql服务状态,启动成功
启动mysql客户端
查看mysql命令是否可用
which mysql
rpm安装方式安装软件包成功后,会自行将需要的命令、服务在系统中进行注册,无需用户编辑环境变量
根据安装时的提示,查看生成的随机密码
cat /root/.mysql_secret
启动mysql客户端,输入上面查看的随机密码
mysql -u root -p
启动成功后,根据安装时的提示修改密码
SET PASSWORD = password(‘root’)
本条命令将密码改成了root
Windows下使用navicat远程连接CentOS中的mysql
连接mysql命令:
mysql -u xxx -h xxx.xxx.xxx.xxx -p
上面的命令中-h代表host,即主机名,后面跟上主机名或ip地址,如果是连接本机数据库,则省略这个参数
mysql安装后默认开启了从本地连接数据库的权限
开启mysql库的远程连接
服务区端口需要开启
私有云 - 路由器/服务器,公有云 - 网络安全组
使用navicat输入主机名、账号密码尝试连接,发现无法连接
mysql中使用命令打开远程访问权限
grant all PRIVILEGES on *.* to ‘root’@’%’ IDENTIFIED by ‘root’ with GRANT OPTION;
flush PRIVILEGES;
quit退出mysql客户端
navicat中重新尝试连接,发现依旧无法连接,此时原因是CentOS的防火墙未关闭
关闭防火墙有两种方式
- 直接使用命令关闭
service iptables stop
使用CentOS中的setup工具进行关闭,步骤如下:
- 输入命令setup启动工具
- 使用上下键选择到第二项:Firewall configuration,左右键选择Run Tool,回车键进入
使用空格将Enabled前的*号去除
左右键选择OK回车键确认
警告信息,选择Yes,确认并退出
![1535687670101](https://day05-1253629415.cos.ap-guangzhou.myqcloud.com/1535687670101.png)
防火墙关闭完成,查看防火墙状态命令
service iptables status
此时navicat就能正常连接
三、tomcat
安装tomcat
上传软件包至bigdata的家目录
解压
tar -zxvf apache-tomcat-8.5.31.tar.gz
进入tomcat解压目录下的bin目录
启动
./startup.sh
测试
两种测试方法:
- 在Windows下打开浏览器,访问sz01端口8080
sz01:8080
出现如下界面即可运行成功
使用命令查看当前运行进程,如果搜索到tomcat进程,即代表运行成功
ps -ef|grep mysql
ps -ef命令显示当前所有进程
ps命令显示当前用户进程
停止
两种停止方法
通过tomcat自带的可执行文件停止,在tomcat目录下bin目录中
./shutdown.sh
通过杀死tomcat进程停止
在第5步中ps -ef|grep mysql查询到tomcat的进程由bigdata用户启动,进程号为7641
通过命令杀死tomcat进程
kill -9 7641
此时再通过命令查看,已经没有tomcat进程,并且也不能访问sz01:8080
tomcat配置
修改端口为80
修改端口前先将tomcat关闭
修改tomcat目录conf目录下的server.xml
在第69行,将port=”8080”改为port=“80”
修改成80端口后,启动成功,但是无法访问页面sz01,原因是80端口是默认端口,普通用户没有使用此端口的权限,此时需要借助root用户启动tomcat服务
如果完全切换到root用户
su - root
执行./startup.sh时无法执行,提示缺少环境变量,原因是jdk的环境变量设置在了bigdata用户变量中,而不是系统变量,所以root没有jdk环境变量
非完全切换到root用户
su root
此时拥有root用户的权限,而环境变量使用bigdata用户,即能满足需求
启动tomcat服务
启动后可以通过sz01访问,此时由于使用默认80端口,所以无需添加端口号访问
- 修改Windows下的hosts文件,对虚拟机中的CentOS增加一项主机名www.cry.com
- 此时浏览器直接访问www.cry.com即可直接访问CentOS中的tomcat
通过tomcat发布项目(作为了解)
eclipse中导出项目
右键项目,export导出 WAR file
war文件如下:
将war文件使用Xftp上传到到tomcat的webapps下
通过root用户启动tomcat服务
./startup.sh
此时通过浏览器访问项目,成功
四、yum安装软件
yum简介
yum:管理rpm软件包的依赖,在仓库(http://)中搜索需要安装的软件的依赖,自动下载更新
系统安装完成后会默认配置公共仓库,在公网能够访问的情况下,可以使用yum安装软件
查看yum配置
cd /etc/yum.repos.d
ls
查看CentOS-Base.repo配置
cat CentOS-Base.repo
镜像列表
访问其中的一个镜像列表查看
如果无外网,yum无法使用,报无法到达镜像主机
在无外网的环境下,无法直接使用yum安装公网镜像中的软件,此时需要在局域网中搭建仓库(ftp://)/本地文件(file://)
创建本地yum源
挂载光盘
- 右侧虚拟机设置,检测是CD/DVD是否已连接,ISO镜像文件是否正确
查看光盘是否存在
cd /dev
ls,查看是否有cdrom,或者直接cd /dev/cdr按两下Tab键,查看是否有cdrom
在/mnt目录下创建挂载点
mkdir /mnt/cdrom
将光盘挂载至/mnt/cdrom中
mount /dev/cdrom /mnt/cdrom
检测光盘是否挂载成功,进入挂载点查看,如果存在文件则说明挂在成功
cd /mnt/cdrom
ls
修改配置文件,指定baseurl至挂载目录
vi CentOS-Media.repo
文件修改前后如图所示
baseurl=file:///media/mnt/cdrom
gpgcheck=0(关闭校验,1为开启校验)
enabled=1(打开从本地读取)
将失效的Base标记为不生效状态
将CentOS-Base.repo重命名其他名字即可
- 测试,yum -y install gcc,成功(之前已经安装过,所以提示没有新版本,未做任何操作)
五、shell编程基础
shell概述
shell 既是一种脚本编程语言,也是一个连接内核和用户的软件,shell脚本一般以.sh结尾
常用的两种解释器:sh(Unix上的标准shell),bash(sh的增强版本)
脚本文件格式
#!/bin/bash
脚本执行方式:对于有执行权限的文件(x)可以直接执行,或者使用bash以及sh命令
shell基础语法
- 变量定义:不需要声明类型,使用时使用$作为前缀引用,变量赋值时等号两侧无空格
- 变量赋值时不允许使用空格,可以加双引号解决,并可以再其中引入变量
- 使用单引号时赋值时会被识别为纯文本
- export 变量名称:将变量提升为全局环境变量,可以供其他shell程序使用
- source 文件:执行文件中的export语句
- 系统变量:任何用户都可以直接使用
- $HOME:当前用户家目录
- $PWD:当前所在目录
- $SHELL:当前使用的解释器
- $USER:当前用户名
shell特殊符号
$?:表示上一个命令退出的状态,一般0为成功,其他为异常
$$:表示当前的进程编号
$0:表示当前脚本名称
$n:表示第n个位置传入的参数,从1开始.
shell小实战1 - 创建、执行脚本文件
切换至/tmp目录下
cd /tmp
创建脚本文件testsh,添加内容
vi testsh
mkdir t1
mkdir t2
mkdir t3
执行文件
执行方式1:sh命令
sh testsh
执行成功,创建了三个文件夹
执行方式2:给文件加上执行权限,通过./方式执行
chmod u+x testsh
更改好权限后,文件名颜色变为绿色,代表可执行脚本文件
删除执行方式1中创建出的三个文件
./testsh
执行成功,再次创建了三个文件夹
shell小实战2 - 变量、单双引号
shell变量定义
格式:key=value (中间不带任何空格)
shell中变量不需要定义类型
脚本文件开头需标注#!/bin/bash,声明执行方式
vi shtest
./shtest
变量值中带有空格,需要使用双引号括住变量值
双引号不仅可以处理空格问题,还可以在双引号中引入变量
引入变量格式为$name
单引号内的内容会被识别为纯文本,赋值语句$同样会被识别为纯文本
shell小实战3 - 调用系统命令、if语句、传参
调用系统命令
新建testjava
vi testjava
执行此脚本,提示未找到java
原因是当前root用户未配置java环境变量,我们需要使用bigdata用户(配置了java环境变量)执行此文件,切换用户前需要给此文件加上其他用户能执行的权限
chmod u+x testjava
切换到bigdata用户
su - bigdata
cd /tmp
执行脚本文件
./testjava
用户bigdata执行成功
由此可以得出,shell脚本的执行能调用的系统命令与执行该脚本的当前用户相关
export命令
命令作用:在当前脚本中定义的变量升级为环境变量
新建testexport
vi testexport
保存退出,增加执行权限
chmod u+x testexport
使用source命令刷新一下该脚本文件,作用是执行脚本文件中的所有export语句
source testexport
使用echo命令测试能否引用定义的变量
echo $var1
echo $var2
成功,输出结果如下:
if语句
对$?得到的结果进行判断,执行语句
新建testif
vi testif
保存退出,增加执行权限
chmod u+x,o+x testif
使用root用户执行
./testif
使用bigdata用户执行
su - bigdata
cd /tmp
./testif
传参
shell脚本将用户输入的参数传递给java程序
两步传参:1.用户输入参数,shell脚本接收到;2.shell脚本将接收到的参数传递给java程序
切换至bigdata用户
在bigdata用户中执行下面步骤
配置CLASSPATH环境变量
vi ~/.bash_profile
source ~/.bash_profile
vi Test.java,通过nodepad++插件工具编辑该文件
新建testargs
vi testargs
保存退出,增加执行权限
chmod u+x testargs
编译Test.java
javac Test.java
执行testargs脚本,并传递三个参数给脚本
./testargs abc 123 a12
执行成功,结果如下: