第16章 Linux 之 JavaEE 定制篇-搭建 JavaEE 环境

如果需要在 Linux 下进行JavaEE 的开发,我们需要安装如下软件

  • JDK
  • Tomcat
  • ideaIU
  • MySQL
  • 安装 JDK
  • mkdir /opt/jdk
  • 通过 Xftp 6上传 JDK 安装包(jdk-8u261-linux-x64.tar.gz)到 /opt/jdk
  • cd /opt/jdk
  • 使用 tar -zxvf jdk-8u261-linux-x64.tar.gz 命令解压 JDK 安装包
  • mkdir /usr/local/java
  • mv jdk1.8.0_261/ /usr/local/java
  • 使用 echo $PATH 命令查看当前的环境变量,没有JDK
  • 通过编辑 /etc/profile 文件配置 JDK 环境变量
    • 增加命令 export JAVA_HOME=/usr/local/java/jdk1.8.0_261
    • 增加命令 export PATH=$JAVA_HOME/bin:$PATH
    • 其中,第二条命令的 $PATH 是之前的环境变量,一定要写上。否则,一些常用指令将无法使用。
  • 通过 source /etc/profile 命令让新的环境变量生效
  • 再次使用 echo $PATH 命令查看当前的环境变量,JDK 环境变量添加成功
  • 通过运行 Java 程序测试是否安装成功
  • 安装 Tomcat
  • mkdir /opt/tomcat
  • 通过 Xftp 6上传 Tomcat 安装包(apache-tomcat-8.5.59.tar.gz)到 /opt/tomcat
  • cd /opt/tomcat
  • 使用 tar -zxvf apache-tomcat-8.5.59.tar.gz 命令解压 Tomcat 安装包
  • cd apache-tomcat-8.5.59/
  • cd /bin
  • ./startup.sh
  • 使用 firewall-cmd --permanent --add-port=8080/tcp 命令打开8080端口
  • 使用 firewall-cmd --reload 命令更新端口状态
  • 使用 firewall-cmd --query-port=8080/tcp 命令查看端口是否打开
  • 通过浏览器访问 IP地址:8080 来查看是否安装成功
  • 安装 ideaIU 2020
  • mkdir /opt/idea
  • 通过 Xftp 6上传 ideaIU 安装包(ideaIU-2020.2.3.tar.gz)到 /opt/idea
  • cd /opt/idea
  • 使用 tar -zxvf ideaIU-2020.2.3.tar.gz 命令解压 ideaIU 安装包
  • cd idea-IU-202.7660.26/
  • cd /bin
  • 在有图形化界面的终端上运行 ./idea.sh
  • 图形化界面下,按个人需要安装即可
  • 点击新建项目,ideaIU 会自动配置系统中已有的 JDK
  • 通过编写 Java 程序来查看是否安装成功
  • 安装 MySQL 5.7
  • mkdir /opt/mysql
  • 通过 Xftp 6上传 MySQL 安装包(mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar)到 /opt/mysql
  • cd /opt/mysql
  • 使用 tar -xvf mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar 命令解压 MySQL 安装包
  • CentOS 7.6自带的 MySQL 类数据库是 mariadb,会和 MySQL 冲突,要先删除
  • 使用 rpm -qa | grep mari 命令查看 mariadb 相关安装包
  • 分别运行 rpm -e --nodeps mariadb-libs 以及 rpm -e --nodeps marisa 命令删除
  • 再次使用 rpm -qa | grep mari 命令查询 mariadb 相关安装包,已删除干净
  • 开始真正安装 MySQL,依次按顺序运行以下命令
    • rpm -ivh mysql-community-common-5.7.26-1.el7.x86_64.rpm
    • rpm -ivh mysql-community-libs-5.7.26-1.el7.x86_64.rpm
    • rpm -ivh mysql-community-client-5.7.26-1.el7.x86_64.rpm
    • rpm -ivh mysql-community-server-5.7.26-1.el7.x86_64.rpm
  • 运行 systemctl start mysqld.service 命令,启动 MySQL
  • 设置 root 用户密码
    • MySQL 自动给 root 用户设置随机密码,通过 grep password /var/log/mysqld.log 来查看当前密码
    • 运行 mysql -u root -p 命令登录 root 用户,输入上面 root 用户当前密码,登录进入 MySQL 命令行
    • 对于个人开发环境,如果设置较简单的 root 用户密码,在 MySQL 命令行运行 set global validate_password_policy=0; 将密码策略修改为0,即弱口令(默认情况为1)。对于生产环境,要设置复杂的 root 用户密码。
    • 修改 root 用户密码命令格式:set password for 用户名@localhost = password('新密码'); 比如在 MySQL 命令行里运行 set password for root@localhost = password('12345678');
    • 继续在 MySQL 命令行里输入 flush privileges; 使密码设置生效
  • 在 MySQL 命令行里输入 quit 退出
  • 用修改后的 root 用户密码登入 MySQL 查看是否修改成功

