LiangGaRy-学习笔记-Day22

1、shell工具-tput

这个是tput bash工具

具体的操作如下:

  • tput clear:清屏
  • tput cup Y X
    • 第Y行,第X列的位置
  • tput bold:字体加粗
  • tput sgr0 : 重置命令
  • tput setaf n
    • n:代表数字0-7
      • 0黑色
      • 1红色
      • 2绿色
      • 3黄色
      • 4蓝色
      • 5洋红色
      • 6青色(蓝绿色)
      • 7白色
  • tput rew:设置小标题

作用:通过Terminfo数据库可以对终端会话进行初始化或更改终端功能,如移动或更改光标、更改文本属性,以及清除终端屏幕的特定区域。

语法:tput+选项

1.1、shell脚本-LAMP+Wordpress

  • 安装httpd
  • 安装MySQL
  • 安装PHP
  • 安装wordpress
#编写脚本
[root@Node1 sh]# vim lamp.sh
#!/bin/bash
#Time:2023年6月12日
#Author By LiangGaRy
#Usage:结合tput简单部署lamp脚本
#############################
        #设定函数
clean_OS(){
        #卸载与挂载光盘
        umount /dev/cdrom /mnt/cdrom &>> /dev/null
        mount /dev/cdrom /mnt/cdrom &>> /dev/null
        #删除原来的yum的进程pid
        rm -rf /var/run/yum.pid &>> /dev/mull
        #请空缓存与重新生成yum 缓存
        yum clean all &>> /dev/null
        yum makecache fast &>/dev/null
}
http_install(){
        yum -y install httpd &>> /dev/null
        systemctl restart httpd &>> /dev/null
        if [ $? -eq 0 ];then
                echo "当前httpd 安装成功;"
        else
                echo "httpd安装失败,请手工排查问题 "
        fi
}
mysql_install(){
        yum -y install mariadb mariadb-server &>> /dev/null
        systemctl restart mariadb &>> /dev/null
        if [ $? -eq 0 ];then
                echo "当前mariadb 安装成功;"
        else
                echo "mariadb安装失败,请手工排查问题 "
        fi
}
        #实现清屏功能
tput clear
        #定位光标的位置
tput cup 3 15
        #设置颜色
tput setaf 3
echo “LAMP安装面板”
        #重置命令
tput sgr0
        #定位光标的位置
tput cup 5 17
        #设置一个小标题
tput    rev
echo "LAMP 管理面板"
        #定位光标的位置
tput cup 7 15
echo "1.安装httpd"
tput cup 8 15
echo "2.安装MySQL"
tput cup 9 15
echo "3.安装PHP"
tput cup 10 15
echo "4.安装WORDPRESS"
        #设置字体加粗
tput bold
tput cup 12 15
read -p "请输入你的选择【1-4】:" choice
case $choice in
1)
        echo "httpd 开始安装中........"
        #然后开始调用函数
        clean_OS
        http_install
;;
2)
        clean_OS
        echo "MySQL 开始安装中........"
        mysql_install
;;
3)
        clean_OS
        echo "PHP 开始安装中........"
        php_install
;;
4)
        clean_OS
        echo "Wordpress 开始安装中........"
        wordpress_install
;;
*)
        echo "请输出数字1-4!!"
;;
esac

实现功能查看一下

LiangGaRy-学习笔记-Day22_第1张图片

2、计划任务

计划任务,就是让系统在将来指定时间执行某些任务(程序);任务可以周期性执行,也可以仅仅执行一次

  • 例如:早上6:30分–>执行巡检任务;
  • 注意事项:
    • 要使计划任务在指定时间内自动运行,服务器必须是开机状体的

2.1、at服务讲解

定义:指定某个时间一次性执行某个任务;依赖于系统后台进程atd进程

  • 在指定的日期、时间点自动的执行预先设置的一些命令操作,属于一次性计划任务
  • 系统服务的名称:/etc/init.d/atd
  • 设置格式:at [HH:MM] [yyyy-mm-dd]
  • atq命令:查询当前设置的at任务列表 同 at -l
  • atrm命令:删除指定任务编号的at任务 atrm 编号 同 at -d
  • at -c 任务号 查看计划任务的具体内容(和at计划任务文件/var/spool/at/以a开头的文件内容相同)

两个文件:

  • /etc/at.deny:只有该名单里面的人不可以使用
  • /etc/at.allow:只用该名单里面的人可以使用(这个文件一般不存在,如果需要,自行创建)

案例说明:

#启动atd进程
[root@Node1 ~]# systemctl start atd
	#查看服务状态
[root@Node1 ~]# systemctl status atd
	#查看是否开机自启
