admin管理员组

文章数量:1651576

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

1.1、 概述

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

1.2、安装 JDK

1.2.1 安装步骤

  1. mkdir /opt/jdk
  2. 通过 xftp6 上传到 /opt/jdk 下
  3. cd /opt/jdk
  4. 解压 tar -zxvf jdk-8u261-linux-x64.tar.gz
  5. mkdir /usr/local/java
  6. mv /opt/jdk/jdk1.8.0_261 /usr/local/java
  7. 配置环境变量的配置文件 vim /etc/profile
  8. export JAVA_HOME=/usr/local/java/jdk1.8.0_261
  9. export PATH= J A V A H O M E ∗ ∗ / b i n : JAVA_HOME**/bin: JAVAHOME/bin:PATH**
  10. source /etc/profile [让新的环境变量生效]

查看java版本

javac -version

1.2.12、案例

编写一个简单的 Hello.java 输出"hello,world!"

1.3、tomcat 的安装

1.3.1 步骤 :

  1. 上传安装文件,并解压缩到/opt/tomcat
  2. 进入解压目录/bin , 启动 tomcat ./startup.sh
  3. 开放端口 8080

1.3.2 测试是否安装成功:

在 windows、Linux 下 访问 http://linuxip:8080

1.4、Mysql安装

  1. 运行wget http://dev.mysql/get/mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar,下载mysql安装包,或者直接下载压缩包
  2. centos7.6自带的类mysql数据库是mariadb,会跟mysql冲突,要先删除。
  3. 运行tar -xvf mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar
  4. 运行rpm -qa|grep mari,查询mariadb相关安装包
  5. 运行rpm -e --nodeps mariadb-libs,卸载
  6. 然后开始真正安装mysql,依次运行以下几条

  1. 运行systemctl start mysqld.service,启动mysql

  2. 然后开始设置root用户密码

  3. Mysql自动给root用户设置随机密码,运行grep “password” /var/log/mysqld.log可看到当前密码

  4. 运行mysql -u root -p,用root用户登录,提示输入密码可用上述的,可以成功登陆进入mysql命令行

  5. 设置root密码,对于个人开发环境,如果要设比较简单的密码(生产环境服务器要设复杂密码),可以运行set global validate_password_policy=0; 提示密码设置策略(validate_password_policy默认值1,),级别解释

  6. set password for ‘root’@‘localhost’ =password(‘haung123’);

  7. 运行**flush privileges;**使密码设置生效

第二章Shell 编程

2.1、Shell 是什么

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

2.2、Shell 脚本的执行方式

2.2.1、脚本格式要求

  1. 脚本以#!/bin/bash 开头
  2. 脚本需要有可执行权限

2.2.2、编写第一个 Shell 脚本

需求说明:创建一个 Shell 脚本,输出 hello world!

#!/bin/bash
echo "hello,world"

2.2.3、脚本的常用执行方式

方式 1(输入脚本的绝对路径或相对路径)

说明:首先要赋予 helloworld.sh 脚本的+x 权限, 再执行脚本
比如 ./hello.sh 或者使用绝对路径 /root/shcode/hello.sh

方式 2(sh+脚本)

说明:不用赋予脚本+x 权限,直接执行即可。
比如 sh hello.sh , 也可以使用绝对路径

2.3、Shell 的变量

2.3.1 Shell 变量介绍

  1. Linux Shell 中的变量分为,系统变量和用户自定义变量。
  2. 系统变量: H O M E 、 HOME、 HOMEPWD、 S H E L L 、 SHELL、 SHELLUSER 等等,比如: echo $HOME 等等… 3) 显示当前 shell 中所有变量:set

2.3.2、shell 变量的定义

基本语法
  1. 定义变量:变量名=值 记住等号两边不能有空格
  2. 撤销变量:unset 变量
  3. 声明静态变量:readonly 变量,注意:不能 unset
快速入门
  1. 案例 1:定义变量 A
  2. 案例 2:撤销变量 A
  3. 案例 3:声明静态的变量 B=2,不能 unset,
#!/bin/besh
#1) 定义变量 A
A=100
#输出变量
echo A=$A
#2) 案例 2:撤销变量 A
unset A
echo A=$A
#3) 案例 3:声明静态的变量 B=2,不能 unset
readonly B=2
echo B=$B

2.3.3、定义变量的规则

  1. 变量名称可以由字母、数字和下划线组成,但是不能以数字开头。5A=200(×)
  2. 等号两侧不能有空格
  3. 变量名称一般习惯为大写, 这是一个规范,我们遵守即可将命令的返回值赋给变量
  4. A=‘data’,运行里面的命令,并把结果返回给变量 A
  5. A=$(date) 等价于反引号

2.3.4、设置环境变量

基本语法
  1. export 变量名=变量值 (功能描述:将 shell 变量输出为环境变量/全局变量)
  2. source 配置文件 (功能描述:让修改后的配置信息立即生效)
  3. echo $变量名 (功能描述:查询环境变量的值)
快速入门
  1. 在/etc/profile 文件中定义 TOMCAT_HOME 环境变量
  2. 查看环境变量 TOMCAT_HOME 的值
  3. 在另外一个 shell 程序中使用 TOMCAT_HOME
    注意:在输出 TOMCAT_HOME 环境变量前,需要让其生效
    source /etc/profile

shell 脚本的多行注释

#shell 脚本的多行注释
:<<!

