由于线上业务用的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. mysql同时使用order by和limit查询时的一个严重隐患 -- 丢失数据

    转自: https://blog.csdn.net/tsxw24/article/details/44994835 我经常使用order by和limit来做数据分页显示并排序,一直也没发现过什么问题 ...

  2. marven与Eclipse集成配置

    maven作为一个项目构建工具,在开发的过程中很受欢迎,可以帮助管理项目中的bao依赖问题,另外它的很多功能都极大的减少了开发的难度,下面来介绍maven的安装及与eclipse的集成. maven的 ...

  3. hdu 1443 Joseph【约瑟夫环】

    题目 题意:一共有2k个人,分别为k个好人和k个坏人,现在我们需要每隔m个人把坏人挑出来,但是条件是最后一个坏人挑出来前不能有好人被挑出来..问最小的m是多少 约瑟夫环问题,通常解决这类问题时我们把编 ...

  4. HDU 2829 区间DP & 前缀和优化 & 四边形不等式优化

    HDU 2829 区间DP & 前缀和优化 & 四边形不等式优化 n个节点n-1条线性边,炸掉M条边也就是分为m+1个区间 问你各个区间的总策略值最少的炸法 就题目本身而言,中规中矩的 ...

  5. Eclipse新建工作空间,复制原有的配置

    步骤一: File->Switch workspace->Other...,按下图选择 只复制简单的配置,如cvs之类的信息是不会复制的.     步骤二: 在方法一的基础上做如下操作  ...

  6. shell 命令 bc linux下的计算器

    bc命令 在linux环境下的计算器.

  7. 使用HAProxy实现sql server读库的负载均衡

    前置条件 使用sqlserver的发布订阅功能实现读写分离,并创建多个读库. 本文的负载均衡是针对多个读库而言的. 测试环境 vmware 10 64位 windows server 2008 R2 ...

  8. 使用xftp连接到ftp服务器即常见问题的解决

    使用xftp连接到ftp服务器 新建连接 配置连接 点击确定,连接到ftp 常见问题 中文乱码问题 解决: 点击连接设置按钮 修改编码方式 最后确定保存!刷新一下,就不在乱码了;

  9. .NET MVC 学习笔记(七)— 控制input控件

    .NET MVC 学习笔记(七)— 控制input控件 画面中有时候需要输入数字,这时就需要控制input的输入.以下为保留两位有效数字. /* * 初始化数字输入 */ function initD ...

  10. dbcp和druid(数据库连接池)

    前言: 对于一个简单的数据库应用,由于对于数据库的访问不是很频繁.这时可以简单地在需要访问数据库时,就新创建一个连接,用完后就关闭它,这样做也不会带来什么明显的性能上的开销.但是对于一个复杂的数据库应 ...