[root@Node1 ~]# systemctl is-active atd
active
	#确保时间是准确的
[root@Node1 ~]# date
Wed Jul 12 15:23:53 CST 2023

#添加一次性计划任务-->添加ctrl+d结束
[root@Node1 ~]# at 15:30
at> echo "hello the word"
at> <EOT>
job 1 at Wed Jul 12 15:30:00 2023

#查看一次性任务列表
[root@Node1 ~]# at -l
1	Wed Jul 12 15:30:00 2023 a root
	#输出的信息说明
		#1:任务编号:
		#Wed Jul 12 15:30:00 2023:执行的时间	
		#a:队列
		#root:执行者root

#在添加一次性任务
at> echo "hello liangjiawei"   
at> echo "welcome to Linux"
at> <EOT>
job 2 at Wed Jul 12 16:00:00 2023

#指定一个时间
[root@Node1 ~]# at 11:00 2023-10-31
at> echo lalal
at> <EOT>
job 3 at Tue Oct 31 11:00:00 2023
You have mail in /var/spool/mail/root

#指定这个时间后的30分钟执行
[root@Node1 ~]# at now +30min
at> echo aaa
at> <EOT>
job 4 at Wed Jul 12 16:04:00 2023

#指定三天后的计划任务
[root@Node1 ~]# at 18:00 +3days
at> echo bbb
at> <EOT>
job 5 at Sat Jul 15 18:00:00 2023

#查看计划任务
[root@Node1 ~]# at -l
2	Wed Jul 12 16:00:00 2023 a root
3	Tue Oct 31 11:00:00 2023 a root
4	Wed Jul 12 16:04:00 2023 a root
5	Sat Jul 15 18:00:00 2023 a root

#删除计划任务
[root@Node1 ~]# at -d 3
[root@Node1 ~]# at -l
2	Wed Jul 12 16:00:00 2023 a root
4	Wed Jul 12 16:04:00 2023 a root
5	Sat Jul 15 18:00:00 2023 a root

#查看计划任务的内容
[root@Node1 ~]# at -c 2
#!/bin/sh
# atrun uid=0 gid=0
.........
echo "hello liangjiawei"
echo "welcome to Linux"

2.2、备份说明

完全备份:

  • 所谓全备份就是用一盘磁带对整个系统进行完全备份,包括系统和数据。
  • 特点:
    • 最常见的备份类型。备份完整数据,恢复方便
    • 备份耗时久,且反复备份,占用存储空间较多

增量备份:

  • 就是每次备份的数据只是相当于上一次备份后增加的和修改过的数据。
  • 特点:
    • 备份数据量小,备份速度快。
    • 相对而言,所需恢复时间比完全备份或差异备份所需时间长。

差异备份

  • 就是每次备份的数据是相对于上一次全备份之后新增加的和修改过的数据。
  • 特点:
    • 备份数据量小,备份速度比完全备份快。
    • 相对而言,恢复数据所耗费的时间比完全备份时间长。如果大量数据发生变化,差异备份所耗费的时间比增量备份时间长

事物备份

  • 备份数据库中的事务日志。事务日志是数据库中已发生的所有修改和执行每次修改的事务的一连串记录。
  • 特点:
    • 使用事务日志备份,可将数据恢复到精确的故障点。

永久增量备份

  • 永久增量备份常被“磁盘-磁盘-磁带”备份系统使用。其基本的方式和增量备份相似,永久增量备份是从所有数据的全备份初始的,以后只进行增量备份。
  • 特点:
    • 备份数据量小,备份速度比增量备份快。
    • 相对而言,适用于单个应用数据量大、执行一次完全备份比较费时费力的应用场景

2.3、crond服务

作用:执行周期性计划任务

  • 按照预先设置的时间周期(分钟、小时、天…)重复执行用户执行的命令操作,这属于周期计划人任务
  • 服务名称:/etc/init.d/crond
  • 主要设置文件:用户定义的设置,位于文件/etc/spool/cron/用户名
  • cron服务配置文件:/etc/crontab(包含三部分:注释、环境变量、cron命令)
  • cron服务日志文件:/var/log/cron
  • 管理cron计划任务:
    • 编辑计划任务:crontab -e [-u 用户名]
    • 查看计划任务:crontab -l [-u 用户名]
    • 删除计划任务:crontab -r [-u 用户名 ]
  • root用户可以管理制定的用户计划任务,其他用户只能管理自己的计划任务
  • 语法:
    • 分时日月周命令
  • 时间的表示方式:
    • 型号*:表示范围内任意时间
    • 逗号,:表示间隔多个不连续的时间点
    • 横杆-:表示一个连续的时间范围
    • /n:表示指定间隔的时间频率