第17章 Linux 之大数据定制篇-Shell 编程

  • 为什么要学习 Shell 编程
  • Linux 运维工程师在进行服务器集群管理时,需要编写 Shell 程序来进行服务器管理。
  • 对于 JavaEE 和 Python 程序员来说,工作的需要,会要求你编写一些 Shell 脚本进行程序或者是服务器的维护,比如编写一个定时备份数据库的脚本。
  • 对于大数据程序员来说,需要编写 Shell 程序来管理集群。
  • Shell 是什么

Shell 是一个命令行解释器,它为用户提供了一个向 Linux 内核发送请求以便运行程序的界面系统级程序,用户可以用 Shell 来启动、挂起、停止甚至是编写一些程序。

  • Shell 脚本的执行方式
  • 脚本格式要求
    • 脚本以#!/bin/bash 开头
    • 脚本需要有可执行权限
  • 脚本的常用执行方式
    • 给要执行的脚本文件,添加可执行权限
    • 直接用 sh 脚本文件名 命令执行,不用赋予脚本可执行权限
  • Shell 变量介绍
  • Linux 中 Shell 的变量分为系统变量和用户自定义变量。
  • 系统变量:$HOME、$PWD、$SHELL、$USER 等等,比如:echo $HOME 等等。
  • 显示当前 Shell 中所有变量:set
  • Shell 变量定义
  • 定义变量:变量=值 (注意等号两侧没有空格)
  • 撤销变量:unset 变量
  • 声明静态变量:readonly 变量。注意:该变量不能 unset
  • 定义变量的规则
  • 变量名称可以由字母、数字和下划线组成,但是不能以数字开头。
  • 等号两侧不能有空格
  • 变量名称一般习惯为大写,这是一个规范,遵守即可
  • 将命令的返回值赋给变量
  • A=`date`,通过反引号,运行里面的命令,并把结果返回给变量 A
  • A=$(date)等于反引号的作用
  • 变量名称一般习惯为大写,这是一个规范,遵守即可
  • Shell 变量快速入门
#!/bin/bash
#案例1:定义变量 A
A=100
#输出变量需要加上$
echo A=$A
echo "A=$A"
#案例2:撤销变量 A
unset A
echo "A=$A"
#案例3:声明静态的变量 B=2,不能 unset
readonly B=2
echo "B=$B"
#执行 unset B 命令,会报错
#案例 4:将指令返回的结果赋给变量
C=`date`
D=$(date)
echo "C=$C"
echo "D=$D"
  • 设置环境变量
  • 基本语法
    • export 变量名=变量值:将 Shell 变量输出为环境变量
    • source 配置文件:让修改后的配置文件立即生效
    • echo $变量名:查询环境变量的值
  • 快速入门
#通过编辑 /etc/profile 文件配置 JDK 环境变量,要增加以下命令
export JAVA_HOME=/usr/local/java/jdk1.8.0_261
export PATH=$JAVA_HOME/bin:$PATH
#保存退出 /etc/profile 文件后,执行 source /etc/profile 命令使修改后的配置文件生效
  • Shell 脚本多行注释
:<<!
需要注释的第一行内容
需要注释的第二行内容
!
  • 位置参数变量

