RHCE第五周(计划任务和文件查找)
一:一次性计划任务(at)
1:一次性计划任务的简介
在某个时间执行任务,这个服务是有atd管理的,默认安装了atd服务,at命令是管理工具
2:at来管理计划任务
选项:
| -l | 列出计划任务 |
| -c job | 列出指定的任务 |
| -d | 删除指定任务 |
| -q | 设置任务的优先级 |
1:创建计划任务
第一种格式:
at 时间 回车,再来输入命令
按ctrl+d退出
第二种格式:
at 时间 < 文件
就是将命令放入到文件中去,通过文件输入
第三种格式:
echo 命令 | at 时间
生成的这个计划任务文件存放在/var/spool/at
这个文件最后2行存放的就是命令,一但到了时间,就执行,所在的文件也会消失,生成的是一个可执行文件
3:关于这个时间的格式
不能精确到秒,只能精确到分钟
时间格式的写法
| HH:MM | 比如 04:00 AM。如果时间已过,则它会在第二天的同一时间执行。 |
| Teatime(teatime) | 代表 4:00 PM(相当于 16:00) |
| now+时间 | 以 minutes、hours、days 或 weeks 为单位,例如 now+5 days 表示命令在 5 天之后的此时此刻执行。 |
| 英文月名 日期 年份 | 比如 January 15 2018 表示 2018 年 1 月 15 号,年份可有可无 |
关于时间格式的写法存放在/usr/share/doc/at/timespec
4:关于一次任务的详细解读
[root@server /]# at -l 2 Fri Feb 2 14:00:00 2024 a root
第一栏位:就是计划任务的序号
第二栏位:计划任务执行的时间和日期
第三栏位:优先级a-z,a最高,z最低
第四栏位:计划任务的拥有者
5:一次任务的操作
1)展示任务的详情
at -l 或者atq
[root@server /]# at -l 2 Fri Feb 2 14:00:00 2024 a root 3 Fri Feb 2 13:25:00 2024 a root 4 Fri Feb 2 13:25:00 2024 a q7 [root@server /]# atq 2 Fri Feb 2 14:00:00 2024 a root 3 Fri Feb 2 13:25:00 2024 a root 4 Fri Feb 2 13:25:00 2024 a q7 [root@server /]#
默认情况下,普通用户只能看到自己的计划任务,root用户都可以看的到
2)删除任务
at -d 任务编号或者atrm 任务编号
[root@server mnt]# at -l 2 Fri Feb 2 14:00:00 2024 a root 5 Fri Feb 2 17:00:00 2024 a root [root@server mnt]# at -d 2 [root@server mnt]# atrm 5 [root@server mnt]# at -l [root@server mnt]#
3)设置优先级
当系统资源紧张的时候,优先执行优先级高的任务
at -q 队列优先级
[root@server at]# at -q n 9pm warning: commands will be executed using /bin/sh at> touch /mnt/uu at> <EOT> job 9 at Fri Feb 2 21:00:00 2024 [root@server at]# at -l 7 Fri Feb 2 18:00:00 2024 a root 8 Fri Feb 2 22:00:00 2024 b root 9 Fri Feb 2 21:00:00 2024 n root [root@server at]#
4)查看任务的详情
[root@server at]# at -c 9 #!/bin/sh # atrun uid=0 gid=0 # mail root 0 umask 22 SHELL=/bin/bash; export SHELL SESSION_MANAGER=local/unix:@/tmp/.ICE-unix/1594,unix/unix:/tmp/.ICE-unix/1594; export SESSION_MANAGER COLORTERM=truecolor; export COLORTERM HISTCONTROL=ignoredups; export HISTCONTROL XDG_MENU_PREFIX=gnome-; export XDG_MENU_PREFIX
.......
3:使用at注意事项
1)不能定义的时间比现在的早,会自动的推迟到明天执行
2)要执行的文件,突然关机了(或者服务故障了),会在下次服务启动的时候,自动的执行
4:at的黑白名单
默认/etc/at.deny,/etc/at.allow需要创建,并且allow的优先级比deny的高,当用户同时存在这2个文件的时候,以allow为准,如果/etc/allow里面为空,则表明没有人能允许使用at,但是root能使用
二:周期性计划任务(crontab)
1:周期性任务的简介
周期性的执行某个任务,服务的名称为crond,管理工具crontab命令
2:crontab管理
1:时间的写法
crontab的配置文件/etc/crontab,里面有crontab的用法和时间的格式
SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=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
说明:
前面三行代表的为shell,以及命令的路径,邮箱
分钟(0~59) 小时(0~23) 天数(1~31) 月(1~12) 周(1~7or 0~6)不符合时间的话,就不会执行
x,y表示x时间点,y点时间点执行命令
x-y表示x到y时间段执行命令
/x 表示每x时间点执行命令
* 表示任意值执行命令
2:crontab的操作
| -l | 列出计划任务(默认指定当前用户) |
| -u | 指定用户(默认指定当前登录用户) |
| -e | 编辑计划任务(默认指定当前登录用户) |
| -r | 删除所有的计划任务(默认删除当前登录用户) |
2-1案列:
1)在每天的晚上11点到12点之间,每隔15分钟清空一次/tmp目录
*/15 23 * * * rm -rf /tmp/* */15 0 * * * rm -rf /tmp/*
2)以memeda用户的身份在每周五的下午8点12分和下午的8点15分执行echo hello
12,15 20 * * * echo hello
3)列出计划任务
[root@server /]# crontab -l */15 23 * * * rm -rf /tmp/* */15 0 * * * rm -rf /tmp/* [root@server /]# crontab -l -u memeda 12,15 20 * * * echo hello [root@server /]#
4)删除计划任务
[root@server /]# crontab -r -u memeda [root@server /]# crontab -l -u memeda no crontab for memeda [root@server /]#
3:crontab存放的文件和设置计划任务
crontab -e 默认存放在/var/spool/cron/这个目录里面,并且文件的名字和用户名同名
/etc/cron.d和/etc/crontab里面都可以存放
默认情况下,使用crontab命令来创建计划任务并且存放在/var/spool/cron/这个目录,当然,每个人的习惯不一样,也可以存放在这几个的目录之一里面
可以设置计划任务 /etc/cron.allow
不能设置计划任务 /etc/cron.deny
并且allow的优先级比deny高
4:系统的计划任务目录
[root@server /]# ls /etc/cron. cron.d/ cron.daily/ cron.deny cron.hourly/ cron.monthly/ cron.weekly/
上面就是系统的计划任务,存放的都是可执行的脚本文件,每天,每小时,每周,每月
/var/spool/anacron/中文件的名称用于检查每天,每周和每月的任务是否运行
3:crontab日志文件
使用crontab命令会有数据显示在/var/log/cron里面,并不会输出在屏幕上面
4:crontab总结
设置了计划任务,就会有文件生成下来,文件的权限,是设置用户所赋予的,所以普通用户只能看到自己的,root用户可以修改别人的,就是命令----->>>配置文件(生成文件)
三:文件查找
一:locate(模糊查询)
1:locate介绍
一种查找文件的工具,只要文件名包含所在的关键字,就能查询到,非常的便利,在数据库中查找的文件 /var/lib/mlocate这个是数据库的文件路径
2:查找的操作
[root@server opt]# touch huawei-rhel.txt
[root@server opt]# locate huawei-rhel
[root@server opt]# updatedb
[root@server opt]# locate huawei-rhel
/opt/huawei-rhel.txt
[root@server opt]#
创建了文件的话,需要更新数据库,才能查找到文件
locate - n 5 显示前5行
locate -i root 忽略大小写
3:查找的条件
1)目录需要有rx的权限才行,否则查找不到
2)需要更新数据库
3)注意/etc/update.conf这个里面的排除的目录外,可以把里面的排除目录删除掉,更新数据库,就能查询到了,支持文件通配符
[root@server /]# cat /etc/updatedb.conf
PRUNE_BIND_MOUNTS = "yes"
PRUNEFS = "9p afs anon_inodefs auto autofs bdev binfmt_misc cgroup cifs coda configfs cpuset debugfs devpts ecryptfs exofs fuse fuse.sshfs fusectl gfs gfs2 gpfs hugetlbfs inotifyfs iso9660 jffs2 lustre mqueue ncpfs nfs nfs4 nfsd pipefs proc ramfs rootfs rpc_pipefs securityfs selinuxfs sfs sockfs sysfs tmpfs ubifs udf usbfs ceph fuse.ceph"
PRUNENAMES = ".git .hg .svn .bzr .arch-ids {arch} CVS"
PRUNEPATHS = "/afs /media /mnt /net /sfs /tmp /udev /var/cache/ccache /var/lib/yum/yumdb /var/lib/dnf/yumdb /var/spool/cups /var/spool/squid /var/tmp /var/lib/ceph /var/lib/mock /sysroot/ostree/deploy"
[root@server /]#
将最后一个字段里面的目录进行删除即可
二:find查询(精确查询)
1:find介绍
用的最多的查询工具,与locate的区别
1)可以实时的查询文件
2)所有的文件都能查询到
格式:
find 路径 条件 动作
2:find查找的操作
选项:
| -name或者-inidoe | 按照名字和indoe来查找 |
| -size +-num | 按照文件的大小来查找 |
| -perm /或者- | 按照权限来查找 |
| a|m|c (time|min) | 按照时间来查找 |
| -user,-group | 按照文件的拥有者和拥有组来查找 |
操作:
| 打印出来 | |
| --ls | 列出展示 |
| >或者fls | 将查找出来的东西另存为 |
| xarg | 可以将查找出来的结果再次使用命令 |
| -ok \; | 二次操作(询问) |
| -exec \; | 二次操作(不询问) |
2-1按照条件
1)按照文件大小来查询
-size +5K 查找大于5k的文件,反之就是-5k, 5k就是查找文件为5k的,可以配合逻辑符号使用
[root@server opt]# ll -h total 32K -rw-r--r--. 1 root root 8.0K Feb 4 16:20 ee.txt -rw-r--r--. 1 root root 10K Feb 4 15:15 qq.txt -rwx------. 1 root root 12K Feb 4 15:16 ww.txt [root@server opt]# find /opt/ -size +10k /opt/ww.txt [root@server opt]# find /opt/ -size +10k -a -size -13k /opt/ww.txt [root@server opt]#
2)按照文件的权限查找
-perm 777 精确查询
-perm /777 模糊查询,不管文件的权限是大于还是小于。只要包含其中的组合就可以了
-perm -644 查找的就是文件的权限大于等于644就可以了
[root@server opt]# find /opt/ -perm 700 /opt/ww.txt [root@server opt]# ll total 32 -------r-x. 1 root root 8192 Feb 4 16:20 ee.txt -rw-r--r--. 1 root root 10240 Feb 4 15:15 qq.txt -rwx------. 1 root root 12288 Feb 4 15:16 ww.txt [root@server opt]# find /opt/ -perm /644 /opt/ /opt/qq.txt /opt/ww.txt /opt/ee.txt 不管是比644大还是小,只要有其中的组合就能查询到 6=4+2 [root@server opt]# ll total 32 -------r-x. 1 root root 8192 Feb 4 16:20 ee.txt -rw-r--r--. 1 root root 10240 Feb 4 15:15 qq.txt -rwxrwxrwx. 1 root root 12288 Feb 4 15:16 ww.txt [root@server opt]# find /opt/ -perm -644 /opt/ /opt/qq.txt /opt/ww.txt -必须大于或者等于这个权限,就能查询到
3)按照时间戳查找
a|m|c (time|min)time是天数,min是分钟
-ctime 修改的属性,改变了文件的属性或者修改了文件,时间就被修改了
-mtime 修改的时间 追加了内容,时间就会修改
-atime -1 就是查看一天之内访问的文件 +1 1天之外访问的文件,访问了时间就会修改
[root@server opt]# find /opt/ -atime -1 /opt/ /opt/qq.txt /opt/ww.txt /opt/ee.txt [root@server opt]#
4)按照文件的拥有人和拥有组查找
-user root -nouser 没有拥有人 -uid
-group root -nogroup -gid
[root@server opt]# ll total 32 -------r-x. 1 q7 root 8192 Feb 4 16:20 ee.txt -rw-r--r--. 1 root root 10240 Feb 4 15:15 qq.txt -rwxrwxrwx. 1 root root 12288 Feb 4 15:16 ww.txt [root@server opt]# find /opt/ -user q7 -o -user root /opt/ /opt/qq.txt /opt/ww.txt /opt/ee.txt [root@server opt]# [root@server opt]# userdel -r q7 [root@server opt]# ll total 32 -------r-x. 1 1000 root 8192 Feb 4 16:20 ee.txt -rw-r--r--. 1 root root 10240 Feb 4 15:15 qq.txt -rwxrwxrwx. 1 root root 12288 Feb 4 15:16 ww.txt [root@server opt]# find /opt/ -nouser /opt/ee.txt [root@server opt]#
5)按照文件名和indoe查询,层级目录进行查询
-name 文件名 可以支持通配符使用
indoe就是文件的块
层级目录查找 -mindepth 2 -maxdepth 5
#根据文件名忽略大小写 [root@server opt]# find /opt/ -iname '*.txt' /opt/qq.txt /opt/ww.txt /opt/ee.txt #根据indoe查找 [root@server opt]# ll -i total 32 1010471 -------r-x. 1 1000 root 8192 Feb 4 16:20 ee.txt 1010482 -rw-r--r--. 1 root root 10240 Feb 4 15:15 qq.txt 2188763 -rwxrwxrwx. 1 root root 12288 Feb 4 15:16 ww.txt [root@server opt]# find -inum 1010471 ./ee.txt [root@server opt]# 层级寻找 [root@server opt]# find /opt/ -mindepth 1 -maxdepth 4 /opt/qq.txt /opt/ww.txt /opt/ee.txt /opt/a /opt/a/a.txt /opt/a/b /opt/a/b/b.txt /opt/a/b/c /opt/a/b/c/c.txt /opt/a/b/c/d [root@server opt]#
6)总结:当然也可以使用逻辑符号
-a -o !或者-not
查找用户人是q7,用户组不是root的
[root@server opt]# ll total 32 drwxr-xr-x. 3 root root 28 Feb 4 16:47 a -------r-x. 1 q7 q7 8192 Feb 4 16:20 ee.txt -rw-r--r--. 1 root root 10240 Feb 4 15:15 qq.txt -rwxrwxrwx. 1 root root 12288 Feb 4 15:16 ww.txt [root@server opt]# find /opt/ -user q7 ! -group root /opt/ee.txt [root@server opt]#
2-2按照动作
就是查找出来的东西,还要进行二次操作
1)默认动作是-print,可以省略
2)-ls 将查出来的东西展示详细信息
[root@server opt]# ls a ee.txt qq.txt ww.txt [root@server opt]# find /opt/ -name ee.txt -ls 1010471 8 -------r-x 1 q7 q7 8192 Feb 4 16:20 /opt/ee.txt [root@server opt]#
3)>或者fls 将查找出来的文件进行另存为
#-fls将查找出来的文件的路径存放在另外一个文件里面,并展示详细的信息 [root@server opt]# find . -name 'e*' -fls /opt/ee.bak [root@server opt]# ls ee ee.bak qq [root@server opt]# cat ee.bak 1010482 4 -rw-r--r-- 1 root root 6 Feb 4 17:02 ./ee 1010471 0 -rw-r--r-- 1 root root 0 Feb 4 17:04 ./ee.bak [root@server opt]# #> root@server opt]# find /opt/ -name 'e*' > /opt/11.bak [root@server opt]# ls 11.bak ee ee.bak qq [root@server opt]# cat 11.bak /opt/ee /opt/ee.bak [root@server opt]#
4)将查找出来的文件,还要进行命令的操作
此时,不能使用管道符,使用 xargs
[root@server opt]# ll total 16 -rw-r--r--. 1 root root 20 Feb 4 17:06 11.bak -rw-r--r--. 1 root root 6 Feb 4 17:02 ee -rw-r--r--. 1 root root 158 Feb 4 17:04 ee.bak -rw-r--r--. 1 root root 5 Feb 4 17:02 qq [root@server opt]# find /opt/ -name 'e*' | xargs chmod 777 [root@server opt]# ll total 16 -rw-r--r--. 1 root root 20 Feb 4 17:06 11.bak -rwxrwxrwx. 1 root root 6 Feb 4 17:02 ee -rwxrwxrwx. 1 root root 158 Feb 4 17:04 ee.bak -rw-r--r--. 1 root root 5 Feb 4 17:02 qq [root@server opt]#
5)-ok 和 -exec后面还可以使用命令
-ok:会询问, -ok 命令 {} \;
-exec:不会询问 -exec 命令 {} \;
[root@server opt]# ls
11.bak ee ee.bak qq
[root@server opt]# find /opt/ -name 'e*' -ok rm {} \;
< rm ... /opt/ee > ? y
< rm ... /opt/ee.bak > ? n
[root@server opt]# ls
11.bak ee.bak qq
[root@server opt]#
[root@server opt]# find /opt/ -name 'e*' -exec rm {} \;
[root@server opt]# ls
11.bak qq
[root@server opt]#
备份文件非常的有用
需要使用相对路径,否则会报错
[root@server opt]# find /opt/ -name 'qq' -exec cp {} /tmp/{}.bak \;
cp: cannot create regular file '/tmp//opt/qq.bak': No such file or directory
#相对路径
[root@server opt]# find . -name 'qq' -exec cp {} /tmp/{}.bak \;
[root@server opt]# ls /tmp/*.bak
/tmp/qq.bak
[root@server opt]#
6)将查找出来的文件进行删除操作
不用询问
[root@server opt]# ls 11.bak qq [root@server opt]# find /opt/ -name qq -delete [root@server opt]# ls 11.bak [root@server opt]#
3:find的总结
可以通过条件查询,拥有人,大小,文件的类型,文件的权限,时间戳,文件名
动作:删除,列出,二次操作
使用find备份查找出来的文件后,需要使用相对路径才行

浙公网安备 33010602011771号