0  17  *  *  1-5		  周一到周五每天17:00
30  8  *  *  1,3,5	      每周一、三、五的8点30分
0  8-18  *  *  *          8点到18点整
0  12  */3  *  *		  每隔3天的12点整

crontab命令

  • 作用:设定与查看周期性计划任务
  • 语法:crontab+选项+时间
  • 选项:
    • -u:指定用户
    • -l:列出详细任务
    • -r:删除计划任务
    • -e:编辑计划任务
#启动crond服务
[root@Node1 ~]# systemctl  start crond
[root@Node1 ~]# systemctl enable crond

#编辑任务
[root@Node1 ~]# crontab -uroot -e
no crontab for root - using an empty one
1 * 5 * * echo aaa

#查看计划任务
[root@Node1 ~]# crontab  -l
1 * 5 * * echo aaa

#指定liangjiawei用户进行编辑
[root@Node1 ~]# crontab  -uliangjiawei -e
no crontab for liangjiawei - using an empty one
1 2 4 3 * echo lll

#再次查看
[root@Node1 ~]# crontab  -uliangjiawei -l
1 2 4 3 * echo lll

#每天晚上23:00重启httpd
0 23 * * * /etc/init.d/httpd restart

#每隔五分钟执行
*/5 * * * * echo aaa >> a.txt

#每周的135的12点和18点重启httpd
0 12,18 * * 1,3,5 /etc/init.d/httpd restart

#每天都饿12点到18点重启apache
0 12-18 * * * /etc/init.d/httpd restart

系统级别的计划任务

  • 系统会清理系统缓存
  • 系统会临时清理文件
  • 系统会采集系统信息
#查看系统级别的定时任务
[root@Node1 ~]# ls /etc/cron
cron.d/       cron.deny     cron.monthly/ cron.weekly/  
cron.daily/   cron.hourly/  crontab

#文件说明如下:
cron.deny 		#控制用户是否能做计划任务的文件;
cron.monthly/ 	#每月执行的脚本;
cron.weekly/ 	#每周执行的脚本;
cron.daily/ 	#每天执行的脚本;
cron.hourly/ 	#每小时执行的脚本;
crontab 		#主配置文件 也可添加任务;

计划任务不执行的原因

  • 脚本本来编写不对,没有办法执行
  • 执行环境不对;没有执行权限
  • 系统时间不对,导致在规定的时间上不执行
  • crontab守护进程宕机导致不执行

日志

/var/log/message 		#系统默认的日志信息
/var/log/secure 		#ssh登录服务
/var/log/maillog 		#邮件相关
/var/log/cron 			#定期执行任务相关的日志
/var/log/boot.log
/var/log/dmesg

2.4、watch命令

作用:可以将命令的输出结果输出到标准输出设备,多用于周期性执行命令/定时执行命令

语法:watch +选项 + 命令

选项:

  • -n:指定间隔时间,默认是2秒
  • -c:清屏显示结果
  • –color:显示颜色
#每隔一秒高亮显示网络链接数的变化情况
[root@Node1 sh]# watch -n 1 -d netstat -ant
Every 1.0s: netstat -ant                                Wed Jul 12 16:31:04 2023
............

3、脚本练习

3.1、查看系统一共多少用户

排查所有用户的计划任务

#编写脚本
[root@Node1 sh]# vim user_count.sh
#!/bin/bash
#Time:2023年6月12日
#Author By LiangGaRy
#Userage:用于统计用户以及计划任务
#############################
name_total=$(wc -l < /etc/passwd)
names=$(cat /etc/passwd | awk -F : '{print $1}')
echo "当前系统中一共有$name_total个用户"
for i in $names
do
        crontab -u$(name) -l
        if [ $? -eq 0 ];then
        echo "$i 有计划任务;"
        fi
done

#执行查看
[root@Node1 sh]# bash user_count.sh 

3.2、计划任务脚本

自动输入时间,产生计划任务

[root@Node1 sh]# vim auto_cron.sh
#!/bin/bash
#Time:2023年6月12日
#Usage:用户自己输入自己想要的计划任务
########################
read -p "请输入分钟信息(00-59):" min
read -p "请输入小时信息(00-24):" hour
read -p "请输入日期信息)01-31):" date
read -p "请输入月份信息(01-12):" month
read -p "请输入信息信息(00-06):" week
read -p "请输入计划任务需要执行的命令或者脚本:" program
echo "$min $hour $date $month $week $grogram" >> /etc/crontab

你可能感兴趣的:(Linux-随笔,学习,笔记)