内容 

!

2.3.5、位置参数变量

介绍

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

基本语法

​ $n (功能描述:n 为数字,$0 代表命令本身,$1- 9 代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如 9 代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如 9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如{10})
∗ (功能描述:这个变量代表命令行中所有的参数, * (功能描述:这个变量代表命令行中所有的参数, (功能描述:这个变量代表命令行中所有的参数,*把所有的参数看成一个整体)
@ (功能描述:这个变量也代表命令行中所有的参数,不过 @(功能描述:这个变量也代表命令行中所有的参数,不过 @(功能描述:这个变量也代表命令行中所有的参数,不过@把每个参数区分对待)
​ $#(功能描述:这个变量代表命令行中所有参数的个数)

#!/bin/beah
#单个变量
echo "1=$1,2=$2,3=$3"
#全部变量
echo "$*"
echo "$@"
#输出变量的个数
echo "$#"

2.3.6、预定义变量

基本介绍

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

基本语法
  1. $$ (功能描述:当前进程的进程号(PID))
  2. $! (功能描述:后台运行的最后一个进程的进程号(PID))
  3. $?(功能描述:最后一次执行的命令的返回状态。如果这个变量的值为 0,证明上一个命令正确执行;如果这个变量的值为非 0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。)
#!/bin/bash
echo "当前执行的进程 id=$$" #以后台的方式运行一个脚本,并获取他的进程号
/root/shcode/myshell.sh &
echo "最后一个后台方式运行的进程 id=$!" echo "执行的结果是=$?"

2.3.7、运算符

基本语法
  1. ( ( 运算式 ) ) ”或“ ((运算式))”或“ ((运算式))[运算式]”或者 expr m + n //expression 表达式
  2. 注意 expr 运算符间要有空格, 如果希望将 expr 的结果赋给某个变量,使用 ``
  3. expr m - n
  4. expr *, /, % 乘,除,取余
  5. expr只能单独运算
#!/bin/bash
echo "123123123"
#计算(2+3)*4
#第一种方法
echo "$(((2+3)*4))"
#第二种方法(推荐使用)
echo "$[(2+3)*4]"
#第三种方法
TEMP=`expr 2 + 3`
RES=`expr $TEMP \* 4`
echo "$RES"

2.3.8、条件判断

判断语句

[ condition ](注意 condition 前后要有空格)
#非空返回 true,可使用$?验证(0 为 true,>1 为 false)

应用实例

[ hspEdu ] 返回 true
[ ] 返回 false
[ condition ] && echo OK || echo notok 条件满足,执行后面的语句

判断语句

常用判断条件

  1. = 字符串比较
  2. 两个整数的比较
    -lt 小于
    -le 小于等于 little equal -eq 等于
    -gt 大于
    -ge 大于等于
    -ne 不等于
  3. 按照文件权限进行判断
    -r 有读的权限
    -w 有写的权限
    -x 有执行的权限
  4. 按照文件类型进行判断
    -f 文件存在并且是一个常规的文件
    -e 文件存在
    -d 文件存在并是一个目录
应用实例
#!/bin/bash
#"ok"是否等于"ok"
if [ "ok" = "ok" ]
then
        echo "True"
fi
#23 是否大于等于 22
if [ 23 -ge 22 ]
then
        echo "True"
fi
#/root/shcode/aaa.txt 目录中的文件是否存在
if [ -f /root/shcode/aaa.txt ]
then
        echo "True"
fi

2.3.9、多条件判断

if [ 条件判断式 ]
then
代码
elif [条件判断式]
then
代码
fi

注意事项:[ 条件判断式 ],中括号和条件判断式之间必须有空格

应用实例

案例:请编写一个 shell 程序,如果输入的参数,大于等于 60,则输出 “及格了”,如果小于 60,则输出 “不及格”

#如果输入的参数,大于等于 60,则输出 "及格了",如果小于 60,则输出 "不及格"
if [ $1 -ge 60 ]
then
        echo "及格了"
elif [ $1 -lt 60 ]
then
        echo "不及格"
fi

2.3.10、case 语句

基本语法

case $变量名 in
“值 1”)
如果变量的值等于值 1,则执行程序 1
;;“值 2”)
如果变量的值等于值 2,则执行程序 2
;;

*
如果变量的值都不是以上的值,则执行此程序
;;

esac

应用实例

当命令行参数是 1 时,输出 “周一”, 是 2 时,就输出"周二", 其它情况输出 “other”

#!/bin/bash
#当命令行参数是 1 时,输出 "周一", 是 2 时,就输出"周二", 其它情况输出 "other"
case $1 in
"1")
        echo "周一"
;;
"2")
        echo "周二"
;;
*)
        echo "other..."
;;
esac

2.3.11、for 循环

基本语法

for 变量 in 值 1 值 2 值 3…
do
程序/代码
done

#!/bin/bash
#打印命令行输入的参数 [这里可以看出$* 和 $@ 的区别]
for i in "$*"
do
        echo "num is $i"
done
#$@
        echo "======================================="
for j in "$@"
do
        echo "nim is $j"
done

应用实例 testFor1.sh

案例:打印命令行输入的参数 [这里可以看出$* 和 $@ 的区别]

基本语法

for (( 初始值;循环控制条件;变量变化 ))

do
程序/代码
done

应用实例 testFor2.sh

案例 1 :从 1 加到 100 的值输出显示

