00

还是上次那个问题,运维同学发现一台CentOS 7的服务器空间快满了,服务器告警。

于是要清除掉服务器上没用的文件,但是怎么找到服务器上的无用文件,然后选择性删除呢?

这里我们提供两个思路,一个是大文件,删除一个就能腾挪很多空间,例如安装包什么的;一个是很多天以前的文件,如日志文件,可能再留存也没什么意义了。

01

首先,我们来找大文件。

关键字 find 、-size。

find / -type f -size +500M
-> 从根目录开始查找,500M以上文件。
-> -type f: f为普通文件类型,f改为d则是目录文件,l则是符号链接文件,-type 还有其他参数,不在这里一一列举。
-> -size +500M :500MB以上 。
-> 一般磁盘空间不够,删除垃圾文件时会使用到此命令。

如果这500M以上的文件都是无用的,怎么删除呢?使用xargs。

find / -type f -size +500M | xargs rm -rf
-> xargs : 命令传递参数过滤器,与管道符“|”一同使用,将前面的命令传递给后面的命令使用

如果这些文件中有一些不想删除怎么办?加上grep -v,来反排除。我们看示例。

find / -type f -size +500M | grep -v '我不能删*' | xargs rm -rf
-> 查找500M以上文件删除,但是排除掉“我不能删”开头的文件

02

其次,第二种思路,我们查找N天以前的文件进行删除。

关键字 find 、-mtime。

find /var/log/ -mtime +30 -name '*.log'
> 查找/var/log/目录下,30天前操作过的log文件
-> -mtime:代表修改时间,最常用,类似参数有-atime、-ctime
-> -atime:代表访问时间,查看过就算
-> -ctime:文件状态改变时间
-> -30:代表30天以内,30为n,数字自己填写
-> +30:30天以前
-> 30:距今第30天

find /var/log/ -mtime +30 -name '*.log'| xargs rm -f
-> 删除30天前的log文件

xargs : 命令传递参数过滤器,与管道符“|”一同使用,将前面的命令传递给后面的命令使用

03

总结下本次我们学习的知识点:

1、find的两种很常用的命令参数,-size +N 大小查找,-mtime +N 时间查找。

2、grep -v 反向排除。

3、还学了使用xargs + rm 命令来进行批量删除。

你还知道哪些批量删除的方法呢?下期我们再说说各种批量删除文件的方法吧。