热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

linux删除_Linux下如何快速删除大量碎小的文件?

XX系统,通过FTP给客户实时传送文件,正常逻辑是客户收到文件后,自动删除FTP服务器上的本地文件,但经常出现文件已经推送了

XX系统,通过FTP给客户实时传送文件,正常逻辑是客户收到文件后,自动删除FTP服务器上的本地文件,但经常出现文件已经推送了,客户没删除文件的情况。每个文件其实是很小的,可能几K,但是量很大,1天几万个,以至于时间久了,本地积的文件就会很多。我们不说让客户怎么排查问题,单就这个现象,如果积了几百万的小文件,我们能做些什么?你可能会说,删了啊,确实应该删了,但是小文件多了,会产生什么影响?如果直接rm,你认为行么?

颜总这篇小文,就是介绍了针对这种情况的操作,《Linux如何快速删除大量碎小文件?》,受益匪浅。

Linux文件系统容量分为大小容量和inode容量,前者限制大小,后者限制数量。

使用df -h,查看大小容量使用情况。
使用df -i,查看inode容量使用情。

当我们遇到文件系统容量爆满,首先快速定位,

1. 寻找指定目录最大文件

du -a /data |sort -nr|head -n 10

2. 统计指定目录下文件数

ls -Rf1 /data |grep '^-' |wc -l
举个例子,某系统巡检中发现inode空间爆满(df -ih),

/dev/mapper/red-root 550G 550G 20K 100% /

通常,监控工具只关注大小容量空间使用情况,很少关注inode空间。

根据上边命令(2)定位到问题目录,在该目录下执行ls报错如下,

ls: memory exhausted

很显然,在问题目录ls命令已经无法将所有文件列出来。因为ls默认会对文件按首字母排序,而排序过程需要消耗内存,文件非常多的时候,对内存的消耗是非常恐怖的。

这该怎么办?此时,可以使用-f1参数,这样就不排序,将文件列表输入到临时文件中。

ls -f1 ./* > ~/clear.log输出完文件后,产生一个5G的文件,

-rw-r--r-- 1 oradba oinstall 5533944289 Jan 10 14:53 clear.log可见该目录下文件极多,wc -l clear.log统计,得到文件数约2亿。

由于文件过大,无法查看并使用,如下使用split命令将该文件切分成每一个500Mb。

split -b 500M clear.log -d -a 3 clear.log注:-b按照大小切分, -n按照制定行数切分。

分割后:

ef4af3afd00b1207c116af9786fab265.png

编写脚本,按照文件批量删除,

[root@localhost ~]$ cat clear.sh#!/bin/bashfor i in `cat clear000`dorm -rf ./$idoneecho "complete!"替换脚本中clear000依次将所有文件删除,完成清理工作。

另一种方案,

ls -f1 ./* | head -n 1000 | xargs rm -f

说到这里,可能有同学会说,为什么不在问题目录下rm -rf ./* 呢?

这里提一下./*的工作原理,他将目录下所有文件名串接到rm -rf后边。像这样:

rm -rf a b c d e f ...

如上,这是一条shell指令。不幸的是无论unix,还是linux,都对单条命令长度有最大限制。

AIX操作系统受参数ARG_MAX的限制,getconf arg_max查询。
Linux操作系统受参数LINE_MAX的限制,getconf line_max查询。

这就是文件太多的时候,为什么rm -rf ./*会报错的缘故。
归根结底,这个问题的最佳解决方式就是让客户确认文件删除逻辑,一旦不能搞定,就进行文件容量和大小的监控,超过某个阈值,则移动文件进行压缩备份或者直接删除,避免本机影响。

近期的热文:

《YNWA,同样是我们普通人的鞭策》

《小白是怎么搞懂GC全过程?》

《Gdevops峰会:一起探讨国产分布式数据库的选型与应用》

《海底的下面究竟有什么?》

《几种去重的SQL写法》

《打造国产技术产品的必要性》

《SQL查询总是先执行SELECT语句么?》

《Oracle删除字段的方式和风险,你都了解么?》

《最烧脑的珠峰高程测算过程》

《了解阿克曼转向原理的作用》

《登录缓慢的诡异问题》

《不可不知的7个JDK命令》

《一个Full GC次数过多导致系统CPU 100%的案例排查》

《Java GC的基础知识》

《Linux下的^M困惑》

《Oracle相关提问的智慧技巧》

《很久以前的一篇对初学Oracle建议的文章》

《PLSQL Developer几个可能的隐患》

《从70万字SRE神作提炼出的7千字精华文章》

《从数据误删到全量恢复的惊险记录》
《公众号600篇文章分类和索引》




推荐阅读
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • Linux一键安装web环境全攻略
    摘自阿里云服务器官网,此处一键安装包下载:点此下载安装须知1、此安装包可在阿里云所有Linux系统上部署安装,此安装包包含的软件及版本为& ... [详细]
  • 0x00端口渗透端口扫描端口的指纹信息(版本信息)端口所对应运行的服务常见的默认端口号.尝试弱口令端口爆破hydra端口弱口令NTScanHs ... [详细]
  • 本人新手,用Unity3D想做一个简单的赛车游戏,现在的问题是转弯的时候很容易出现翻车的情况,求解决思路比如说你的中心是在(0,0,0),你把他设置成(0,-1.0,0)之类的就可 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 本文介绍了Redis中RDB文件和AOF文件的保存和还原机制。RDB文件用于保存和还原Redis服务器所有数据库中的键值对数据,SAVE命令和BGSAVE命令分别用于阻塞服务器和由子进程执行保存操作。同时执行SAVE命令和BGSAVE命令,以及同时执行两个BGSAVE命令都会产生竞争条件。服务器会保存所有用save选项设置的保存条件,当满足任意一个保存条件时,服务器会自动执行BGSAVE命令。此外,还介绍了RDB文件和AOF文件在操作方面的冲突以及同时执行大量磁盘写入操作的不良影响。 ... [详细]
  • 请教ODBC与数据库连接的问题
      请教各位,我在windows2000server下利用internet信息服务架构了FTP,其中属性设置中有一项“启用日志记录“,在“活动日志格式“中我选了“ODBC日志“,在属性中设置好了 ... [详细]
  • 三小时掌握计算机网络基础(通俗易懂)
    目录1.网络层次划分2.OSI七层网络模型3.IP地址4.子网掩码及网络划分5.ARPRARP协议6.路由选择协议7.TCPIP协议8.UDP协议 9.DNS协议 ... [详细]
author-avatar
大王水灵灵_598
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有