#!/bin/bash
#从 1 加到 100 的值输出显示
SUM=0
for (( i=1; i<=$1; i++))
do
        SUM=$[$SUM+$i]
done
        echo "$SUM"

2.3.12、while 循环

基本语法

while [ 条件判断式 ]

do
程序 /代码
done
注意:while 和 [ ]有空格,条件判断式和 [ ]也有空格

应用实例

案例 1 :从命令行输入一个数 n,统计从 1+…+ n 的值是多少?

#!/bin/bash
SUM=0
i=0
while [ $i -le $1 ]
do
        SUM=$[$SUM+$i]
        i=$[$i+1]
done
        echo "$SUM"

2.3.13、read 读取控制台输入

read(选项)(参数)
选项:
-p:指定读取值时的提示符;
-t:指定读取值时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了。。
参数
变量:指定读取值的变量名

应用实例

案例 1:读取控制台输入一个 NUM1 值

案例2:读取控制台输入一个 NUM2 值,在3 秒内输入。

#!/bin/bash
read -p "请输入一个数:" NUM
        echo "$NUM"
read -t 3 -p "请输入第二个数:" NUMS
        echo "$NUMS"

2.4、函数介绍

shell 编程和其它编程语言一样,有系统函数,也可以自定义函数。系统函数中,我们这里就介绍两个。

2.4.1、系统函数

basename 基本语法

功能:返回完整路径最后 / 的部分,常用于获取文件名
basename [pathname] [suffix]
basename [string] [suffix] (功能描述:basename 命令会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来。(去掉后缀)
选项:
suffix 为后缀,如果 suffix 被指定了,basename 会将 pathname 或 string 中的 suffix 去掉。

[huang@huang home]$ basename cat.txt 
cat.txt
[huang@huang home]$ basename cat.txt txt
cat.
[huang@huang home]$ basename cat.txt .txt
cat
[huang@huang home]$ 
dirname 基本语法

功能:返回完整路径最后 / 的前面的部分,常用于返回路径部分
dirname 文件绝对路径 (功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分))

[huang@huang /]$ dirname /home/cat.txt 
/home
[huang@huang /]$ 

2.4.2、自定义函数

基本语法
[ function ] funname[()]
{
Action;
[return int;]
}
调用直接写函数名:funname [值]

应用实例

案例 1:计算输入两个参数的和(动态的获取), getSum

#!/bin/bash
#计算输入两个参数的和(动态的获取), getSum

#定义函数
function getSum(){
        SUM=$[$N1+$N2]
        echo "和为:$SUM"
}

#控制台输入两个数
read -p "请输入第一个数N1=" N1
read -p "请输入第二个数N2=" N2

#调用函数
getSum $N1 $N2

2.4.3、Shell 编程综合案例

需求分析

  1. 每天凌晨 2:30 备份 数据库 hspedu 到 /data/backup/db
  2. 备份开始和备份结束能够给出相应的提示信息
  3. 备份后的文件要求以备份时间为文件名,并打包成 .tar.gz 的形式,比如:2021-03-12_230201.tar.gz
  4. 在备份的同时,检查是否有 10 天前备份的数据库文件,如果有就将其删除。
vim /usr/sbin/mysql_db_backup.sh
#备份目录
BACKUP=/data/backup/db
#当前时间
DATETIME=$(date +%Y-%m-%d_%H-%M-%S)
echo "$DATETIME"
#数据库地址
HOST=localhost
#数据库用户名··
DB_USER=root
#数据库密码
DB_PW=huang123
#备份数据库名字
DATABASE=huangedu

#2、创建备份目录
[ ! -d "${BACKUP}/{$DATETIME}" ] && mkdir -p "${BACKUP}/${DATETIME}"
#备份数据库
#用户名,密码,主机,-q-R如果有多个数据库也可以备份,然后对这个文件进行压缩,名字为路径.sql.gz
mysqldump -u${DB_USER} -p${DB_PW} --host=${HOST} -q -R --databases ${DATABASE} | gzip > ${BACKUP}/${DATETIME}/$DATETIME.sql.gz

#3、将/data/backup/db下的文件处理成tar.gz
cd ${BACKUP}
tar -zcvf $DATETIME.tar.gz ${DATETIME}
#删除目录
rm -rf ${BACKUP}/${DATETIME}
#4、删除10天前的备份文件
find ${BACKUP} -atime +10 -name "*.tar.gz" -exec rm -rf {} \;
echo "备份数据库${DATABASE}成功"

设置每天凌晨2点进行备份

[root@huang sbin]# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab
[root@huang sbin]# crontab -l
30 2 * * * /usr/sbin/mysql_db_backup.sh
[root@huang sbin]# 

第三章Ubuntu

3.1、Ubuntu 介绍

Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的开源 GNU/Linux 操作系统,Ubuntu 是基于 GNU/Linux,支持 x86、amd64(即 x64)和 ppc 架构,由全球化的专业开发团队(Canonical Ltd)打造的。
专业的 Python 开发者一般会选择 Ubuntu 这款 Linux 系统作为生产平台. 温馨提示:
Ubuntu 下载地址:http://cn.ubuntu/download/

Xshell免费下载地址

https://www.xshell/zh/free-for-home-school/

都学到这了还不会安装linux的系统,放弃吧,去工厂打螺丝比较适合你

