ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

07_Linux基础-计划任务-备份脚本-变量定义和使用

2022-09-02 18:31:21  阅读:233  来源: 互联网

标签:07 cali 备份 cron etc 任务 Linux txt root


@

目录

07_Linux基础-计划任务-备份脚本-变量定义和使用


一. 计划任务

主要内容:周期性的计划任务crontab

/var/spool/cron/ 统一存放计划任务的目录

/var/log/cron 日志文件

/etc/cron cron.daily/ cron.hourly/ cron.monthly/ cron.weekly/ crontab的顺风车

/etc/crontab

crontab -l

crontab -e

crontab -u cali -e

crontab -u cali -l

  ==如何知道计划任务是否执行?==

  ==用户没有登录,计划任务是否执行?答:会执行==

  ==黑客也会去利用计划任务定时执行程序,你如何去检查?==

  ==annacron 将电脑主机因为系统故障关机导致计划任务没有被执行,正常启动后,anacron会去检测没有执行的计划任何,重新执行一次==

at 一次性的计划任务

at 11:45

at -l

cron

计划任务

1.什么是计划任务? (闹钟)

  计划什么时候去做什么事情

一次性的计划任务

at

周期性的计划任务

crontab

linux系统里的执行计划任务的进程--》crond

crond会每分钟去检查下所有用户的计划任务

# ps aux|grep crond

root 887 0.0 0.1 36300 3508 ? Ss 9月24 0:00 /usr/sbin/crond -n

root 16948 0.0 0.0 12320 984 pts/0 S+ 10:05 0:00 grep --color=auto crond

# cd /var/spool/cron/ (注:统一存放计划任务的目录)

# ls

#

计划任务 原理

image-20220503205140202

原理 时间的格式和语法(笔试)

image-20220503205205407

(注:每个用户都可以用的命令)

# crontab -l (注:查看当前用户的计划任务)(每个用户只能看自己的,root用户能看所有的)

no crontab for root

#

# crontab -e (注:创建计划任务)

…… (注:vim编辑器 本质上是文本文件)

# crontab -l

30 4 * * * bash /lianxi/9_25/backup_log.sh

*/5 * * * * bash /lianxi/9_25/backup_log.sh

50 3 6-9 10 * bash /lianxi/9_25/backup_log.sh

image-20220503205331550

* 该范围内的任意时间

间隔的多个不连续时间点

- 一个连续的时间范围

/n 指定间隔的时间频率

(注:crond进程 最低的时间间隔是1分钟)

(注:时间不能冲突 日期和星期不能冲突)

#

# cd /var/spool/cron/ (注:统一存放计划任务的目录,一个用户对应一个文件名)

# ls

cali liangluyao root

# cat root (注:文件里面 就是cronta -e编辑的)

30 4 * * * bash /lianxi/9_25/backup_log.sh

*/5 * * * * bash /lianxi/9_25/backup_log.sh

50 3 6-9 10 * bash /lianxi/9_25/backup_log.sh

#

# ll (注:每一个用户的计划任务都会放在/var/spool/cron/目录下)

总用量 12

-rw-------. 1 cali cali 31 9月 25 10:27 cali

-rw-------. 1 liangluyao liangluyao 31 9月 25 10:28 liangluyao

-rw-------. 1 root root 139 9月 25 10:25 root

#

问:如何知道计划任务是否执行?

答:看日志文件,/var/log/cron。

  ==或者直接去看效果。==

======================

日志文件(注:记录crond执行的计划任务,存放在/var/log/cron,用来排错。)

# tail -f /var/log/cron (注:tail -f 盯着文件末尾看)

Sep 25 10:30:01 sanchuang-linux CROND[17143]: (root) CMD (bash /lianxi/9_25/backup_log.sh)

Sep 25 10:30:01 sanchuang-linux CROND[17147]: (liangluyao) CMD (date >>~/liang.txt)

Sep 25 10:30:02 sanchuang-linux CROND[17119]: (root) CMDOUT (tar: 从成员名中删除开头的“/”)

Sep 25 10:30:02 sanchuang-linux CROND[17119]: (root) CMDOUT (tar: /var/log/audit/audit.log: 在我们读入文件时文件发生了变化)

Sep 25 10:30:02 sanchuang-linux CROND[17155]: (cali) CMD (date >>~/cali.txt)

