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 + min
warning: commands will be executed using /bin/sh
at> echo "hello linux" > .txt
at> <EOT>
job at Wed Mar ::

可以查看任务

root@ubuntu:~/Desktop# at -l
Wed Mar :: a root
root@ubuntu:~/Desktop#

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

root@ubuntu:~/Desktop# at -q a -l
Wed Mar :: a root
root@ubuntu:~/Desktop# at -q b -l
root@ubuntu:~/Desktop#

时间到了,文本自动生成

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

root@ubuntu:~/Desktop# at :
warning: commands will be executed using /bin/sh
at> echo "hello sijidou"
at> <EOT>
job at Wed Mar ::
root@ubuntu:~/Desktop#

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

root@ubuntu:~/Desktop# at -l
Wed Mar :: a root
root@ubuntu:~/Desktop# at -d
root@ubuntu:~/Desktop# at -l
root@ubuntu:~/Desktop#

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

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

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

root@ubuntu:~/Desktop# at -f .txt now + min
warning: commands will be executed using /bin/sh
job at Wed Mar ::
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
root@ubuntu:~/Desktop# at -f .txt now + min
warning: commands will be executed using /bin/sh
job at Wed Mar ::
root@ubuntu:~/Desktop# atq
Wed Mar :: a root
Wed Mar :: a root
root@ubuntu:~/Desktop# atrm
root@ubuntu:~/Desktop# atq
Wed Mar :: 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号都可以(这里假设是day的值)
- 表示1号到20号都可以(这里假设是day的值)
/ 表示每隔10天就执行一次(这里假设是day的值)

举几个例子

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

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

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

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

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

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

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

 * * * 3-5 echo "hello world" > /home/sijidou/Desktop/.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

Linux下的计划任务at,batch,crontab的更多相关文章

  1. Linux下的计划任务—crontab

    点击上方"开源Linux",选择"设为星标" 回复"学习"获取独家整理的学习资料! 来自:Linux就该这么学 crond 是linux下用 ...

  2. linux下设置计划任务执行python脚本

    linux下设置计划任务执行python脚本 简介 crontab命令被用来提交和管理用户的需要周期性执行的任务,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自 ...

  3. linux下利用shell脚本实现添加crontab任务

    本来直接用crontab -e 就可以打开vim,输入要执行的任务保存退出就可以添加任务直接启动运行了.但是今天组长说能不能写个shell不用打开vi就能添加到crontab的. 最先想到的是怎么在s ...

  4. Linux下开启计划任务日志

    crontab记录日志 修改rsyslog vim /etc/rsyslog.d/50-default.conf (我的是root用户) 搜索cron 把如下行之前的注释"#"去掉 ...

  5. Linux下计划任务:crontab 命令的权限说明

    Linux下的计划任务: 使用crontab命令来执行调度,在 Linux 下可以通过创建文件 /etc/cron.allow 或者 /etc/cron.deny 来控制权限,如果 /etc/cron ...

  6. Linux下的crontab定时、执行任务命令详解 oracle 自动备份

    在LINUX中,周期执行的任务一般由cron这个守护进程来处理[ps -ef|grep cron].cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间.cron的配置文件称为&qu ...

  7. linux系统下添加计划任务执行php文件方法

    在web开发过程中,经常需要设定一些定期执行的任务,比如商品定时上下架.我们以php文件为例,讲解linux下的计划任务,来看看吧   在web开发过程中,经常需要设定一些定期执行的任务,比如商品定时 ...

  8. Linux下定时执行脚本(转自Decode360)

    文章来自:http://www.blogjava.net/decode360/archive/2009/09/18/287743.html Decode360's Blog  老师(业精于勤而荒于嬉 ...

  9. Linux下的定时任务 - Cron服务

    最近搞咕自己的笔记系统,虽然现在是个人的使用,对于数据库的数据还是比较少,但是安全还是一个我必须注意的东西. (特别是前段时间中了比特币的病毒之后,更是让我关注了我的主机的安全的问题.) 今天的随记是 ...

随机推荐

  1. Confluence 6 如何备份和恢复

    如何备份 有关备份你数据库使用的命令与你使用的具体数据库有关,例如针对 PostgreSQL 数据库,备份命令为 pg_dump dbname > outfile. 你应该针对你使用的数据库不同 ...

  2. Confluence 6 已经存在的 Confluence 安装配置一个数据源连接

    如果你希望在使用 JDBC 直接方式的应用中切换到使用数据源: 停止 Confluence. 备份下面的文件,以防止你可能需要重新恢复你的配置: <installation-directory& ...

  3. Confluence 6 PostgreSQL 问题解决

    如果 Confluence 提示没有 class 文件,你可能将你的 JDBC 驱动放置到了错误的文件夹. 如果你不能从你从 Confluence 中连接到 PostgreSQL ,并且这 2 个服务 ...

  4. android studio 包名冲突解决

    Error: Execution failed for task ': app: packageAllDebugClassesForMultiDex'. > Java.util.zip.ZipE ...

  5. npm常用模块

    https://blog.csdn.net/heliumlau/article/details/70577727

  6. Python判断字符串是否xx开始或结尾

    判断是否xx开始 使用startswith 示例代码: String = "12345 上山打老虎" if str(String).startswith('1'): #判断Stri ...

  7. 数据结构c++实现代码-链表

    /*节点Node的相关声明与定义*/ //Node.h #include<iostream> using namespace std; template<typename T> ...

  8. 010-Python-socket编程

    客户端/服务器的架构 物理层:网卡,光缆,双绞线 数据链路层:包含源mac地址和目标的mac地址,通过广播通讯 网络层:跑的IP协议,IP地址可以定义到一个子网:通过ARP协议可以解析为mac地址: ...

  9. 20165323 实验二 Java面向对象程序设计

    一.实验报告封面 课程:Java程序设计 班级:1653班 姓名:杨金川 学号:20165323 指导教师:娄嘉鹏 实验日期:2018年4月16日 实验时间:13:45 - 15:25 实验序号:二 ...

  10. Idea设置行注释不显示在行首

    如图:idea使用ctrl+/注释时候,//都在行首,强迫症表示受不了 解决方法如图