当我们执行一个 Shell 脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量,比如 ./myshell.sh 100 200 , 这个就是一个执行 shell 的命令行,可以在 myshell 脚本中获取到参数信息。

  • 基本语法
    • $n:n 为数字,$0 代表命令本身,$1-$9 代表第一到第九个参数,十以上的参数需要用大括号,如$
    • $*:代表命令行中所有的参数,$*把所有的参数看成一个整体
    • $@:代表命令行中所有的参数,不过该命令是把每个参数区分对待
    • $#:代表命令行中所有参数的个数
  • 快速入门
#!/bin/bash
echo "0=$0 1=$1 2=$2"
echo "命令行所有传入的参数=$*"
echo "$@"
echo "参数的个数=$#"
  • 预定义变量

Shell 设计者事先已经定义好的变量,可以直接在 Shell 脚本中使用

  • 基本语法
    • $$:当前进程的进程号
    • $!:后台运行的最后一个进程的进程号
    • $?:最后一次执行的命令的返回状态。如果这个变量的值为 0,证明上一个命令正确执行;如果这个变量的值为非 0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确
  • 快速入门
#!/bin/bash
echo "当前进程号=$$"
#后台方式运行 myShell.sh
./myShell.sh &
echo "最后的的进程号=$!"
echo "执行的值=$?"
  • 运算符

在 Shell 中进行各种运算操作。

  • 基本语法
    • $((运算式))\或$[运算式]
    • 或 `expr m + n` 注意 expr 运算符间要有空格
    • expr \*,/, % 分别代表乘,除,取余
  • 快速入门
#!/bin/bash
#案例1:计算(2+3)X4 的值
#使用第一种方式
RES1=$(((2+3)*4))
echo "res1=$RES1"
#使用第二种方式
RES2=$[(2+3)*4]
echo "res2=$RES2"
#使用第三种方式
TEMP=`expr 2 + 3`
RES3=`expr $TEMP \* 4` 
echo "temp=$TEMP"
echo "res3=$RES3"
echo "执行的值=$?"
#案例2:请求出命令行的两个参数[整数]的和
SUM=$[$1+$2]
echo "sum=$SUM"
  • 条件判断
  • 判断语句
    [ condition ](注意 condition 前后要有空格),非空返回 true,可使用$?验证(0 为 true,>1 为 false)
  • 常用判断条件
    • 字符串比较
选项 含义
= 字符串是否相等
  • 两个整数的比较
选项 含义
-lt 小于
-le 小于等于
-eq 等于
-gt 大于
-ge 大于等于
-ne 不等于
  • 按照文件权限进行判断
选项 含义
-r 有读的权限
-w 有写的权限
-x 有执行的权限
  • 按照文件类型进行判断
选项 含义
-f 文件存在并且是一个常规的文件
-e 文件存在
-d 文件存在并是一个目录
  • 快速入门
#!/bin/bash
#案例1:“ok”是否等于“ok”
#判断语句:是否 =
if [ "ok" = "ok" ]
then
      echo "equal"
fi
#案例2:23是否大于等于22
#判断语句:使用 -ge
if [ 23 -ge 22 ] 
then
      echo "大于"
fi
#案例3:/root/shcode/aaa.txt 目录中的文件是否存在
#判断语句:使用 -f
if [ -f /root/shcode/aaa.txt ]
then
      echo "存在"
fi
#其他案例
if [ edu ]
then
      echo "hello, edu"
fi
  • if 判断
  • 基本语法
if [ 条件判断式 ]
then
      程序
fi

或者

if [ 条件判断式 ]
then
      程序
elif [ 条件判断式 ]
then
      程序
fi
  • 注意事项
    [ 条件判断式 ]中括号和条件判断式之间必须有空格,if 与 [ 之间也有空格
  • 快速入门
#!/bin/bash
#案例:编写一个 Shell 程序,如果输入的参数,大于等于60,则输出“及格了”,如果小于60,则输出 “不及格”
if [ $1 -ge 60 ]
then
      echo "及格了"
elif [ $1 -lt 60 ]
then
      echo "不及格"
fi
  • case 语句
  • 基本语法
case $变量名 in
"值 1")
      如果变量的值等于值 1,则执行程序 1