示例1(root用户):

每天早上7:50自动开启sshd服务,22点50时关闭

service sshd start (注:开启sshd服务)

service sshd stop (注:关闭sshd服务)

50 7 * * * service sshd start

50 22 * * * service sshd stop

每隔5天的12点整清空一次FTP服务器公共目录/var/ftp/pub

0 12 /5 * * rm -rf /var/ftp/pub==/ (注:清空:删除里面所有东西)==

每周六的7:30时,重新启动httpd服务

service httpd restart (注:重启httpd服务)

30 7 * * 6 service httpd restart

每周一、三、五的17:30时,打包备份/etc/httpd目录

30 17 * * 1,3,5 tar czf /backup/httpd.tar.gz /etc/httpd (注:/backup/是备份目录)

示例2(jerry用户): (注:宿主目录:~/)

每周日晚上23:55时将“/etc/passwd”文件的内容复制到宿主目录中,保存为pwd.txt文件

55 23 * * 0 /usr/bin/cp /etc/passwd ~/pwd.txt (注:命令的绝对路径)

/etc/crontab 是cron的一个配置文件

# vim /etc/crontab

SHELL=/bin/bash (注:计划任务执行命令时用/bin/bash执行)

PATH=/sbin:/bin:/usr/sbin:/usr/bin (注:它有自己的PATH变量,和shell的PATH变量不同)

MAILTO=root (注:所有 计划任务里的命令,建议使用命令的绝对路径,因为PATH变量的问题)

  ==(注↑:默认情况,计划任务出了问题,crontab会给root发邮件)==

# For details see man 4 crontabs

# Example of job definition: (注:对命令的解释)

# .---------------- minute (0 - 59)

# | .------------- hour (0 - 23)

# | | .---------- day of month (1 - 31)

# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...

# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat

# | | | | |

# * * * * * user-name command to be executed

# crontab -u cali -e (注:用root用户为cali创建计划任务)

# crontab -u cali -l (注:查看)

1.电脑关机了计划任务是否执行?答:不执行

2.用户没有登录,计划任务是否执行?答:会执行

# w (注:查看哪个用户从哪里登录)

img

# tail -f /var/log/cron (注:日志文件)

3.黑客也会去利用计划任务定时执行程序,你如何去检查?

  	去==/var/spool/cron==目录下查看每一个计划任务文件

  	看日志 ==/var/log/cron==

  	crontd的顺风车目录	(如下)

#

# cd /etc/cron*******

cron.d/ cron.daily/ cron.deny cron.hourly/ cron.monthly/ crontab cron.weekly/

# cd /etc/cron

(注:crontab的顺风车)

黑客也可以把需要执行的程序放到这些文件夹里

cron.daily --》Linux系统里要求crond每天去执行的事情

cron.hourly --》Linux系统里要求crond每小时去执行的事情

cron.monthly --》Linux系统里要求crond每月去执行的事情

cron.weekly --》Linux系统里要求crond每周去执行的事情

