由于线上业务用的squid,根据经验值如果长时间运行则缓存目录下的swap.state会慢慢变大,一旦超过60M,squid的性能就会急剧下降,因此需要定时去清理大于60M的swap.state文件。由此引出需求,查找cache目录下的所有大于60M的swap.state文件并清除,即:
1)查找cache目录下的所有swap.state文件
2)判断是否大于60M
3)大于60M则清空

解题思路:
以byte为单位显示文件大小,然后和60M大小做对比. 60M换算成字节为62914560这里判断是否大于60M,大于则使用echo 语句将对应文件置空。
60M=60*1024*1024= byte

可以使用dd命令创建一个60M的文件,测试下:

[root@kevin ~]# dd if=/dev/zero of=/mnt/test bs=1M count=60
60+0 records in
60+0 records out
62914560 bytes (63 MB) copied, 0.0492826 s, 1.3 GB/s
[root@kevin ~]# du -sh /mnt/test
60M /mnt/test
[root@kevin ~]# du -sh -b /mnt/test
62914560 /mnt/test
[root@kevin ~]# ls -l /mnt/test
-rw-r--r--. 1 root root 62914560 Oct 12 14:15 /mnt/test 注意:
如果文件是带小数点的M单位,比如文件大小为1.3M,则换算成byte单位时,就不能直接使用1.3*1024*1024=1363148.8这样计算了,因为这个
1.3M的大小是估算出来的M单位的大小,不是精确到的. 如果直接加-b参数换算成byte单位大小则就是精确的值了,如下:
[root@kevin logs]# du -sh catalina.out
1.3M catalina.out
[root@kevin logs]# du -sh -b catalina.out
1349930 catalina.out
[root@kevin logs]# ls -l catalina.out
-rw-r--r--. 1 root root 1349930 Oct 12 14:20 catalina.out

1) 方法一: "du -sh -b"

语法
# du [-abcDhHklmsSx][-L <符号连接>][-X <文件>][--block-size][--exclude=<目录或文件>][--max-depth=<目录层数>][--help][--version][目录或文件] 参数说明:
-a或-all #显示目录中个别文件的大小。
-b或-bytes #显示目录或文件大小时,以byte为单位。
-c或--total #除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和。
-D或--dereference-args #显示指定符号连接的源文件大小。
-h或--human-readable #以K,M,G为单位,提高信息的可读性。
-H或--si #与-h参数相同,但是K,M,G是以1000为换算单位。
-k或--kilobytes #以1024 bytes为单位。
-l或--count-links #重复计算硬件连接的文件。
-L<符号连接>或--dereference<符号连接> #显示选项中所指定符号连接的源文件大小。
-m或--megabytes #以1MB为单位。
-s或--summarize #仅显示总计。
-S或--separate-dirs #显示个别目录的大小时,并不含其子目录的大小。
-x或--one-file-xystem #一开始处理时的文件系统为准,若遇上其它不同的文件系统目录则略过。
-X<文件>或--exclude-from=<文件> #<文件>指定目录或文件。
--exclude=<目录或文件> #略过指定的目录或文件。
--max-depth=<目录层数> #超过指定层数的目录后,予以忽略。
--help 显示帮助。
--version #显示版本信息。 [root@kevin ~]# du -sh /data/cache/coss/squid*/swap.state
4M /data/cache/coss/squid1/swap.state
270k /data/cache/coss/squid2/swap.state
4M /data/cache/coss/squid3/swap.state
8M /data/cache/coss/squid4/swap.state
53M /data/cache/coss/squid5/swap.state
35M /data/cache/coss/squid6/swap.state
6M /data/cache/coss/squid7/swap.state
7M /data/cache/coss/squid8/swap.state
97M /data/cache/coss/squid9/swap.state
75M /data/cache/coss/squid10/swap.state [root@kevin ~]# du -sh -b /data/cache/coss/squid*/swap.state
4194304 /data/cache/coss/squid1/swap.state
276480 /data/cache/coss/squid2/swap.state
4194304 /data/cache/coss/squid3/swap.state
8388608 /data/cache/coss/squid4/swap.state
55574528 /data/cache/coss/squid5/swap.state
36700160 /data/cache/coss/squid6/swap.state
6291456 /data/cache/coss/squid7/swap.state
7340032 /data/cache/coss/squid8/swap.state
101711872 /data/cache/coss/squid9/swap.state
78643200 /data/cache/coss/squid11/swap.state 使用du -sh -b查找出相应文件的大小,同时使用awk 过滤第一个字段,只保留数字
[root@kevin ~]# du -sh -b /data/cache/coss/squid*/swap.state | awk '{ print $1 }'
4194304
276480
4194304
8388608
55574528
36700160
6291456
7340032
101711872
78643200 [root@kevin ~]# du -sh -b /data/cache/coss/squid*/swap.state | awk '{ print $2 }'
/data/cache/coss/squid1/swap.state
/data/cache/coss/squid2/swap.state
/data/cache/coss/squid3/swap.state
/data/cache/coss/squid4/swap.state
/data/cache/coss/squid5/swap.state
/data/cache/coss/squid6/swap.state
/data/cache/coss/squid7/swap.state
/data/cache/coss/squid8/swap.state
/data/cache/coss/squid9/swap.state
/data/cache/coss/squid11/swap.state 批量处理的脚本
[root@kevin ~]# vim /root/cache_gt_60.sh
#!/bin/bash
for size in $(du -sh -b /data/cache/coss/squid*/swap.state| awk '{ print $1 }')
do
for file in $(du -sh -b /data/cache/coss/squid*/swap.state|grep ${size}|awk '{print $2}')
do
if [ ${size} -gt 62914560 ];then
echo ${file} ${size}
echo "" > ${file}
fi
done
done 结合crontab进行定时执行
[root@kevin ~]# chmod 755 /root/cache_gt_60.sh
[root@kevin ~]# /bin/bash -x /root/cache_gt_60.sh
[root@kevin ~]# crontab -e
0 2 * * 6 /bin/bash -x /root/cache_gt_60.sh > /dev/null 2>&1