;;
"值 2")
      如果变量的值等于值 2,则执行程序 2
;;
      省略其他分支
*)
      如果变量的值都不是以上的值,则执行此程序 
;;
esac
  • 快速入门
#!/bin/bash
#案例:当命令行参数是1时,输出“周一”,是2时,就输出“周二”,其它情况输出“other”
case $1 in
"1")
      echo "周一"
;;
"2")
      echo "周二"
;;
*)
      echo "other" 
;;
esac
  • for 语句
  • 基本语法1
for 变量 in 值1 值2 值3 ...
do
      程序
done
  • 快速入门
#!/bin/bash
#案例:打印命令行输入的参数【可以看出$*和$@的区别】
#注意 $* 是把输入的参数,当作一个整体,所以只会输出一行
for i in "$*"
do
      echo "num is $i"
done
#使用 $@ 是把输入的参数,分别对待,所以有几个参数,就会输出几行
for j in "$@"
do
      echo "num is $j"
done
  • 基本语法2
for (( 初始值;循环控制条件;变量变化 ))
do
      程序
done
  • 快速入门
#!/bin/bash
#案例:从1加到100的值输出显示
#定义一个变量 SUM
SUM=0
for (( i=1;i<=100;i++ ))
do
      SUM=$[$SUM+i]
done
echo "总和SUM=$SUM"
  • while 语句
  • 基本语法
while [ 条件判断式 ]
do
      程序
done
  • 注意事项
    [ 条件判断式 ]中括号和条件判断式之间必须有空格,while 与 [ 之间也有空格
  • 快速入门
#!/bin/bash
#案例:从命令行输入一个数 n,统计从 1+...+ n 的值
SUM=0
i=0
while [ $i -le $1 ]
do
      SUM=$[$i+$SUM]
      i=$[$i+1]
done
echo "总和SUM=$SUM"
  • read 读取控制台输入
  • 基本语法
    read [选项] [参数]
  • 选项
    -p:指定读取值时的提示符;
    -t:指定读取值时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了。
  • 参数
    变量:指定读取值的变量名
  • 快速入门
#!/bin/bash
#案例1:读取控制台输入一个 NUM1 值
read -p "请输入一个数NUM1=" NUM1
echo "您输入数NUM1=$NUM1"
#案例2:读取控制台输入一个 NUM2 值,在 10 秒内输入
read -t 10 -p "请输入一个数NUM2=" NUM2
echo "您输入数NUM2=$NUM2"
  • 系统函数
  • basename 基本语法
    • basename [pathname] [suffix]:返回完整路径最后 / 的部分,常用于获取文件名。
    • basename [string] [suffix]:会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来。
  • 选项:
    suffix 为后缀,如果 suffix 被指定了,basename 会将 pathname 或 string 中的 suffix 去掉。
  • dirname 基本语法
    • 功能:返回完整路径最后 / 的前面的部分,常用于返回路径部分。
    • dirname 文件绝对路径:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分)。
  • 快速入门
    • 案例1:请返回 /home/aaa/test.txt 的 test.txt 部分
      basename /home/aaa/test.txt
    • 案例2:请返回 /home/aaa/test.txt 的 /home/aaa 部分
      dirname /home/aaa/test.txt
  • 自定义函数
  • 基本语法
[ function ] funname[()]
{
      Action;
      [return int;]
}

调用直接写函数名:funname [值]

  • 快速入门
#!/bin/bash
#案例1:计算输入两个参数的和(动态获取),getSum
#定义函数 getSum
function getSum()
{
      SUM=$[$NUM1+$NUM2] 
      echo "和是=$SUM"
}
#输入两个值
read -p "请输入一个数NUM1=" NUM1
read -p "请输入一个数NUM2=" NUM2
#调用自定义函数
getSum $NUM1 $NUM2
  • Shell 编程综合案例
  • 需求分析
    • 每天凌晨2:10,备份数据库 hspedu 到 /data/backup/db
    • 备份开始和备份结束能够给出相应的提示信息
    • 备份后的文件要求以备份时间为文件名,并打包成 .tar.gz 的形式,比如:2018-03-12_230201.tar.gz
    • 在备份的同时,检查是否有 10 天前备份的数据库文件,如果有就将其删除。
    • 编写一个 Shell 脚本。
  • 思路分析
  • 代码实现
