zoukankan      html  css  js  c++  java
  • Linux下的计划任务at,batch,crontab

    0x00前言:

    继上次的windows计划任务后,拓展研究下linux下的计划任务,能够执行计划任务有3个命令at,batch,crontab

    所谓的计划任务就是定时启动某个程序,可以是一组shell脚本,也可以是单一的输出

    0x01计划任务at命令:

    at在ubuntu,kali里面都是没有预先装好的

    首先用安装at

    apt-get install at

    查看使用帮助

    at --help

    #回显
    at: invalid option -- '-' Usage: at [-V] [-q x] [-f file] [-mMlbv] timespec ... at [-V] [-q x] [-f file] [-mMlbv] -t time at -c job ... atq [-V] [-q x] at [ -rd ] job ... atrm [-V] job ... batch

    看到batch也安装了,也说明了其实他们是一类的工具,之后再讲batch

    首先at的参数含义

    -V       参看版本
    -q x      使用x队列,可以理解为它有几组任务,每组相互独立,x就是组号。一般以abcd....英文来区别不同队列
    -f file    使用文件
    -m       给用户发送邮件
    -M       不给用户发送邮件
    -l       显示设置任务列表 
    -d x      删除编号为x的任

    首先来设置个输出hello的shell命令

    这里的<EOT>是按ctrl+D来提交任务,使用的相对时间后移5min,在桌面创建个1.txt并写入hello linux

    root@ubuntu:~/Desktop# at now +5 min
    warning: commands will be executed using /bin/sh
    at> echo "hello linux" > 1.txt
    at> <EOT>
    job 6 at Wed Mar  6 05:21:00 2019

    可以查看任务

    root@ubuntu:~/Desktop# at -l
    6    Wed Mar  6 05:21:00 2019 a root
    root@ubuntu:~/Desktop# 

    使用不同队列查看任务,就会发现运行的时候是默认a队列,所以b队列看不到这个任务

    root@ubuntu:~/Desktop# at -q a -l
    6    Wed Mar  6 05:21:00 2019 a root
    root@ubuntu:~/Desktop# at -q b -l
    root@ubuntu:~/Desktop#

    时间到了,文本自动生成

    除了能够使用相对时间以外,还可以使用绝对时间来进行定时操作

    root@ubuntu:~/Desktop# at 5:27
    warning: commands will be executed using /bin/sh
    at> echo "hello sijidou"
    at> <EOT>
    job 7 at Wed Mar  6 05:27:00 2019
    root@ubuntu:~/Desktop# 

    使用-d来进行任务的删除,删除-d带的参数是最前面那个编号,这里是7,上面那个例子的编号是6

    root@ubuntu:~/Desktop# at -l
    7    Wed Mar  6 05:27:00 2019 a root
    root@ubuntu:~/Desktop# at -d 7
    root@ubuntu:~/Desktop# at -l
    root@ubuntu:~/Desktop# 

    任务无论是删除,还是到时间正常运行,它都是累加的

    使用file来进行命令设置,首先创建个2.txt,写入命令

    然后使用-f 2.txt参数来设置任务

    root@ubuntu:~/Desktop# at -f 2.txt now +1 min
    warning: commands will be executed using /bin/sh
    job 8 at Wed Mar  6 05:33:00 2019
    root@ubuntu:~/Desktop#

    时间到了之后,产生了3.txt文件

    因为linux下的文件,其实后缀用处不大,都是看用什么指令来解释文件的内容的,看warning都知道这里at使用的/bin/sh,所以就把2.txt的内容当做shell来解释的

    最后说明下两个和at有稍微区别的atq和atrm不一的

    atq  列出当前的计划任务效果同 "at -l" 一样

    atrm  删除计划任务

    root@ubuntu:~/Desktop# at -f 2.txt now +1 min 
    warning: commands will be executed using /bin/sh
    job 10 at Wed Mar 6 05:36:00 2019

    root@ubuntu:~/Desktop# at -f 2.txt now +1 min warning: commands will be executed using /bin/sh job 11 at Wed Mar 6 05:36:00 2019 root@ubuntu:~/Desktop# atq 10 Wed Mar 6 05:36:00 2019 a root 11 Wed Mar 6 05:36:00 2019 a root root@ubuntu:~/Desktop# atrm 10 root@ubuntu:~/Desktop# atq 11 Wed Mar 6 05:36:00 2019 a root root@ubuntu:~/Desktop#

    最后是关于使用at权限问题,因为at可以使用/bin/sh啊,这个权限还是不错的

    能够限制权限的地方在安装at后,在/etc/目录下存在

    at.deny  #一开始存在的,它默认是空,它会限制里面的用户不能使用at
    at.allow  #刚安装好,并没有这个文件,但是如果创建它,它只会允许里面的用户使用at
    在at.allow和at.deny都存在的情况下,看at.allow
    在at.allow和at.deny都不存在的情况下,只能root使用a

    但是我测试了下,at.allow中,如果没有root,但是root还是能用at

    0x02计划任务batch命令:

    batch同at一样都是没有默认安装的,但是安装at的时候就带了batch

    但是batch不需要设置时间,那么不需要设置时间,它的任务是怎么执行的呢

    在系统平均负载量降到 0.8 以下时执行某项一次性的任务

    我这里直接输入了,就直接蹦出来了,说明此时平均负载量很低,也就是系统很清闲,没有大量运算

    batch支持些命令

    -f file    使用文件里面的shell脚本
    -q x    将计划任务加入某个队列
    -m       发送邮件给用户

    还可以看到上面截图是job 14,说明它这个任务表和at是一起的,batch相当于at命令的一部分

    0x03计划任务crontab命令:

    在渗透测试中,如果linux下的计划任务设置最常使用的就是crontab命令了吧

    因为相比较at命令,它首先是默认安装的(我的kali和新装的ubuntu都有),其次它与at不同在于,at只能定时某次的时间然后运行一次,而crontab能够设置每天多久自启动的计划任务,可以一次设置多次触发

    然后crontab的用户使用权限问题和at一样

    cron.deny 不允许使用crontab的用户    
    cron.allow 允许使用crontab的用户
    cron.allow优先度高于cron.deny
    #注意唯一不同在于 cron.allow,cron.deny都不存在时候,都可以用crontab

    而默认配置中cron.allow和cron.deny都是不存在的,因此意味着所有用户默认都能用crontab

     首先看crontab的语法

    sijidou@ubuntu:~$ crontab --help
    crontab: invalid option -- '-'
    crontab: usage error: unrecognized option
    usage:    crontab [-u user] file
        crontab [ -u user ] [ -i ] { -e | -l | -r }
            (default operation is replace, per 1003.2)
        -e    (edit user's crontab)
        -l    (list user's crontab)
        -r    (delete user's crontab)
        -i    (prompt before deleting user's crontab)
    sijidou@ubuntu:~$ 

    这里各个参数说明一下

    -e    进入编写
    -l    列出任务
    -r    删除任务
    -i    删除前给提示
    -u    指定某用户运行任务
    

    每条计划任务的格式书写如下

    min   hour   day   month   week   [user]   command
    0-59  0-23   1-31  1-12   0-7          echo "sijidou" > /home/sijidou/Desktop/1.tx

    前面5个参数可以是这些形式

    每个参数间用空格隔开
    *        表示任意
    1,2      表示1,2号都可以(这里假设是day的值)
    1-20    表示1号到20号都可以(这里假设是day的值)
    /10      表示每隔10天就执行一次(这里假设是day的值)

    举几个例子

    每月每周每日每小时51分的在桌面上生成有着"hello world"的1.txt文件

    51 * * * * echo "hello world" > /home/sijidou/Desktop/1.tx

    每过10天,在那天的每小时21分钟生成文件

    21 * /10 * * echo "hello world" > /home/sijidou/Desktop/1.txt

    每天的凌晨1点和2点的31分生成文件

    31 1,2 * * * echo "hello world" > /home/sijidou/Desktop/1.txt

    每周三到周五的每小时41分生成文件

    31 * * * 3-5 echo "hello world" > /home/sijidou/Desktop/1.txt

    接下来是如何把命令写进去

    带参数e会进入设置的文本文件(第一次会让你选是nano还是vim,它会看你系统装了什么编译器)进行编写,之后是直接跳进去

    它的原理是在/tmp/下生产一个随机后缀的文件,然后文件里面按每行算一条计划任务

    写好了后,查看任务,任务已经写进去了,但是这是sijidou用户,想要向root目录下写东西有点痴心妄想了2333

    再用crontab -e 打开还可以看还可以看原来的命令,但是文件名有变化

    删除文件直接使用crontab -r不需要带参数,它会把/tmp/目录下的临时文件直接删除,意味着你设置的所有计划任务都没了

    而-u参数只有root才能设置,这里用sijidou账号带-u参数,回显不能使用

    那么切换成root用户给sijidou设置任务

    再切换回sijidou来,发现写进去了,如果要继续编译直接输入crontab -e

    用root账号查看,删除sijidou账户的计划任务

    也可以不用依赖crontab生成的零时文件,用自己编译的文件设置计划任务

    0x04结语:

    参考链接

    at命令参考:https://www.cnblogs.com/diantong/p/9366449.html

     batch命令参考:https://blog.csdn.net/PecoVio/article/details/82428890

    crontal命令参考:https://www.jianshu.com/p/9619076b1172

    总参考:https://blog.csdn.net/kx_nullpointer/article/details/21299873

  • 相关阅读:
    web.xml中监听器如何顺序加载
    spring配置文件中util:properties和context:property-placeholder
    jquery实现上下浮动
    索引-mysql索引创建、查看、删除及使用示例
    MD5加密
    怎么去除innerHTML获得内容中的标签?
    数据库优化常用的几种小技巧
    数据库表的连接(Left join , Right Join, Inner Join)用法详解
    HTMl5的sessionStorage和localStorage
    json数据字典,以及数据在下拉框中显示
  • 原文地址:https://www.cnblogs.com/sijidou/p/10485983.html
Copyright © 2011-2022 走看看