2) 方法二: "ls -l"
ls命令是linux下用来列出目录下的文件. 下面是关于ls的一些常规用法:

ls -a     #列出文件下所有的文件,包括以“.“开头的隐藏文件(linux下文件隐藏文件是以.开头的,如果存在..代表存在着父目录)。
ls -l #列出文件的详细信息,如创建者,创建时间,文件的读写权限列表等等。
ls -F #在每一个文件的末尾加上一个字符说明该文件的类型。"@"表示符号链接、"|"表示FIFOS、"/"表示目录、"="表示套接字。
ls -s #在每个文件的后面打印出文件的大小。 size(大小)
ls -t #按时间进行文件的排序 Time(时间)
ls -A #列出除了"."和".."以外的文件。
ls -R #将目录下所有的子目录的文件都列出来,相当于我们编程中的“递归”实现
ls -L #列出文件的链接名。Link(链接)
ls -S #以文件的大小进行排序 ls可以结合管道符”|“来进行一下复杂的操作。比如: ls | less用于实现文件列表的分页,ls [root@clamav-server ~]# ls -l /data/cache/coss/squid*/swap.state
-rw-r--r--. 1 root root 4194304 Oct 3 11:52 /data/cache/coss/squid1/swap.state
-rw-r--r--. 1 root root 276480 Oct 3 12:12 /data/cache/coss/squid2/swap.state
-rw-r--r--. 1 root root 4194304 Oct 3 12:34 /data/cache/coss/squid3/swap.state
-rw-r--r--. 1 root root 8388608 Oct 3 14:06 /data/cache/coss/squid4/swap.state
-rw-r--r--. 1 root root 55574528 Oct 3 14:13 /data/cache/coss/squid5/swap.state
-rw-r--r--. 1 root root 36700160 Oct 3 15:21 /data/cache/coss/squid6/swap.state
-rw-r--r--. 1 root root 6291456 Oct 3 15:58 /data/cache/coss/squid7/swap.state
-rw-r--r--. 1 root root 7340032 Oct 3 17:12 /data/cache/coss/squid8/swap.state
-rw-r--r--. 1 root root 101711872 Oct 3 17:40 /data/cache/coss/squid9/swap.state
-rw-r--r--. 1 root root 78643200 Oct 3 19:27 /data/cache/coss/squid11/swap.state [root@clamav-server ~]# ls -l /data/cache/coss/squid*/swap.state |awk '{print $5}'
4194304
276480
4194304
8388608
55574528
36700160
6291456
7340032
101711872
78643200
[root@clamav-server ~]# ls -l /data/cache/coss/squid*/swap.state |awk '{print $9}'
/data/cache/coss/squid1/swap.state
/data/cache/coss/squid2/swap.state
/data/cache/coss/squid3/swap.state
/data/cache/coss/squid4/swap.state
/data/cache/coss/squid5/swap.state
/data/cache/coss/squid6/swap.state
/data/cache/coss/squid7/swap.state
/data/cache/coss/squid8/swap.state
/data/cache/coss/squid9/swap.state
/data/cache/coss/squid11/swap.state 批量处理的脚本
[root@clamav-server ~]# vim /root/cache_gt_60.sh
#!/bin/bash
for size in $(ls -l /data/cache/coss/squid*/swap.state |awk '{print $5}')
do
for file in $(ls -l /data/cache/coss/squid*/swap.state|grep $size |awk '{print $9}')
do
if [ ${size} -gt 62914560 ];then
echo ${file} ${size}
echo "" > ${file}
fi
done
done 结合crontab进行定时执行
[root@CRN-JZ-2-36X ~]# chmod 755 /root/cache_gt_60.sh
[root@CRN-JZ-2-36X ~]# /bin/bash -x /root/cache_gt_60.sh
[root@CRN-JZ-2-36X ~]# crontab -e
0 2 * * 6 /bin/bash -x /root/cache_gt_60.sh > /dev/null 2>&1