(注:# ls cron.daily

  	 logrotate	(每天都会执行,crond每天运行一次(脚本,用sh执行))

  	\# ls  cron.hourly

  	0==anacron	(annacron 将电脑主机因为系统故障关机导致计划任务没有被执行,正常启动后,anacron会去检测没有执行的计划任何,重新执行一次)==

at

at 命令 一次性的计划任务

yum install at -y

# at 11:45

warning: commands will be executed using /bin/sh

at> touch $(date +%F).txt

at> (注:退出 Ctrl+D)

job 1 at Fri Sep 25 11:45:00 2020

Can't open /var/run/atd.pid to signal atd. No atd running?

# at -l (注:查看)

1 Fri Sep 25 11:45:00 2020 a root

#


二. 计划任务练习-备份脚本

主要内容:chmod 777 /opt/fnum.txt (注:设置任何用户都可以对文件/opt/fnum.txt读写执行

2>/dev/null

/dev/null 特殊的文件,相当于黑洞文件,任何的内容重定向到这个文件都会消失,不保存

正确的输出重定向

>

>>

错误的输出重定向

2>

2>> 追加

不管正确的还是错误的都往一个文件里重定向

&>

&>> 追加

>1.txt 清空1.txt文件里的内容

删除xull这个用户所有的计划任务 rm -rf /var/spool/cron/xull

  													==\# crontab  -u xull -r (注 *)==

取消计划任务

脚本+计划任务=自动化

先编写脚本,再创建计划任务

计划任务实验

计划任务实验:

1.为root用户编写计划任务:每周2、4、6的10点到17点的每隔5分钟自动将/etc/passwd、/etc/shadow这2个重要系统文件到user.备份的日期和时间.tar.gz这种名称的文件里(例如:user.201202011615.tar.gz)备份文件放到/opt/目录下面。

backup_shadow_pwd.sh

# cat backup_shadow_pwd.sh

#!/bin/bash

mkdir -p /opt #注:date +%Y%m%d%H%M%S , date后面有空格

tar czf /opt/user.$(date +%Y%m%d%H%M%S).tar.gz /etc/passwd /etc/shadow

# $(date +%Y-%m-%d-%H) 注意空格 上面的

crontab -e

*/5 10-17 * * 2,4,6 bash /lianxi/9_25/backup_shadow_pwd.sh #(注:路径要接对,绝对路径)

2.root用户在/opt新建了一个文件fnum.txt专门用来统计普通用户的文件个数。请为普通用户hello编写计划任务:要求每5分钟,将系统中属于hello用户的文件的个数自动保存到/opt/fnum.txt文件中。内容格式为:“日期时间 姓名 拥有的文件个数是:数目”。每行中间用“*************************”隔开

file_num.sh

# touch /opt/fnum.txt (注:新建空文件,普通用户建不了,root用户去建

# chmod 777 /opt/fnum.txt (注:设置任何用户都可以对文件/opt/fnum.txt读写执行

[cali@sanchuang-linux ~]$ crontab -l

*/5 * * * * date >>~/cali.txt

5 12-18 * * * date >>~/cali.txt

*/1 * * * * bash /home/cali/file_num.sh

[cali@sanchuang-linux ~]$ pwd

/home/cali

$ cat file_num.sh (注:脚本放在普通用户家目录里)

#!/bin/bash

fnum=$(find / -user cali -type f 2>/dev/null |wc -l) (注:普通用户 文件权限不够 是出错的)

(注↑:错误重对象)

ctime=$(date +%F_%H%M%S)

echo "${ctime} cali the number of files : $fnum" >>/opt/fnum.txt (注:追加重定向 写到文件里去)

echo "******************************" >>/opt/fnum.txt (注:追加重定向 写到文件里去)

$

$ crontab -e (注:是哪个用户就哪个用户创建计划任务,cali创建)

*/1 * * * * bash /home/cali/file_num.sh

$ pwd

/home/cali (注:脚本的路径)

每行中间用“*************************”隔开 解决方法

# cat a.sh

echo "helllo"

echo "**********************"

echo "cali"

echo "**********************"

#

# num=$(find / -user liangluyao |wc -l)

$ find / -user cali -type f 2>/dev/null|wc -l

/dev/null 特殊的文件,相当于黑洞文件,任何的内容重定向到这个文件都会消失,不保存

null 零,空,无效的

重定向

正确的输出重定向

>

>>

======

错误的输出重定向

2>

2>> 追加

======

不管正确的还是错误的都往一个文件里重定向

&>

&>> 追加

img

ls 命令执行成功重定向到1.txt 执行失败重定向到2.txt

$ ls >1.txt 2>2.txt

$ >1.txt 清空1.txt文件里的内容

$ cat 1.txt

$

$ ls &>1.txt 不管正确的还是错误的都往一个文件里重定向

练习总结

练习总结:

问题:

  1. 2>/dev/null

  2. 如何查看效果

# cat fnum.txt

# tail -f /var/log/cron (日志文件)

  1. 取消计划任务

删除xull这个用户所有的计划任务 rm -rf /var/spool/cron/xull

  													==\# crontab  -u xull -r (注 *)==

将文件里的计划任务注释或者删除 #*/1 * * * * bash /home/xull/file_num.sh

# cd /var/spool/cron/ ——》# rm -rf xull # crontab -u xull -r

# cd /var/spool/cron/ ——》# vim xull ——》 加 # 注释掉

  1. 某个用户的计划任务如何创建

  2. 文件的路径问题和权限问题(root可以访问任务地方的文件,但是普通不行,只能访问有限的路径)

将root用户的所有计划任务追加到xull用户的计划任务里

# cd /var/spool/cron

# cat root >>xull (注:注意权限问题,能否访问)

每一个用户的计划任务都存放在一个文件里 /var/spool/cron/

2.root用户在/opt2新建了一个文件fnum.txt专门用来统计普通用户的文件个数。请为普通用户xull编写计划任务:要求每5分钟,将系统中属于xull用户的文件的个数自动保存到/opt2/fnum.txt文件中。内容格式为:“日期时间 姓名 拥有的文件个数是:数目”。每行中间用“*************************”隔开

使用root用户新建/opt2目录

mkdir /opt2

cd /opt2/

touch /opt2/fnum.txt 文件

chmod 777 /opt2/fnum.txt 授权

xull用户需要去编写脚本,创建计划任务(普通用户)

脚本:建议放在用户的家目录下

# su - xull

上一次登录:五 9月 25 15:53:35 CST 2020pts/1 上

$ pwd

/home/xull

$ ls

$ vim file_num.sh (注:脚本放到自己的家目录下,用户xull去创建)

$ cat file_num.sh

#!/bin/bash

num=$(find / -user xull -type f 2>/dev/null |wc -l)

#current time (注:当前的时间)

ctime=$(date +%F%H%M%S)

echo "${ctime} xull 文件数量是$num" >>/opt2/fnum.txt (注:>>追加)

echo "****************************" >>/opt2/fnum.txt (注:一行隔开)

$

(注:vim交互式的。脚本是背后执行的,用echo)

$ crontab -e

*/1 * * * * bash /home/xull/file_num.sh

$

切换到root用户

$ exit

# cd /var/spool/cron/ (注:该目录下文件存放计划任务)

# ls

cali liangluyao root xull

#cat xull (注:文件存放计划任务)

*/1 * * * * bash /home/xull/file_num.sh


三. 黑客-计划任务

主要内容:假如你是黑客,想在别人的机器上,每10分钟让它的服务器重启一次或者每天重启一次

关机命令:init 6

  			reboot

1.停止crond服务

# service crond stop

2.查找可能存放计划任务的目录

/var/spool/cron (注:先挪走)

/etc/cron.d (注:与cron.hourly 有关)

/etc/cron.weekly

/etc/cron.daily

/etc/cron.monthly

3.检查发现没有问题了,再重新启动crond服务

# service crond start

Redirecting to /bin/systemctl start crond.service

# ps aux|grep crond

实在有的话

# tail -f /var/log/cron (日志文件)

开机启动流程

# cd /root (注:root用户家目录下)

# ls -a (注:隐藏文件)

# vim .bashrc

# vim .bash_profile

# vim /etc/profile (注:可以快捷筛选查找 /reboot /init)

# vim /etc/bashrc (注:可以快捷筛选查找 /reboot /init)

# cat /etc/rc.local

假如你是黑客,想在别人的机器上,每10分钟让它的服务器重启一次或者每天重启一次

====

192.168.0.45 root 123456

关机命令:init 6

  			reboot

============================

在各个路径下看 有没有可疑的 init6 和 reboot

1.停止crond服务

# service crond stop

2.查找可能存放计划任务的目录

/var/spool/cron (注:先挪走)

/etc/cron.d (注:与cron.hourly 有关)

/etc/cron.weekly

/etc/cron.daily

/etc/cron.monthly

3.检查发现没有问题了,再重新启动crond服务

# service crond start

Redirecting to /bin/systemctl start crond.service

# ps aux|grep crond

root 1506 3.6 0.1 36304 3656 ? Ss 16:54 0:00 /usr/sbin/crond -n

root 1511 0.0 0.0 12320 1052 pts/0 S+ 16:54 0:00 grep --color=auto crond

#

实在有的话

# tail -f /var/log/cron (日志文件)

(注:通过日志去排查)

=============================

集中放计划任务的地方 /var/spool/cron/

# cd /var/spool/cron/

# ls

cali liangluyao root xull

# cat cali

……(查看有没有可疑的,vim全部注释掉)

或者把所有文件全部挪走,如下操作

# ls

cali liangluyao root xull

# mkdir /backup (注:根下面建一个/backup 目录)/backup 备份目录

mv * /backup/ (把文件cali liangluyao root xull 挪到 /backup 目录下)

计划任务停了,crond不会执行

# cd /backup/

# ls

cali liangluyao root xull

# cat cali (注:把计划任务文件挪走后,再再/backup目录下 一个个排查)

……

# cat liangluyao

……

# w (注:查看哪些用户登录)

=======================================

顺风车

# cd /etc/cron.daily

  \# ls

  \# vim …

# cd /etc/cron.hourly/

# cd /etc/cron.monthly

# cd /etc/cron.weekly

# cd /etc/cron.d (注:每小时执行是每小时的第一分钟执行)

img

(注:run-parts 是一个命令,运行这个文件夹里的所有文件)

=======================================================

开机启动流程

# cd /root (注:root用户家目录下)

# ls -a (注:隐藏文件)

# vim .bashrc

# vim .bash_profile

# vim /etc/profile (注:可以快捷筛选查找 /reboot /init)

# vim /etc/bashrc (注:可以快捷筛选查找 /reboot /init)

# cat /etc/rc.local

===============================================================================


四. 变量定义和使用

主要内容:

  变量的命名:1.下划线命名法 (shell里建议)2.驼峰命名法3.匈牙利命名法

  变量命名的注意事项

  shell里如果变量没有定义,输出的是空值

  ==env==  查看shell里的==环境变量==

  ==set==  查看当前shell里==所有的变量==

  ==export 输出变量为全局变量==

  \# ==echo $$  (注:显示当前bash的进程号)(注:$$代表当前bash的进程号)==

  \# ==bash		(注:起一个子进程,子bash)==

  \# ==echo "$mv  $sg hello"	(注:输出一串内容的时候,用双引号引起来)==

  \# ==echo '$mv  $sg hello'		(注:单引号:所见即所得  $接变量名不会引用变量的值)==
shell编程
1.变量的定义
variable  变量的

sg=tanglf

变量的命名:
1.下划线命名法 (shell里建议)
	sc_sg=tanglf
2.驼峰命名法
	ScSg=wangtc
	小驼峰
		scSg=wangtc
	大驼峰
		ScSg=wangtc
3.匈牙利命名法
变量命名的注意事项:
	1.不是以数字开头
	2.不要全部是数字
	3.不要包含特殊符号 #!@^$<>等
	4.=左右不能有空格

linux系统里的环境变量都是大写的

自定义变量尽量使用小写

变量尽量要先定义后使用

shell里如果变量没有定义,输出的是空值

# sc_sg=zhangxueyou

# echo $sg_sg

  								==(←注:变量sg_sg没有定义,输出的是空值)==

# echo $sc_sg

zhangxueyou

# echo $sgsg/$mvmv

/ (←注:变量{sgsg} {mvmv}没有定义,输出的是“/”根)

#

# rm -rf $sgsg/$mvmv

rm: 在'/' 进行递归操作十分危险

rm: 使用 --no-preserve-root 选项跳过安全模式

#

env 查看shell里的环境变量

set 查看当前shell里所有的变量

变量是有作用域

全局变量

局部变量

export 输出变量为全局变量

  ==用法:先定义再输出==

ssh访问22号端口,sshd监听22号端口

web服务是80端口

# echo $$ (注:显示当前bash的进程号)(注:$$代表当前bash的进程号)

1425

#

# export sg (注:输出sg这个变量为全局变量)

# echo $$

1425

# mv=xull

# bash (注:起一个子进程,子bash)

# echo $mv

  			==(注:输出为空,变量不继承)==

# echo $$

1598

# mv=xull

# export mv (注:输出变量为全局变量)(注:export 输出)

# bash (注:起一个子进程,子bash)

# echo $mv

Xull (注:子进程继承了变量)

#

# vim /root/.bash_profile

img

输出一串内容的时候,用双引号引起来

单引号:所见即所得 $接变量名不会引用变量的值

# echo "$mv $sg hello" (注:输出一串内容的时候,用双引号引起来)

xull wangtc hello

# echo '$mv $sg hello' (注:单引号:所见即所得 $接变量名不会引用变量的值)

$mv $sg hello

#


标签:07,cali,备份,cron,etc,任务,Linux,txt,root
来源: https://www.cnblogs.com/mycpen/p/16650904.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有