3.1.1、设置 Ubuntu 支持中文

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

  1. 单击左侧图标栏打开 Language Support 菜单,点击打开 Language Support(语言支持)选项卡。
  2. 点击 Install / Remove Languages,在弹出的选项卡中下拉找到 Chinese(Simplified),即中文简体,在后面的选项框中打勾。然后点击 Apply Changes 提交,系统会自动联网下载中文语言包。(保证 ubuntu 是联网的)。
  3. 这时“汉语(中国)”在最后一位因为当前第一位是”English”,所以默认显示都是英文。我们如果希望默认显示
    用中文,则应该将“汉语(中国)”设置为第一位。设置方法是拖动,鼠标单击“汉语(中国)”,当底色变化(表示选中了)后,按住鼠标左键不松手,向上拖动放置到第一位。
  4. 设置后不会即刻生效,需要下一次登录时才会生效

如果是安装新版本,在安装界面就可以选择中文

3.1.2、root 用户设置密码并使用

安装 ubuntu 成功后,都是普通用户权限,并没有最高 root 权限,如果需要使用 root 权限的时候,通常都会在命令前面加上 sudo 。有的时候感觉很麻烦。我们一般使用 su 命令来直接切换到 root 用户的,但是如果没有给 root 设置初始密码,就会抛出 su : Authenticationfailure 这样的问题。

  1. 输入 sudo passwd 命令,设定 root 用户密码。
  2. 设定 root 密码成功后,输入 su 命令,并输入刚才设定的 root 密码,就可以切换成 root 了。提示符$代表一般用户,提示符#代表 root 用户。
  3. 以后就可以使用 root 用户了
  4. 输入 exit 命令,退出 root 并返回一般用户

3.2、APT 软件管理和远程登录

3.2.1、apt 介绍

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

3.2.2、Ubuntu 软件操作的相关命令

#更新源
sudo apt-get update
#安装包
sudo apt-get install 安装包名字
#卸载软件
sudo apt-get remove 安装包名字
# 搜索软件包
sudo apt-cache search 安装包名字
#获取包的相关信息
sudo apt-cache show 安装包名字
#重新安装
sudo apt-get install 安装包名字 --reinstall
#修复安装
sudo apt-get -f install
#删除包,包括配置文件
sudo apt-get remove 安装包名字 --purge
#安装相关的编译环境
sudo apt-get build-dep 安装包名字
#更新已安装的包
sudo apt-get upgrade 
#升级系统
sudo apt-get dist-upgrade 
#了解使用该包依赖那些包,(引用了谁)
sudo apt-cache depends 安装包名字
#查看该包被哪些包依赖,(被谁引用)
sudo apt-cache rdepends 安装包名字
#下载该包的源代码
sudo apt-get source 安装包名字

3.2.3、寻找国内镜像源

https://mirrors.tuna.tsinghua.edu/

源地址配置文件:/etc/apt/sources.list

找到ubuntu,点击问号

复制粘贴红框里的代码

# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu/ubuntu/ jammy main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu/ubuntu/ jammy-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu/ubuntu/ jammy-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu/ubuntu/ jammy-backports main restricted universe multiverse

deb http://security.ubuntu/ubuntu/ jammy-security main restricted universe multiverse
# deb-src http://security.ubuntu/ubuntu/ jammy-security main restricted universe multiverse

# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu/ubuntu/ jammy-proposed main restricted universe multiverse
# # deb-src https://mirrors.tuna.tsinghua.edu/ubuntu/ jammy-proposed main restricted universe multiverse
备份原先的源地址
sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup
更新源服务器列表

先清空 sources.list 文件复制镜像网站的地址

复制镜像网站的地址, 拷贝到 sources.list 文件

更新源

必须再输入,更新源地址:sudo apt-get update

3.3、远程登录 Ubuntu

3.3.1、 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),因此,我们不能进行远程登录

3.3.2、安装 SSH 和启用

sudo apt-get install openssh-server

执行上面指令后,在当前这台 Linux 上就安装了 SSH 服务端和客户端。

service sshd restart

执行上面的指令,就启动了 sshd 服务。会监听端口 22

3.3.3、 从一台 linux 系统远程登陆另外一台 linux 系统

在创建服务器集群时,会使用到该技术

基本语法:

ssh 用户名@IP

ssh huang@192.168.200.130

使用 ssh 访问,如访问出现错误。可查看是否有该文件 ~/.ssh/known_ssh 尝试删除该文件解决,一般不会有问题

登出

登出命令:exit 或者 logout

第四章CentOS8.1 的使用

4.1 安装 Centos8.1/8.2

4.1.1 Centos 下载地址

CentOS-8.1.1911-x86_64-dvd1.iso CentOS 8.1/8.2 DVD 版 8G (未来的主流.)
https://mirrors.aliyun/centos/8.5.2111/isos/x86_64/?spm=a2c6h.25603864.0.0.69be44cbUMyuE3

记得版本里有isos再进行选择架构,里面有iso包,最大的那个就是完整的包

或者看这里的文档,复制粘贴,有手就行

https://developer.aliyun/mirror/centos?spm=a2c6h.13651102.0.0.3e221b119z947b

4.1.2、CentOS8.0 VS CentOS7.0 比较

第五章日志管理

