乐趣区

关于linux:07Linux基础计划任务备份脚本变量定义和使用

@TOC

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

\#

打算工作 原理

原理 工夫的格局和语法(口试)

(注:每个用户都能够用的命令)

\# ==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

==*== 该范畴内的任意工夫

==,== 距离的多个不间断工夫点

==-== 一个间断的工夫范畴

==/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(注:查看哪个用户从哪里登录)==

\# ==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> <EOT> ==(注:退出 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>> 追加 ==

\=\=\=\=\=\=

== 不论正确的还是谬误的都往一个文件里重定向 ==

==&>==

==&>> 追加 ==

==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(注:每小时执行是每小时的第一分钟执行)

(注: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

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

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

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

xull wangtc hello

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

$mv $sg hello

\#


退出移动版