在unix环境下,经常会遇到一种情况,就是存放日志的文件目录满了,需要进行清理。通常来说,日志文件具有一定的时效性,例如一周,超过一周的日志文件就可以进行清理(以应用日志为例,数据库ARCH日志,以是否备份完成为标准)。
在windows环境下,我们可以用图形界面,根据时间排序,然后用鼠标框选文件,然后按下delete键,多方便。可是在unix字符界面下,我们没有鼠标,没有框选,只能使用命令了,下面我们就介绍下如何通过命令简单快速的实现我们的需求。
首先,我们来假设一个应用场景:
接到文件系统使用率告警,目前主机dbaleading1上的/u01目录满了,需要进行清理。
接到这个case后,首先做理论分解,该怎么去思考。
1. 首先,/u01目录肯定有很多子目录,必须得先找到是哪些子目录占用了大部分的空间,如果要清理空间,肯定是清理占用空间多的。
2. 找到占用空间大的目录后,需要知道该目录中存放的是什么文件。 3. 根据文件,确定清理策略后(如保留7天,后缀为.log的应用过期日志文件),要根据策略,将需要清理的数据,筛选出来; 4. 对筛选出来的文件,进行清理。
理论分析清楚了以后,我们按照步骤,一步步来实现,过程很简单,重要的是,我们在日常运维中,特别是重要系统中做操作的时候,一定要知道自己做的是什么,会有什么样的影响,毕竟,我们是系统的最后一道防线。
1. 在windows下,我们可以点文件夹,右键,查看属性,就可以知道文件夹大小,在unix字符界面下,我们采用sort排序的方式,命令如下:
[root@dbaleading1 ~]# cd /u01
[root@dbaleading1 u01]#du -sk * | sort -n 有关具体命令的作用,语法等等,可以用 man工具查看,如unix下输入 man du,就会出现du的命令手册。
2. 假设发现/u01/log目录占用空间比较大,则进入/u01/log目录,使用 ls -ltr命令查看该目录内的具体文件信息,如果仍然存在多个文件夹,则重复第一步。目前的场景,我们假设该目录中,存放了大量的应用日志文件,以.log结尾。
3. 发现大量应用日志占用空间,根据策略,我们需要把7天前的日志文件给删除了,这一步,我们使用find命令来实现,如下:
[root@dbaleading1 ~]# find . -mtime +7 |xargs ls -lrt 在这个命令中,主命令是 find . -mtime +7 ,其意义是在当前目录中,寻找创建时间大于7天前的文件,管道命令|xargs ls -lrt的作用,是把这些文件按照时间顺序排列好,然后显示出来。
4. 如果第3步中的文件经过确认,可以删除的,那么,把管道命令中的ls命令替换成删除命令就可以了,如下:
[root@dbaleading1 ~]# find . -mtime +7 |xargs rm -fr
5. 完成清理后,我们再通过命令 df -m ,进行复查,确认无误后,这个处理流程就全部完成了。
事情很小,实现也很简单,不过这里面也存在着危险的rm操作,作为一个系统维护人员,遇到此类危险操作时,尽量能够多想一下,确切的清楚自己所做的事情,为自己,也为系统,多承担一点责任。