linux 文件大小 自动变化 写,Linux下自动清理超过指定大小文件的方法
由于线上业务用的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=62914560 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 文件大小 自动变化 写,Linux下自动清理超过指定大小文件的方法相关推荐
- linux如何批量清理文件大小,Linux下自动清理超过指定大小文件的方法
由于线上业务用的squid,根据经验值如果长时间运行则缓存目录下的swap.state会慢慢变大,一旦超过60M,squid的性能就会急剧下降,因此需要定时去清理大于60M的swap.state文件. ...
- linux如何删除指定大小以下的文件夹,Linux中定时删除超过指定大小的文件夹
背景: 开发环境总是动不动就没有空间了, 大部分都是debug日志.所以有必要在日志很疯狂的时候,删除不必要的日志. 思路:一. 书写删除日志文件脚本: 定时任务执行. 但是有时候的日志是需要保存用 ...
- linux系统怎么清理指定日期的文件,Linux系统删除指定时间段文件的方法(2)
搜索根目录下小于500KB的文件,命令行为: find / -size -500K -print 删除文件大小为0的文件 rm -i `find ./ -size 0` find ./size 0 e ...
- php读取iso文件,Linux_linux下如何读取使用iso 镜像文件的方法,如果拷贝到本地,可以使用moun - phpStudy...
linux下如何读取使用iso 镜像文件的方法 如果拷贝到本地,可以使用mount mount fileName mountPoint -o loop,fileName是镜像文件名(*.iso,*.i ...
- Windows Server 2008下Microsoft Office Excel 不能访问文件解决方法
Windows Server 2008下Microsoft Office Excel 不能访问文件解决方法 在VS2008 中写了一个EXCEL的导出功能的东西,但在Windows Server 20 ...
- 服务器拒绝接收office文件,Ghost Win7系统下Outlook设置拒绝接收垃圾文件的方法
Outlook是Microsoftoffice套装软件的组件之一,可以用它来收发电子邮件.管理联系人信 息.记日记.安排日程.分配任务,还可以帮助用户查找和组织信息,不过有时候在接收文件的时候老是会接 ...
- linux磁盘符变化autofs,Linux基础教程学习笔记之Autofs自动挂载
Linux基础教程学习笔记之Autofs自动挂载 Autofs自动挂载: yum -y install autofs vim /etc/auto.master 在文件中添加下面行 /home/gue ...
- 红旗linux怎么更新,红旗linux7.0下自动更新firefox
今天在红旗官方论坛看到有人提问--如何更新firefox?方法有几种,不过,据我自己的使用体会,总结出一简单实用的自动更新的办法.既不用命令,还不影响速度.现共享出来,与大家交流.如果您有更好的办法, ...
- 使用dd命令在Linux下创建大文件,批量大小文件生成方法
前沿:最近在开发自动从U盘拷贝大批量文件到linux系统的的功能.由于需要几十个G的大文件来做测试,如果自己去找这么多资源,然后再拷贝,非常麻烦.所以学了下dd命令,现在总结一下: 一.参数介绍 if ...
最新文章
- GT Transceiver的复位与初始化(4)RX初始化和复位流程
- android 测试网,Android Monkey测试
- python第一周心得_python第一周心得-Go语言中文社区
- 相机成像原理_【科研进展】动态虚拟相机:探索三维视觉成像新方法
- E: 无法获得锁 /var/lib/apt/lists/lock - open (11: 资源暂时不可用) E: 无法对目录 /var/lib/apt/lists/ 加锁 问题解决方法
- Spring Boot基础学习笔记:可视化迎新
- 2017.10.17 CF#441 F题 思考记录
- a类怎么引用b类java_Java中A类的数组如何传入B类???急
- Spring Boot + JPA +MySQL 数据操作及示例环境搭建(手动建表建类)
- 多类别分类问题由 confusion matrix 到分类准确率(accuracy)的计算
- 串口UART学习笔记(一)
- 精品H5小游戏源码-免费下载
- 如何下载高分辨率卫星影像
- mysql存储过程 插数据_mysql 使用存储过程批量插数据
- html文档怎么设置默认浏览器打开,win10系统如何设置HTML文件指定浏览器打开?...
- 互联网人愚人节整蛊指南
- 车载系统模块资料整理
- java vo层_JAVA3个数据层(pojo,dto,vo)、dao层、services层、controller层解释
- C++:vector的push_back()与emplace_back()
- USB1.1学习笔记
热门文章
- Flink时间属性和窗口
- 医疗大数据的风险及应对方法
- cms php vue 开源_2020最受欢迎的企业网站CMS建站系统排行榜
- android design library提供的TabLayout的用法
- 软件测试国际化测试指标,国际化软件测试内容解析(2)
- 双目摄像头和单目摄像头_挑战激光雷达,MAXIEYE要重新定义单目摄像头?
- react多个网络请求_react中网络请求的优化!
- 为什么要学习 Spring Boot?
- iOS 协议 委托 代理 delegate
- Oracle报错:“ORA-02292:违反完整约束条件(XXX.FKXXX)- 已找到子记录