5.1、基本介绍

  1. 日志文件是重要的系统信息文件,其中记录了许多重要的系统事件,包括用户的登录信息、系统的启动信息、系统的安全信息、邮件相关信息、各种服务相关信息等。
  1. 日志对于安全来说也很重要,它记录了系统每天发生的各种事情,通过日志来检查错误发生的原因,或者受到攻击时攻击者留下的痕迹。
  2. 日志是用来记录重大事件的工具

5.2、系统常用的日志

/var/log/ 目录就是系统日志文件的保存位置

[root@huang log]# lastlog

日志文件说 明
/var/log/boot.log系统启动日志
/var/log/cron记录与系统定时任务相关的日志
/var/log/cups/记录打印信息的日志
/var/log/dmesg记录了系统在开机时内核自检的信总。也可以使用dmesg命令直接查看内核自检信息
/var/log/btmp记录错误登陆的日志,这个文件是二进制文件,不能直接用Vi查看,而要使用lastb命令查看。命令如下:[root@localhost log]#lastb
/var/log/lasllog记录系统中所有用户最后一次的登录时间的日志。这个文件也是二进制文件.要使用lastlog命令查看
/var/log/mailog记录邮件信息的日志
/var/log/message记录系统重要消息的日志.这个日志文件中会记录Linux系统的绝大多数重要信息。如果系统出现问题,首先要检查的应该就是这个日志文件
/var/log/secure记录验证和授权方面的倍息,只要涉及账户和密码的程序都会记录,比如系统的登录、ssh的登录、su切换用户sudo授权,甚至添加用户和修改用户密码都会记录在这个日志文件中
/var/log/wtmp永久记录所有用户的登陆、注销信息,同时记录系统的启动、重启、关机事件。是二进制文件.而要使用last命令查看
/var/tun/ulmp记录当前已经登录的用户的信息。这个文件会随着用户的登录和注销而不断变化,只记录当前登录用户的信息。这个文件不能用vi查看,而要使用w、who、users等命令查看

5.3、日志管理服务 rsyslogd

CentOS7.6 日志服务是 rsyslogd , CentOS6.x 日志服务是 syslogd 。rsyslogd 功能更强大。rsyslogd 的使用、日志文件的格式,和 syslogd 服务兼容的。

查询 Linux 中的 rsyslogd 服务是否启动

ps aux | grep "rsyslog" | grep -v "grep" 

查询 rsyslogd 服务的自启动状态

systemctl list-unit-files | grep rsyslog

5.3.1、配置文件:/etc/rsyslog.conf

编辑文件时的格式为:* .* 存放日志文件

其中第一个*代表日志类型

第二个*代表日志级别

日志类型分为:
类型说明
authpam 产生的日志
authprivssh、ftp 等登录信息的验证信息
corn时间任务相关
kern内核
lpr打印
mail邮件
mark(syslog)-rsyslog服务内部的信息,时间标识
news新闻组
user用户程序产生的相关信息
uucpunix to nuix copy 主机之间相关的通信
local 1-7自定义的日志设备
日志级别分为:
类型说明
debug有调试信息的,日志通信最多
info一般信息日志,最常用
notice最具有重要性的普通条件的信息
warning警告级别
err错误级别,阻止某个功能或者模块不能正常工作的信息
crit严重级别,阻止整个系统或者整个软件不能正常工作的信息
alert需要立刻修改的信息
emerg内核崩溃等重要信息
none什么都不记录

注意:从上到下,级别从低到高,记录信息越来越少

由日志服务 rsyslogd 记录的日志文件,日志文件的格式包含以下 4 列:

  1. 事件产生的时间
  2. 产生事件的服务器的主机名
  3. 产生事件的服务名或程序名
  4. 事件的具体信息
日志如何查看实例

查看一下 /var/log/secure 日志,这个日志中记录的是用户验证和授权方面的信息 来分析如何查看

5.4、日志轮替

5.4.1、基本介绍

日志轮替就是把旧的日志文件移动并改名,同时建立新的空日志文件,当旧日志文件超出保存的范围之后,就会进行删除

5.4.2、日志轮替文件命名

  1. centos7 使用 logrotate 进行日志轮替管理,要想改变日志轮替文件名字,通过 /etc/logrotate.conf 配置文件中“dateext”参数:
  2. 如果配置文件中有“dateext”参数,那么日志会用日期来作为日志文件的后缀,例如 “secure-20201010”。这样日志文件名不会重叠,也就不需要日志文件的改名, 只需要指定保存日志个数,删除多余的日志文件即可。
  3. 如果配置文件中没有“dateext”参数,日志文件就需要进行改名了。当第一次进行日志轮替时,当前的“secure”日志会自动改名为“secure.1”,然后新建“secure”日志, 用来保存新的日志。当第二次进行日志轮替时,“secure.1”会自动改名为“secure.2”, 当前的“secure”日志会自动改名为“secure.1”,然后也会新建“secure”日志,用来保存新的日志,以此类推。

/etc/logrotate.conf 为 logrotate 的全局配置文件

# rotate log files weekly, 每周对日志文件进行一次轮替
weekly
# keep 4 weeks worth of backlogs, 共保存 4 份日志文件,当建立新的日志文件时,旧的将会被删除
rotate 4
# create new (empty) log files after rotating old ones, 创建新的空的日志文件,在日志轮替后
create
# use date as a suffix of the rotated file, 使用日期作为日志轮替文件的后缀
dateext
# uncomment this if you want your log files compressed, 日志文件是否压缩。如果取消注释,则日志会在转储的同时进行压缩
#compress
#RPM packages drop log rotation information into this directory
include /etc/logrotate.d
# 包含 /etc/logrotate.d/ 目录中所有的子配置文件。也就 是说会把这个目录中所有子配置文件读取进来,