#!/bin/bash
#完成数据库的定时备份
#备份的路径
BACKUP=/data/backup/db
#当前的时间作为文件名
DATETIME=$(date +%Y-%m-%d_%H%M%S)
#可以输出变量调试
#echo ${DATETIME}
echo "======================开始备份=========================="
echo "========备份的路径为 $BACKUP/$DATETIME.tar.gz =========="
#数据库地址
HOST=localhost
#数据库用户名
DB_USER=root
#数据库密码
DB_PW=root
#备份数据库名
DATABASE=hspedu
#创建备份的文件夹
#如果该备份的文件夹有则使用,没有就重新创建一个。
#-p:表示递归创建目录,或者说创建多级目录。
[ ! -d "${BACKUP}/${DATETIME}"] && mkdir -p "${BACKUP}/${DATETIME}"
#执行 MySQL 备份数据库的指令
mysqldump -u${DB_USER} -p${DB_PW} --host=${HOST} ${DATABASE} | gzip > ${BACKUP}/${DATETIME}/$DATETIME.sql.gz
#将文件处理成 tar.gz
cd ${BACKUP}
tar -zcvf $DATETIME.tar.gz ${DATETIME}
# 删除对应的备份目录
rm -rf ${BACKUP}/${DATETIME}
#删除10天前的备份文件
find ${BACKUP} -atime +10 -name "*.tar.gz" -exec rm -rf {} \;
echo "=====================备份文件成功========================="

运行 crontab -e 指令,增加下面命令(结尾光标要停留在 h 上),用于定时调用上面的 Shell 脚本。

10 2 * * * /usr/sbin/mysql_db_backup.sh

第18章 Linux 之 Python 定制篇-Python 开发平台 Ubuntu

  • Ubuntu 的介绍
  • Ubuntu(乌班图)是一个以桌面应用为主的开源 GNU/Linux 操作系统,Ubuntu 是基于 GNU/Linux,支持 x86、amd64(即 x64)和 ppc 架构,由全球化的专业开发团队(Canonical Ltd) 打造的。
  • 专业的 Python 开发者一般会选择 Ubuntu 这款 Linux 系统作为生产平台。
  • Ubuntu 和 Centos 都是基于 GNU/Linux 内核的,因此基本使用和 Centos 是几乎一样的,它们的各种指令可以通用。在学习和使用 Ubuntu 的过程中,会发现各种操作指令在前面学习 CentOS 都使用过,只是界面和预安装的软件有所差别。
  • Ubuntu 下载地址:http://cn.ubuntu.com/download/
  • 设置 Ubuntu 支持中文

默认安装的 Ubuntu 中只有英文语言,因此是不能显示汉字的。要正确显示汉字,需要安装中文语言包。

  • 安装中文支持步骤
    • 单击左侧图标栏打开 System Settings(系统设置)菜单,点击打开 Language Support(语言支持)选项卡。
    • 点击 Install / Remove Languages,在弹出的选项卡中下拉找到 Chinese(Simplified),即中文简体, 在后面的选项框中打勾。然后点击 Apply Changes 提交,系统会自动联网下载中文语言包(保证 Ubuntu 是联网的)。
    • 这时“汉语(中国)”在最后一位因为当前第一位是“English”,所以默认显示都是英文。我们如果希望默认显示用中文,则应该将“汉语(中国)”设置为第一位。设置方法是拖动,鼠标单击“汉语(中国)”,当底色变化(表示选中了)后,按住鼠标左键不松手,向上拖动放置到第一位。
    • 设置后不会即刻生效,需要下一次登录时才会生效。
  • Ubuntu 的 root 用户
  • 介绍
    安装 Ubuntu 成功后,都是普通用户权限,并没有最高 root 权限,如果需要使用 root 权限的时候, 通常都会在命令前面加上 sudo 。有的时候感觉很麻烦。
    一般使用 su 命令来直接切换到 root 用户的,但是如果没有给 root 设置初始密码,就会抛出 su: Authentication failure 这样的问题。所以,我们只要给 root 用户设置一个初始密码就好了。
  • 给 root 用户设置密码并使用
    • 输入 sudo passwd 命令,设置 root 用户密码。
    • 设置 root 密码成功后,执行 su root 命令,并输入刚才设置的 root 密码,就可以切换成 root 用户。提示符 $ 代表普通用户,提示符 # 代表 root 用户。
    • 输入 exit 命令,退出 root 用户并返回普通用户。
  • Ubuntu 下开发 Python
  • 说明
    安装好 Ubuntu 后,默认就已经安装好 Python 的开发环境 Python2.7 和 Python3.5。
  • 在 Ubuntu 下开发一个 Python 程序
    • 编写 hello.py 文件
    • 执行 python3 hello.py 命令运行文件

