linux使用find和crontab命令定期清理过期文件

crontab 命令

crontab 命令是 Linux 中用来设定重复执行命令或脚本的工具。它能够在指定的时间段内,按照需求以某一时间间隔执行命令或脚本。

crontab 的基本用法

crontab [-u <user>] [-e|-l|-r]
crontab <filename>

crontab <filename> 可以读入一个以 crontab 语法书写的文件,并依照文件内的指示执行定时任务。与此同时,crontab -l 能够在标准输出上列出当前用户所有的定时任务情况。因此,我们可以用 crontab -l > <filename> 来保存当前 crontab 的状况,在有需要的时候(比如误删除)用 crontab <filename> 读入恢复。

crontab -e 则会启动系统默认的编辑器。这个编辑器由系统环境变量 EDITOR 指定;例如 export EDITOR=vi,则 crontab -e 会启动 vi 来编辑当前用户的 crontab 定时任务文件。crontab -r 则会删除用户的所有 crontab 定时任务。

用来指定用户的 -u <user> 选项则会改变 -e/-l/-r 等选项的行为。如果不通过 -u 指定用户,则默认的操作都是针对当前用户的;反之,则针对指定的用户。例如 crontab -u Liam -r 则会删除用户 Liam 的 crontab 定时任务——当然,你需要有足够的权限这么做。

crontab 文件的格式

不管是用 crontab <filename> 从文件读入定时任务,还是用 crontab -e 编辑定时任务,我们都会接触到 crontab 格式的命令。

crontab 的命令格式如下:

从上图我们可以看出:

  1. 一条 crontab 命令分成六列,写在一行内;
  2. 前 5 列用于定时,指明什么时候开始执行;
  3. 第 6 列用于指定需要定时执行的命令或脚本;

此外,和 Shell 脚本一样,在 crontab 文件中,我们也可以用 # 来表示注释。

花式定时

在 crontab 命令中用于定时的前 5 列中,支持以下符号,用于「花式定时」:

  1. 星花(*):代表所有可能的值;
  2. 逗号(,):用逗号隔开同一字段的不同范围;
  3. 连字符(-):用连字符连接两个整数,表示整数范围;
  4. 斜线(/):实际上是除法斜线,用来指定时间间隔频率。

一些例子

有了这些知识,我们就可以看一些实例了。

# 每分钟执行一次
* * * * * command
# 每 5 分钟执行一次
*/5 * * * * command
# 每个小时的 15 分和 45 分执行一次
15,45 * * * * command
# 晚上 20:00 -- 20:15 每分钟执行一次
0-15 20 * * * command
# 每周一上午 10 点执行一次
0 10 * * 1 command

find —— 找些乐子

man find 给出的 find 命令的一般形式是:

find [-H] [-L] [-P] [-D debugopts] [-Olevel] path ... [expression]

其中 [-H] [-L] [-P] [-D debugopts] [-Olevel] 很少会用到。因此,find 命令的一般形式可以简化为 find path ... [expression];亦即,在一些路径(默认递归地包含子路径)中找到合适的文件,然后根据 expression 执行相应动作。

path ...: find 命令查找的路径

expression: 具体形式是 -parameters [-exec -ok]

-parameters 有很多,待下一节具体介绍常用的参数

-exec command {} \; 执行一条 Shell 命令

-ok command {} \; 同 -exec 的作用,不过在执行每条命令前,都会提示用户确认

常用的参数

-name : 按照文件名查找文件,接受通配符

find . -name "*.cpp": 在当前目录 (.) 及子目录下递归地查找所有后缀为 .cpp 的文件,并打印在标准输出中

-perm : 按照文件权限查找文件

find . -perm 755: 在当前目录 (.) 及子目录下递归地查找所有权限为 755 的文件(目录),并打印在标准输出中

find . -perm 644 -name "*.cpp": 在当前目录及子目录下 (.) 递归地查找所有权限为 644 的 .cpp 文件,并打印在标准输出中

-group : 按照文件的所属组查找

-user :  按照文件的所有者查找

find . -user search: 在当前目录 (.) 及子目录下递归地查找所有 search 账号所属的文件,并打印在标准输出中

-atime, -mtime, -amin, -mmin : a 开头的表示「按照上次访问时间查找」,m 开头的表示「按照上次修改时间查找」;-n 表示 n 时间内,+n 表示 n 时间以前

find . -atime +7: 在当前目录 (.) 及子目录下递归地查找所有上次访问在 7 天以前的文件,并打印在标准输出中

find . -mmin -10: 在当前目录 (.) 及子目录下递归地查找所有上次修改在 10 分钟以内的文件,并打印在标准输出中

-newer file1 ! file2 : 查找比 file1 新但是比 file2 旧的文件

-type [b|d|c|p|l|f] : 按照文件类型查找

b: 块设备文件

d: 目录

c: 字符设备文件

p: 管道文件

l: 符号链接文件

f: 普通文件

-follow : 如果 find 命令遇到符号链接文件,就跟踪至链接所指向的文件