#下面是单独设置,优先级更高。
# no packages own wtmp and btmp -- we'll rotate them here
/var/log/wtmp {
# 每月对日志文件进行一次轮替
monthly 
# 建立的新日志文件,权限是 0664 ,所有者是 root ,所属组是 utmp 组
create 0664 root utmp 
# 日志文件最小轮替大小是 1MB 。也就是日志一定要超过 1MB 才会轮替,否则就算时间达到一个月,也不进行日志转储
minsize 1M 
# 仅保留一个日志备份。也就是只有 wtmp 和 wtmp.1 日志保留而已
rotate 1 
}
/var/log/btmp {
# 如果日志不存在,则忽略该日志的警告信息
missingok 
monthly
create 0600 root utmp
rotate 1
}

logrotate 配置文件
参数说明说 明
daily日志的轮替周期是每天
weekly日志的轮替周期是每周
monthly日志的轮替周期是每月
rotate 数字保留的日志文件的个数。0 指没有备份
compress日志轮替时,旧的日志进行压缩
create mode owner group建立新日志,同时指定新日志的权限与所有者和所属组。
mail address当日志轮替时,输出内容通过邮件发送到指定的邮件地址。
missingok如果日志不存在,则忽略该日志的警告信息
notifempty如果日志为空文件,则不进行日志轮替
minsize 大小日志轮替的最小值。也就是日志一定要达到这个最小值才会轮替,否则就算时间达到也不轮替
size 大小日志只有大于指定大小才进行日志轮替,而不是按照时间轮替。
dateext使用日期作为日志轮替文件的后缀。
sharedscripts在此关键字之后的脚本只执行一次。
prerotate/endscript在日志轮替之前执行脚本命令。
postrotate/endscript在日志轮替之后执行脚本命令。

5.4.3、把自己的日志加入日志轮替

  1. 第一种方法是直接在/etc/logrotate.conf 配置文件中写入该日志的轮替策略
  2. 第二种方法是在/etc/logrotate.d/目录中新建立该日志的轮替文件,在该轮替文件中写入正确的轮替策略,因为该目录中的文件都会被“include”到主配置文件中,所以也可以把日志加入轮替。
  3. 推荐使用第二种方法,因为系统中需要轮替的日志非常多,如果全都直接写 入/etc/logrotate.conf 配置文件,那么这个文件的可管理性就会非常差,不利于此文件的维护。
  4. 在/etc/logrotate.d/ 配置轮替文件一览

案例

看一个案例, 在/etc/logrotate.conf 进行配置, 或者直接在 /etc/logrotate.d/ 下创建文件 demolog 编写如下内容, 具体轮替的效果 可以参考 /var/log 下的 boot.log 情况.

/var/log/demo.log
{
   missingok
   daily
   copytruncate
   rotate 7
   notifempty
}

5.4.4、日志轮替机制原理

日志轮替之所以可以在指定的时间备份日志,是依赖系统定时任务。在 /etc/cron.daily/目录,就会发现这个目录中是有 logrotate 文件(可执行),logrotate 通过这个文件依赖定时任务执行的。

5.4.5、查看内存日志

journalctl 可以查看内存日志, 这里我们看看常用的指令

 ##查看全部
journalctl
##查看最新 3 条
journalctl -n 3 
#查看起始时间到结束时间的日志可加日期
journalctl --since 19:00 --until 19:10:10 
##报错日志
journalctl -p err 
##日志详细内容
journalctl -o verbose 
##查看包含这些参数的日志(在详细日志查看)或者 journalctl | grep sshd
journalctl _PID=1245 _COMM=sshd 

注意: journalctl 查看的是内存日志, 重启机器会清空

演示案例:

使用 journalctl | grep sshd 来看看用户登录清空, 重启系统,再次查询,看看日志有什么变化没有

5.5、linux 内核最新版和内核升级

内核地址:https://www.kernel/ 查看

wget https://cdn.kernel/pub/linux/kernel/v5.x/linux-5.8.16.tar.gz
tar -zxvf linux-5.8.16.tar.gz

将 Centos 系统从 7.6 内核升级到 7.8 版本内核(兼容性问题)

uname -a // 查看当前的内核版本
yum info kernel -q //检测内核版本,显示可以升级的内核
yum update kernel //升级内核
yum list kernel -q //查看已经安装的内核

只升级内核其他配置没变,原先的内核也保留了下来。开机时可以选择不同的内核!

第六章制作自己的min linux(基于CentOS7.6)

1、首先,我们在现有的linux添加一块大小为20G的硬盘

点击完成,就OK了, 可以使用 lsblk 查看,需要重启

2、添加完成后,点击确定,然后启动现有的linux(centos7.6)。

通过fdisk来给我们的/dev/sdb进行分区

1 [root@localhost ~]# fdisk /dev/sdb
 2 Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
 3 Building a new DOS disklabel with disk identifier 0x4fde4cd0.
 4 Changes will remain in memory only, until you decide to write them.
 5 After that, of course, the previous content won't be recoverable.
 6 
 7  
 8 Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
 9 
