shell需求:
现有两类机器共300多台,写个脚本自动清理这两类机器里面的日志文件,在堡垒机上发布,也要批量发布到crontab里。
A类机器的日志存放路径很同意,B类机器日志文件存放则需要匹配,因为存放日志文件的目录里除了日志文件,还有其他文件是不能删除的。
不用考虑堡垒机上的操作,只写shell脚本即可。
A类机器日志存放目录:/opt/cloud/log/ (删除7天前日志)
B类机器日志存放目录:/opt/cloud/instances/ (删除15天前日志)
shell分析:
1.需要写出一个通用的脚本,该脚本在A、B两类机器上都可以运行。
2.判断是A类机器还是B类机器,可以通过存放日志文件的目录来确定是哪类机器,从而执行相应的操作。
3.根据需求,A类机器直接find查找即可,B类机器则需要find -name “*.log”将日志文件筛选出来进行操作,而其他文件则不动。
4.根据需求,find查找对应天数之前的参数
5.找到对应的日志文件后传递给rm删除,还要加上xargs命令。
find [路径] -name filename 直接查找该文件名的文件
find [路径] -type filetype 通过文件类型查找文件
文件类型:
-f 普通文件
-b 块设备文件
-c 字符设备文件
-d 目录
-l 链接文档
-s 套接字文件
find -mtime n 按照文件的修改时间查找文件,n为整数
n表示文件修改时间距离为n天,-n表示文件更改时间距离在n天以内,+n表示文件修改时间距离在n天以前。
举几个例子:
-mtime 0 表示文件修改时间距离当前为0天的文件,即距离当前时间1天(24小时)以内的文件。
-mtime 1 表示文件修改时间距离当前为1天的文件,即距离当前时间1天(24小时-48小时)。
-mtime +1 表示文件修改时间大于1天,即距离当前时间2天(48小时)之外的文件。
-mtime -1 表示文件修改时间小于1天,即距离当前时间1天(24小时)之内的文件。
xargs命令
xargs 是给命令传递从参数的一个过滤器,也是组合多个命令的一个工具。
1.xargs 可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据。
2.xargs 可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。
3.xargs 默认的命令是echo,这意味着通过管道传递给xargs的输入将会包含换行和空白,但通过xargs的处理,换行和空白将被空格取代。
xargs是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令。之所以能用到这个命令,关键是由于很多命令不支持管道来传递参数,而日常工作中又有这个必要,于是便有了xargs命令。
例:
find /sbin -perm +700 | ls -l (错误命令)
find /sbin -perm +700 | xargs ls -l (正确命令)
脚本代码:
#!/bin/bash
A=/opt/cloud/log/
B=/opt/cloud/instances/
if [ -d $A ]
then
find $A -type f -name -mtime +7 |xargs rm -f
elif [-d $B ]
then
find $B -type f -name “*.log” -mtime +15 |xargs rm -f
fi