计划任务和查找文件
计划任务
一次性计划任务 atd
at命令管理一次性计划任务 服务atd
at 管理工具
at time 创建计划任务,交互式输入,ctrl+d退出
at time < myscriptfile 从脚本输入
at -l列出计划任务
at -c jobnum 查看计划任务的详细信息
at -d jobnum 删除计划任务
atq 查看计划任务
at -q 指定任务队列a-z(优先级) a优先级高
/var/spool/at 任务内容
time 举例
8:05am
4pm +3days
4:00 2022-04-10
teatime tomorrow
具体示例文件:/usr/shar/doc/at/timespec
at 对用户进行限制
/etc/at.allow 允许
/etc/at.deny 拒绝
周期任务crond
命令crontab 管理工具
crontab -l #列出当前用户下的 cron 服务的详细内容
crontab -u user1 -l #列出指定用户 user1 下的 cron 服务的详细内容
crontab -r #删除 cron 服务
crontab -e #编辑 cron 服务
/var/spool/cron 存放计划任务
写法
可以参考/etc/crontab 模板
分 时 日 月 周 用户 命令(尽量写绝对路径)
分:0-59
时:0-23
日:1-31
月:1-12
周:0-7
特殊符号:
- *代表任意
- /指定间隔时间 */10 每隔10分钟执行
- -代表从某个数字到某个数字之间执行 7-12
- , 6,10-13,20 指定时间 6点,10到13点,20点执行
cron任务保存文件
建议不使用crontab管理命令来创建周期计划任务,而是在/etc下相关文件写周期任务
/etc/crontab 系统任务调度的配置文件
/etc/cron.*
/etc/cron.d自定义
/etc/cron.deny 拒绝
/etc/cron.allow 允许
cron.d/ #是系统自动定期需要做的任务,但是又不是按小时,按天,按星期,按月来
执行的,那么就放在这个目录下面。
cron.deny #控制用户是否能做计划任务的文件;
cron.monthly/ #每月执行的脚本;
cron.weekly/ #每周执行的脚本;
cron.daily/ #每天执行的脚本;
cron.hourly/ #每小时执行的脚本;
crontab #主配置文件 也可添加任务;
查找处理文件
locate 和find 都要对目录有rx权限才能搜到
locate 基于本地数据库查找文件
- 数据库必须时管理员更新的,手动更新数据库updatedb,生成后数据库会自动更新数据库
- 完整的路径将被查找,不止文件名 模糊匹配,文件名可以部分
- 要对被搜索的目录有rx权限, 有RX权限 ,才能看到目录下的内容
locate 文件名
-i 忽略大小写
-n 显示匹配到的前n条记录
find查找文件,遍历查找
find [dir1...] [匹配规则..] [处理...]
精确匹配,文件名要正确
实时搜索目录树,比locate慢但更精确
不给定查找目录,默认当前目录,要对目录有rx权限
不指定匹配规则,将匹配所有文件
find查找条件
- 根据文件名,inode
- 根据属主,属组查找
- 根据文件类型
- 根据逻辑组合条件
- 根据文件大小
- 根据时间戳
- 根据权限
匹配规则
- 目录层次 maxdepth mindepth
find / maxdepth 3 mindepth 2 -name '*.conf'
- 文件名
-name 文件名称
-iname 文件名称 不区分大小写
-inum n: 按inode号查找
-links n: 链接数为n的文件
- 拥有人拥有组
-uid UserID: 查找属主为指定的UID号的文件
-user
-gid GroupID: 查找属组为指定的GID号的文件
-group
-nouser: 查找没有属主的文件
-nogroup: 查找没有属组的文件
- 逻辑运算符
-a : 表示并且,默认不加就是-a
-o:代表或者
-not 或者 ! :非
find /home ( -user user1 -a -user4 user4 ) -ls
find /home ( -user user1 -o -group user4 ) -ls
find /home ( -user user1 -not -group admin ) -ls
- 文件类型
-type f: 查找文件类型为普通文件
b 块设备
c 字符文件
d 目录
l 链接文件
p 管道文件
s 套接字文件
- 文件大小
-size 10M 等于10M (9,10]
-size -10M 小于10M [0,9]
-size +10M 大于10M (10,oo)
- 文件权限
find -perm 644 -ls
find -perm /222 -ls 拥有人,拥有组或者其他人只要有一个有2的权限即可
find -perm -222 -ls 拥有人,拥有组或者其他人都要有2的权限
- 时间戳
常用选项:
以”天”为单位:
-atime [+|-]#
#: [#,#+1)
+#: [#+1,oo)
-#: [0,#)
-mtime
-ctime
- atime :access time 文件最后一次访问的时间
- mtime: modify time 文件最后一次被修改的时间,属性修改
- ctime: change time 文件最后一次被改变的时间,内容修改
以“分钟”为单位:
-amin ; -mmin ;-cmin
例如:
find /tmp -atime +7
常用处理
-
-print: 默认动作,显示至屏幕
-
-ls: 类似于对查找到的文件执行 ls -l 命令
-
-delete: 删除查找到的文件
-
-fls file: 查找到的所有长格式的信息保存至指定文件中
-
-ok COMMMAND {} ; 对查找到的每个文件执行由COMMAND指定的命令,且都会交互式要求用户确认
-
-exec COMMAND {} ; 对查找到的每个文件执行由COMMAND指定的命令;
-
{}: 用于引用查找到的文件名称自身
-
由于很多命令不支持管道(|)来传递参数,而日常工作中有这个必要,所以就有了 xargs 命令;进行传参
# find |xargs COMMAND
# find -name "*.sh" | xargs chmod 755
find /root/scripts/ -name '*.sh' ! -perm /111 -ok chmod a+x {} ;
find /etc/ -name "*.conf" -exec cp -a {} /tmp ;
find -name 'test*' | xargs -I {} cp {} dir/
实例1:将配置文件备份到指定目录下
# find . -name “*.conf” -exec cp -r {} /testdir/ ;
实例2:.提示删除存在时间超过3天以上的属主为young的临时文件
# find /tmp -ctime +3 -user young -exec rm -fr {} ;
实例3:在主目录中查找可被其它用户写入的文件,将其w权限去掉
# find ~ -perm -002
# find ~ -perm -002 -exec chmod o-w {} ;
实例4:查找/var目录下属主为root,且属组为mail的所有文件
# find /var -user root -group mail -ls #默认关系就是与
实例5:查找/var目录下不属于root、lp、gdm的所有文件
# find /var ! -user root ! -user lp ! -user gdm
实例6:查找/var目录下最近一周内其内容修改过,同时属主不为root
# find /var/ -mtime -7 ! -user root -ls
实例7:查找当前系统上没有属主或属组,且最近一个周内曾被访问过的文件
# find / -nouser -o -nogroup -a -atime -7
实例8:查找/etc目录下大于1M且类型为普通文件的所有文件
# find /etc/ -size +1M -type f
实例9:查找/etc目录下所有用户都没有写权限的文件
# find /etc/ ! -perm /222
实例10:查找/etc目录下至少有一类用户没有执行权限的文件
# find /etc/ ! -perm -111 # 至少有一类用户没有反过来就是所有用户都有
实例11:找出/tmp目录下,属主不是root,且文件名不以f开头的文件
# find /tmp ( -not -user root -a -not -name 'f*' ) -ls
# find /tmp -not ( -user root -o -name 'f*' ) –ls