10  
11 WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
12 switch off the mode (command 'c') and change display units to
13 sectors (command 'u').
14 
15 
16 Command (m for help): n
17 Command action
18 e extended
19 p primary partition (1-4)
20 p
21 Partition number (1-4): 1
22 First cylinder (1-2610, default 1):
23 Using default value 1
24 Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +500M
25 
26 
27 Command (m for help): n
28 Command action
29 e extended
30 p primary partition (1-4)
31 p
32 Partition number (1-4): 2
33 First cylinder (15-2610, default 15):
34 Using default value 15
35 Last cylinder, +cylinders or +size{K,M,G} (15-2610, default 2610):
36 Using default value 2610
37 #查看分区
38 Command (m for help): p
39 
40  
41 Disk /dev/sdb: 21.5 GB, 21474836480 bytes
42 255 heads, 63 sectors/track, 2610 cylinders
43 Units = cylinders of 16065 * 512 = 8225280 bytes
44 Sector size (logical/physical): 512 bytes / 512 bytes
45 I/O size (minimum/optimal): 512 bytes / 512 bytes
46 Disk identifier: 0x4fde4cd0
47 
48  
49 Device Boot Start End Blocks Id System
50 /dev/sdb1 1 14 112423+ 83 Linux
51 /dev/sdb2 15 2610 20852370 83 Linux
52 #保存并退出
53 Command (m for help): w
54 The partition table has been altered! 

3、接下来,我们对/dev/sdb的分区进行格式化

[root@localhost ~]# mkfs.ext4 /dev/sdb1
[root@localhost ~]# mkfs.ext4 /dev/sdb2 

4、创建目录,并挂载新的磁盘

mkdir -p /mnt/boot /mnt/sysroot 
mount /dev/sdb1 /mnt/boot 
mount /dev/sdb2 /mnt/sysroot/

5、安装grub, 内核文件拷贝至目标磁盘

grub2-install --root-directory=/mnt /dev/sdb

我们可以来看一下二进制确认我们是否安装成功

hexdump -C -n 512 /dev/sdb  