第19章 Linux 之 Python 定制篇-APT 软件管理和远程登录

  • APT 介绍

APT 是 Advanced Packaging Tool 的简称,是一款安装包管理工具。在 Ubuntu 下,我们可以使用 apt 命令可用于软件包的安装、删除、清理等,类似于 Windows 中的软件管理工具。

  • Ubuntu 软件操作的相关命令

sudo apt-get update 更新源
sudo apt-get install package 安装包
sudo apt-get remove package 删除包
sudo apt-cache show package 获取包的相关信息,如说明、大小、版本等
sudo apt-get -f install 修复安装
sudo apt-get upgrade 更新已安装的包
sudo apt-get source package 下载该包的源代码

  • 更新 Ubuntu 软件下载地址
  • 寻找国内镜像源
    https://mirrors.tuna.tsinghua.edu.cn/
    所谓的镜像源:可以理解为提供下载软件的地方,比如 Android 手机上可以下载软件的安卓市场;iOS 手机上可以下载软件的 AppStore
  • 备份 Ubuntu 默认的源地址
    sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup
  • 更新源服务器列表
    • cd /etc/apt/v
    • echo '' > sources.list 清空 sources.list 文件内容
    • 复制镜像网站地址,拷贝到 sources.list 中
    • sudo apt-get update 更新源地址
  • Ubuntu 安装、卸载软件
  • 使用 apt 完成安装和卸载 Vim 软件,并查询 Vim 软件的信息
    • sudo apt-get install vim
    • sudo apt-get remove vim
    • sudo apt-cache show vim
  • 远程登录 Ubuntu
  • SSH 介绍
    • SSH 为 Secure Shell 的缩写,由 IETF 的网络工作小组(Network Working Group)所制定;SSH 为建立在应用层和传输层基础上的安全协议。
    • SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。常用于远程登录,以及用户之间进行资料拷贝。几乎所有 UNIX/Linux 平台,都可运行 SSH。
    • 使用 SSH 服务,需要安装相应的服务器和客户端。客户端和服务器的关系:如果,A 机器想被 B 机器远程控制,那么,A 机器需要安装 SSH 服务器,B 机器需要安装 SSH 客户端。
    • 和 CentOS 不同,Ubuntu 默认没有安装 SSHD 服务(使用 netstat 指令查看:apt install net-tools)。因此,我们不能进行远程登录。
  • 安装 SSH 和启用
    • sudo apt-get install openssh-server
      执行上面指令后,在当前这台 Linux 上就安装了 SSH 服务端和客户端。
    • service sshd restart
      执行上面的指令,就启动了 sshd 服务。监听端口为22。
  • 从一台 Linux 系统远程登陆另一台 Linux 系统
    在创建服务器集群时,会用到该技术。
    • 两台 Linux 系统都要安装 openssh-server
    • 基本语法:ssh 用户名@IP 比如 ssh root@192.168.188.131
    • 可以使用 exit 或者 logout 命令退出当前账户
    • 使用 ssh 访问,如访问出现错误。可查看是否有该文件 ~/.ssh/known_ssh 尝试删除该文件解决。