3) 方法三"find -size"
-size 选项用于查找满足指定的大小条件的文件(注意不查找目录), +表示大于, -表示小于, 没有+或-表示正好等于。

[root@kevin ~]# du -sh /data/cache/coss/squid*/swap.state
4M /data/cache/coss/squid1/swap.state
270k /data/cache/coss/squid2/swap.state
4M /data/cache/coss/squid3/swap.state
8M /data/cache/coss/squid4/swap.state
53M /data/cache/coss/squid5/swap.state
35M /data/cache/coss/squid6/swap.state
6M /data/cache/coss/squid7/swap.state
7M /data/cache/coss/squid8/swap.state
97M /data/cache/coss/squid9/swap.state
75M /data/cache/coss/squid10/swap.state [root@kevin ~]# find /data/cache/coss/squid*/swap.state -size +60M
/data/cache/coss/squid9/swap.state
/data/cache/coss/squid10/swap.state [root@redis-new03 ~]# for i in $(find /data/cache/coss/squid*/swap.state -size +60M);do echo " " > $i;done [root@kevin ~]# du -sh /data/cache/coss/squid*/swap.state
4M /data/cache/coss/squid1/swap.state
270k /data/cache/coss/squid2/swap.state
4M /data/cache/coss/squid3/swap.state
8M /data/cache/coss/squid4/swap.state
53M /data/cache/coss/squid5/swap.state
35M /data/cache/coss/squid6/swap.state
6M /data/cache/coss/squid7/swap.state
7M /data/cache/coss/squid8/swap.state
4.0K /data/cache/coss/squid9/swap.state
4.0K /data/cache/coss/squid10/swap.state 编写脚本
[root@kevin ~]# vim /root/cache_gt_60.sh
#!/bin/bash
for i in $(find /data/cache/coss/squid*/swap.state -size +60M);
do
echo " " > $i;
done 结合crontab进行定时执行
[root@kevin ~]# crontab -e
0 2 * * 6 /bin/bash -x /root/cache_gt_60.sh > /dev/null 2>&1