rm -rf /mnt/boot/*
cp -rf /boot/* /mnt/boot/

6、修改 grub2/grub.cfg 文件, 标红的部分 是需要使用 指令来查看的

在grub.cfg文件中 , 红色部分用 上面 sdb1 的 UUID替换,蓝色部分用 sdb2的UUID来替换, 紫色部分是添加的,表示selinux给关掉,同时设定一下init,告诉内核不要再去找这个程序了,不然开机的时候会出现错误的

### BEGIN /etc/grub.d/10_linux ###
menuentry 'CentOS Linux (3.10.0-957.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-957.el7.x86_64-advanced-2eef594e-68fc-49a0-8b23-07cf87dda424' {
	load_video
	set gfxpayload=keep
	insmod gzio
	insmod part_msdos
	insmod ext2
	set root='hd0,msdos1'
	if [ x$feature_platform_search_hint = xy ]; then
	  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 --hint='hd0,msdos1'  6ba72e9a-19ec-4552-ae54-e35e735142d4
	else
	  search --no-floppy --fs-uuid --set=root 6ba72e9a-19ec-4552-ae54-e35e735142d4
	fi
	linux16 /vmlinuz-3.10.0-957.el7.x86_64 root=UUID=d2e0ce0f-e209-472a-a4f1-4085f777d9bb ro crashkernel=auto rhgb quiet LANG=zh_CN.UTF-8  selinux=0 init=/bin/bash
	initrd16 /initramfs-3.10.0-957.el7.x86_64.img
}
menuentry 'CentOS Linux (0-rescue-5bd4fb8d8e9d4198983fc1344f652b5d) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-0-rescue-5bd4fb8d8e9d4198983fc1344f652b5d-advanced-2eef594e-68fc-49a0-8b23-07cf87dda424' {
	load_video
	insmod gzio
	insmod part_msdos
	insmod ext2
	set root='hd0,msdos1'
	if [ x$feature_platform_search_hint = xy ]; then
	  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 --hint='hd0,msdos1'  6ba72e9a-19ec-4552-ae54-e35e735142d4
	else
	  search --no-floppy --fs-uuid --set=root 6ba72e9a-19ec-4552-ae54-e35e735142d4
	fi
	linux16 /vmlinuz-0-rescue-5bd4fb8d8e9d4198983fc1344f652b5d root=UUID=d2e0ce0f-e209-472a-a4f1-4085f777d9bb ro crashkernel=auto rhgb quiet selinux=0 init=/bin/bash
	initrd16 /initramfs-0-rescue-5bd4fb8d8e9d4198983fc1344f652b5d.img
}

### END /etc/grub.d/10_linux ###

selinux=0 init=/bin/bash

quiet selinux=0 init=/bin/bash

记得添加哦!

7、创建目标主机根文件系统

mkdir -pv /mnt/sysroot/{etc/rc.d,usr,var,proc,sys,dev,lib,lib64,bin,sbin,boot,srv,mnt,media,home,root} 

8、拷贝需要的bash(也可以拷贝你需要的指令)和库文件给新的系统使用

cp /lib64/*.* /mnt/sysroot/lib64/ 
cp /bin/bash /mnt/sysroot/bin/ 

9、 现在我们就可以创建一个新的虚拟机,然后将默认分配的硬盘 移除掉,指向我们刚刚创建的磁盘即可.

10、这时,很多指令都不能使用,比如 ls , reboot 等,可以将需要的指令拷贝到对应的目录即可

11、 如果要拷贝指令,重新进入到原来的 linux系统拷贝相应的指令即可

比如将 /bin/ls 拷贝到 /mnt/sysroot/bin 将/sbin/reboot 拷贝到 /mnt/sysroot/sbin

[root@hspedu100 ~]# mount /dev/sdb2 /mnt/sysroot/
[root@hspedu100 ~]# cp /bin/ls /mnt/sysroot/bin/
[root@hspedu100 ~]# cp /bin/systemctl /mnt/sysroot/bin/
[root@hspedu100 ~]# cp /sbin/reboot /mnt/sysroot/sbin/

12、再重新启动新的min linux系统,就可以使用 ls , reboot 指令了

第七章linux 系统-备份与恢复

实体机无法做快照,如果系统出现异常或者数据损坏,后果严重, 要重做系统,还会造成数据丢失。所以我们可以使用备份和恢复技术

linux 的备份和恢复很简单 , 有两种方式:

  1. 把需要的文件(或者分区)用 TAR 打包就行,下次需要恢复的时候,再解压开覆盖即可
  2. 使用 dump 和 restore 命令

7.1、安装 dump 和 restore

如果 linux 上没有 dump 和 restore 指令,需要先按照

yum -y install dump
yum -y install restore

7.2、使用 dump 完成备份

dump 支持分卷和增量备份(所谓增量备份是指备份上次备份后 修改/增加过的文件,也称差异备份)

7.2.1、dump 语法说明

dump [ -cu] [-123456789] [ -f <备份后文件名>] [-T <日期>] [ 目录或文件系统]

dump []-wW

​ -c : 创建新的归档文件,并将由一个或多个文件参数所指定的内容写入归档文件的开头。

​ -0123456789: 备份的层级。0 为最完整备份,会备份所有文件。若指定 0 以上的层级,则备份至上一次备份以来修改或新增的文件, 到 9 后,可以再次轮替. -f <备份后文件名>: 指定备份后文件名

​ -j : 调用 bzlib 库压缩备份文件,也就是将备份后的文件压缩成 bz2 格式,让文件更小

​ -T <日期>: 指定开始备份的时间与日期

​ -u : 备份完毕后,在/etc/dumpdares 中记录备份的文件系统,层级,日期与时间等。

​ -t : 指定文件名,若该文件已存在备份文件中,则列出名称

​ -W :显示需要备份的文件及其最后一次备份的层级,时间 ,日期。

​ -w :与-W 类似,但仅显示需要备份的文件。

7.2.2、dump 应用案例

将/boot 分区所有内容备份到/opt/boot.bak0.bz2 文件中,备份层级为“0”
dump -0uj -f /opt/boot.bak0.bz2 /boot
在/boot 目录下增加新文件,备份层级为“1”(只备份上次使用层次“0”备份后发生过改变的数据), 注意比较看看

这次生成的备份文件 boot1.bak 有多大

dump -1uj -f /opt/boot.bak1.bz2 /boot

通过 dump 命令在配合 crontab 可以实现无人值守备份

dump -W

显示需要备份的文件及其最后一次备份的层级,时间 ,日期

查看备份时间文件
cat /etc/dumpdates

dump 备份文件或者目录

前面我们在备份分区时,是可以支持增量备份的,如果备份文件或者目录,不再支持增量备份, 即只能使用 0 级别备份
案例, 使用 dump 备份 /etc 整个目录

dump -0j -f /opt/etc.bak.bz2 /etc/
#下面这条语句会报错,提示 DUMP: Only level 0 dumps are allowed on a subdirectory
dump -1j -f /opt/etc.bak.bz2 /etc/

切记dump增量备份只能是分区

7.3、使用 restore 完成恢复

restore 命令用来恢复已备份的文件,可以从 dump 生成的备份文件中恢复原文件

7.3.1、restore 基本语法

restore [模式选项] [选项]

说明下面四个模式, 不能混用,在一次命令中, 只能指定一种。

​ -C :使用对比模式,将备份的文件与已存在的文件相互对比。

​ -i:使用交互模式,在进行还原操作时,restors 指令将依序询问用户

​ -r:进行还原模式

​ -t : 查看模式,看备份文件有哪些文件

选项

​ -f <备份设备>:从指定的文件中读取备份数据,进行还原操作

7.3.2、应用案例

restore 命令比较模式,比较备份文件和原文件的区别

测试

mv /boot/hello.java /boot/hello100.java
restore -C -f boot.bak1.bz2 #注意和 最新的文件比较
restore 命令查看模式,看备份文件有哪些数据/文件
restore -t -f boot.bak0.bz2

restore 命令还原模式

注意细节: 如果你有增量备份,需要把增量备份文件也进行恢复, 有几个增量备份文件,就要恢复几个,按顺序来恢复即可。

mkdir /opt/boottmp
cd /opt/boottmp
restore -r -f /opt/boot.bak0.bz2 //恢复到第 1 次完全备份状态
restore -r -f /opt/boot.bak1.bz2 //恢复到第 2 次增量备份状态
restore 命令恢复备份的文件,或者整个目录的文件

基本语法: restore -r -f 备份好的文件

[root@hspedu100 opt]# mkdir etctmp
[root@hspedu100 opt]# cd etctmp/
[root@hspedu100 etctmp]# restore -r -f /opt/etc.bak0.bz2

本文标签: 高级Linux