-delete : 删除查找到的文件或目录

定期清理

至此,定期清理无用的文件就变得很简单了。我们只需要在 crontab 里结合 find 命令的 -delete 选项即可。

0 8 * * * find /home/s/coredump -user search -type f -mtime +7 -delete

这里,我们在每天早上 8 点整执行 find 命令;该命令会在 /home/s/coredump 目录下寻找 search 用户创建的普通 7 天前的文件,然后删除掉。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

(0)

相关推荐

  • linux find下如何统计一个目录下的文件个数以及代码总行数的命令

    今天遇到如题所示问题,网上捣鼓半天,有收获 知道指定后缀名的文件总个数命令:        find . -name "*.html" | wc -l 知道一个目录下代码总行数以及单个文件行数:        find . -name "*.html" | xargs wc -l

  • 每天一个linux命令之locate 命令

    locate 让使用者可以很快速的搜寻档案系统内是否有指定的档案.其方法是先建立一个包括系统内所有档案名称及路径的数据库,之后当寻找时就只需查询这个数据库,而不必实际深入档案系统之中了.在一般的 distribution 之中,数据库的建立都被放在 crontab 中自动执行. 1.命令格式: Locate [选择参数] [样式] 2.命令功能: locate命令可以在搜寻数据库时快速找到档案,数据库由updatedb程序来更新,updatedb是由cron daemon周期性建立的,locat

  • Linux中文件的五个查找命令总结

    Linux的查找命令有5个,分别如下: which:在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果: type:用于区分某个命令到底是由shell自带的,还是由shell外部的独立二进制文件提供的.如果一个命令是外部命令,那么使用-p参数,会显示该命令的路径,相当于which命令.type命令其实不能算查找命令: whereis:只能用于程序名的搜索,而且只搜索二进制文件(参数-b).man说明文件(参数-m)和源代码文件(参数-s): locate:相当于find

  • linux的一个find命令配合rm删除某天前的文件方法

    语句写法:find 对应目录 -mtime +天数 -name "文件名" -exec rm -rf {} \; 例1: 将/usr/local/backups目录下所有10天前带"."的文件删除 find /usr/local/backups -mtime +10 -name "*.*" -exec rm -rf {} \; find:linux的查找命令,用户查找指定条件的文件 /usr/local/backups:想要进行清理的任意目录 -

  • linux命令之find命令简单概述

    Linux下find命令在目录结构中搜索文件,并执行指定的操作.Linux下find命令提供了相当多的查找条件,功能很强大.由于find具有强大的功能,所以它的选项也很多,其中大部分选项都值得我们花时间来了解一下.即使系统中含有网络文件系统( NFS),find命令在该文件系统中同样有效,只你具有相应的权限. 在运行一个非常消耗资源的find命令时,很多人都倾向于把它放在后台执行,因为遍历一个大的文件系统可能会花费很长的时间(这里是指30G字节以上的文件系统). 1.命令格式: find pat

  • linux find命令之xargs简单概述

    在使用 find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行.但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现溢出错误.错误信息通常是"参数列太长"或"参数列溢出".这就是xargs命令的用处所在,特别是与find命令一起使用. find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样.这样它可以先处理最先获取的一

  • Linux中 find查找命令用法详解

    Linux下查找文件的命令有两个,分别是locate 和 find. locate指令和find找寻档案的功能类似,但locate是透过update程序将硬盘中的所有档案和目录资料先建立一个索引数据库,在 执行loacte时直接找该索引,查询速度会较快,索引数据库一般是由操作系统管理,但也可以直接下达update强迫系统立即修改索引数据库.简单介绍下它的两个选项. #locate -i        //查找文件的时候不区分大小写 比如:locate  –i   passwd -n      

  • 详解Linux中两个查找命令locate和find教程

    Linux中有很多查找命令,今天主要讲解locate,find两个命令. 1.locate locate命令其实是"find -name"的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb),这个数据库中含有本地所有文件信息.Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件.为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库. (

  • linux使用find和crontab命令定期清理过期文件

    crontab 命令 crontab 命令是 Linux 中用来设定重复执行命令或脚本的工具.它能够在指定的时间段内,按照需求以某一时间间隔执行命令或脚本. crontab 的基本用法 crontab [-u <user>] [-e|-l|-r] crontab <filename> crontab <filename> 可以读入一个以 crontab 语法书写的文件,并依照文件内的指示执行定时任务.与此同时,crontab -l 能够在标准输出上列出当前用户所有的定时

  • 在 Linux 中不使用 CD 命令进入目录/文件夹的方法

    众所周知,如果没有 cd 命令,我们无法 Linux 中切换目录.这个没错,但我们有一个名为 shopt 的 Linux 内置命令能帮助我们解决这个问题. shopt 是一个 shell 内置命令,用于设置和取消设置各种 bash shell 选项,由于它已安装,因此我们不需要再次安装它. 是的,我们可以在启用此选项后,可以不使用 cd 命令切换目录. 我们将在本文中向你展示如何操作.这是一个小的调整,但对于那些从 Windows 迁移到 Linux 的新手来说非常有用. 这对 Linux 管理

  • 详解Unix/Linux中周期执行指令Crontab命令

    简介 crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令.该命令从标准输入设备读取指令,并将其存放于"crontab"文件中,以供之后读取和执行. 通常,crontab储存的指令被守护进程激活,crond常常在后台运行,每一分钟检查是否有预定的作业需要执行.这类作业一般称为cron jobs. cron 是 Unix/Linux 中提供定期执行 shell 命令的服务,包括 crond 和 crontab 两部分: crond: cron 服务的守护

  • Linux使用scp远程传输命令进行服务器文件互传(阿里云服务器)

    前几天 WordPress大学 所在的服务器环境不太稳定,CPU 占用总是 100%,折腾了好几次都没有找到原因,只好考虑重新配置环境,考虑到配置和优化好环境需要几个小时,总不能将网站停掉吧,所以要将 WordPress大学 网站临时迁移到另外的服务器运行,配置好再迁回来. 看来下阿里云的两个云服务器,都是同一个区的,所以决定通过内网进行文件传输,速度快不说(正常传输文件的速度能达到35m~50m/s),还不占用公网带宽. 阿里云云服务器有一个安全组策略,可能需要设置下 内网入.出方向的IP白名

  • Linux环境使用crontab命令设置定时周期性执行任务【含php执行代码】

    本文实例讲述了Linux环境使用crontab命令设置定时周期性执行任务.分享给大家供大家参考,具体如下: 从linux帮助中查看crontab命令有以下参数: -u username:指定用户操作定时器 -e:编辑定时器(所有) -l:查看定时器 -r:删除定时器(从/var/spool/cron目录中删除某个用户的crontab文件,默认删除当前用户的) -i:删除定时器(删除之前给出确认提示) 使用场景1: 执行一些周期性统计的业务操作,例如每天凌晨0:00统计前一天所有业务员及各个小组的

  • Linux crontab 命令格式与详细示例(推荐)

    基本格式 : * * * * * command 分 时 日 月 周 命令 第1列表示分钟1-59 每分钟用*或者 */1表示 第2列表示小时1-23(0表示0点) 第3列表示日期1-31 第4列表示月份1-12 第5列标识号星期0-6(0表示星期天) 第6列要运行的命令 crontab文件的一些例子: 30 21 * * * /usr/local/etc/rc.d/lighttpd restart 上面的例子表示每晚的21:30重启apache. 45 4 1,10,22 * * /usr/l

  • Linux中使用crontab命令启用自定义定时任务实例

    Linux下的定时执行主要是使用crontab文件中加入定制计划来执行,设置比Windows稍微复杂一些(因为没有图形界面嘛),但是也不是非常复杂,有需要的朋友可以了解一下. 一 简介 Linux下的任务调度分为两类,系统任务调度和用户任务调度 系统任务调度:系统需要定期执行的任务,比如重启.日志清理等,其配置文件是:/etc/crontab 用户任务调度:某个用户需要定期执行的任务.用户可以使用 crontab 命令来配置自己的定时任务.所有用户配置的定时任务都存放在 /var/spool/c

  • Linux命令下crontab命令

    crontab是一个用来设置.删除或显示供守护进程cron执行的定时任务的命令.每一个用户都可以拥有属于自己的定时任务,定时任务文件默认以用户名命名,并放在/var/spool/cron目录,该目录普通用户无访问权限. 可以通过cron.allow 和 cron.deny文件管理用户使用crontab的权限.如果cron.allow存在,用户必须列在其中才会被允许使用cron:如果cron.deny存在,被列在其中的用户禁止使用cron:如果两者都不存在,只有超级用户才能使用cron.在Cent

  • Linux定时执行任务at和crontab命令详解

    Linux下的两种定时执行任务的方法:at命令,以及crontab服务,小编整理了关于这2个命令的详细用法,希望大家学习后能够更加深入的理解. (1)at命令 假如我们只是想要让特定任务运行一次,那么,这时候就要用到at监控程序了. 设置at命令很简单,指示定运行的时间,那么就会在哪个时候运行.at类似打印 进程,会把任务放到/var/spool/at目录中,到指定时间运行它 .at命令相当于另一个shell,运行at time命令时,它发送一个个命令,可以输入任意命令或者程序.at now +

  • Linux定时任务Crontab命令使用详解与总结

    crontab命令是Unix和Linux用于设置周期性被执行的指令,是互联网很常用的技术,很多任务都会设置在crontab循环执行 如果不使用crontab,那么任务就是常驻程序,这对你的程序要求比较高,一个要求你的程序是24X7小时不宕机,一个是要求你的调度程序比较可靠,实际工作中,90%的程序都没有必要花这么多时间和精力去解决上面的两个问题的,只需要写好自己的业务逻辑,通过Crontab这 工业级程序去调度就行了,Crontab的可靠性,健壮性,大家应该是毫无疑问的. crontab命令简易

随机推荐