Linux下自动清理超过指定大小文件的方法的更多相关文章

  1. Linux下自动清理超过指定大小文件

    作者:邓聪聪 扫描某个目录下的文件,发现超过指定大小即清空 1)扫描目录下的文件 2)判断文件大小 3)清空大于指定文件的内容 以byte为单位显示文件大小,然后和20M大小做对比. 20M换算成字节 ...

  2. Linux下面自动清理超过指定大小的文件

    Linux下面自动清理超过指定大小的文件 思路:1)查找test目录下的所有的文件2)判断是否大于100M3)大于100M则清空 以byte为单位显示文件大小,然后和100M大小做对比. 100M换算 ...

  3. Linux中定时删除超过指定大小的文件夹

    背景: 开发环境总是动不动就没有空间了, 大部分都是debug日志.所以有必要在日志很疯狂的时候,删除不必要的日志. 思路:一. 书写删除日志文件脚本: 定时任务执行.  但是有时候的日志是需要保存用 ...

  4. Linux下自动备份Oracle数据库并删除指定天数前的备份

    说明: Oracle数据库服务器 操作系统:CentOS IP:192.168.0.198 端口:1521 SID:orcl Oracle数据库版本:Oracle11gR2 具体操作: 1.root用 ...

  5. Linux下自动清除MySQL日志文件

    MySQL运行过程中会生成大量的日志文件,占用不少空间,修改my.cnf文件配置bin-log过期时间,在Linux下自动清除MySQL日志文件 [mysqld] expire-logs-days= ...

  6. linux磁盘清理方法 Linux 下垃圾清理工具 BleachBit

    由于当初安装系统设计不合理,有些分区的过小,以及网络通讯故障等造成日志文件速度增长等其他原因都可以表现为磁盘空间满,造成无法读写磁盘,应用程序无法执行等.下面就给你支几招(以/home空间满为例): ...

  7. linux下通过acl配置灵活目录文件权限(可用于ftp,web服务器的用户权限控制)

    linux下通过acl配置灵活目录文件权限(可用于ftp,web服务器的用户权限控制) 发表于2012//07由feng linux 本身的ugo rwx的权限,对于精确的权限控制很是力不从心的,ac ...

  8. Linux下自动备份MySQL数据库并上传到远程FTP服务器

    Linux下自动备份MySQL数据库并上传到远程FTP服务器且删除指定日期前的备份Shell脚本 说明:  1.备份MySQL数据库存放目录/var/lib/mysql下面的xshelldata数据库 ...

  9. 【java】 linux下利用nohup后台运行jar文件包程序

    Linux 运行jar包命令如下: 方式一: java -jar XXX.jar 特点:当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出 那如何让窗口不锁定? 方式二 ...

随机推荐

  1. Sensor

    原理:http://blog.csdn.net/xiaolei05/article/details/18670161 1.Sensor Type       重力感应/加速度传感器 (G-Sensor ...

  2. hdu 4882 比赛罚时贪心

    http://acm.hdu.edu.cn/showproblem.php?pid=4882 就是CF的比赛,根据时间的推迟会相应的扣掉题目的分数,每个任务有e,k,e表示完成需要时间,k表示完成后消 ...

  3. execl 导入

    /** * 导入Excel功能   是把execl表中的数据添加到数据表中 */ public function import(){ if (!empty($_FILES)) { $file = re ...

  4. MFC坐标系

    MFC坐标系分为设备坐标系和逻辑坐标系两种.在设备坐标系中,一个像素表示一个单位长度,设备的原点(0,0)始终在显示平面的左上角位置,x轴正向向右,y轴正向向下. 逻辑坐标系中,原点可以放在任何一个位 ...

  5. 微擎开启redis memcache文档2

    微擎开启redis memcache 2018年01月20日 14:39:54 luogan129 阅读数:2161更多 个人分类: 微信开发   版权声明:本文为博主原创文章,未经博主允许不得转载. ...

  6. Android-HttpClient-Get与Post请求登录功能

    HttpClient 是org.apache.http.* 包中的: 第一种方式使用httpclient-*.jar (需要在网上去下载httpclient-*.jar包) 把httpclient-4 ...

  7. mysql 幻象读

    [sql] view plain copy CREATE TABLE `t100` ( `id` bigint(20) NOT NULL default '0', `value` varchar(32 ...

  8. 使用命令行打包 nuget 包

    对于那些不打算涉及这么复杂而又想制作自己的 nuget 包的园友们,我是推荐使用 Nuget Package Explorer 来制作的.关于这个图形化的 nuget 包管理软件的使用,博客园内有相关 ...

  9. 分享自己使用的在线UML画图工具

    刚接触UML时间不长,看了N多教学视频,下载好了几个软件各种不习惯 当我遇见了ProcessOn  从此我彻底“爱上”了它! http://www.processon.com/ UML各类例图它几乎全 ...

  10. JS学习笔记9_JSON

    1.JSON概述 JavaScript Object Natation,js对象表示法,(像XML一样)是一种数据格式,它与js有相同的语法形式 P.S.一点小历史:JSON之父是道格拉斯,<J ...