Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1278200
  • 博文数量: 273
  • 博客积分: 5865
  • 博客等级: 准将
  • 技术积分: 3280
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-11 10:01
文章分类

全部博文(273)

文章存档

2015年(33)

2014年(11)

2013年(11)

2012年(136)

2011年(32)

2010年(50)

分类: 系统运维

2015-04-29 22:32:38

直接来方法,如图


du-sh.PNG


解释:


1.du 与 df  大小不一致


2.lsof 查找 有delete 标记的文件,并按大小排序


3.找到大文件的 PID fd  


4.清空大文件 




大家都知道正常清日志是用 >,而不是直接rm 


原因很简单,就是因为系统在使用,即便你删除文件,fd 依旧指向同一个inode, 只是你删除了目录索引结点。为了让应用能正常运行,系统就不会释放那个用于写入的文件,依然存在磁盘之上。


原理是什么? 


很简单,用exec 就可以实现。


Exec 可以指定一个用于写的文件,可以指定一个用于读的文件,可以跟踪文件位置(就是这个)


现在立即写一个(用于写):


[public@CNSZ040588 ~]$ exec 100>/tmp/ForWrite.txt
[public@CNSZ040588 ~]$ ls -l /proc/$$/fd
total 0
lrwx------ 1 public usr01 64 Apr 20 22:14 0 -> /dev/pts/11
lrwx------ 1 public usr01 64 Apr 20 22:14 1 -> /dev/pts/11
l-wx------ 1 public usr01 64 Apr 20 22:35 100 -> /tmp/ForWrite.txt
lrwx------ 1 public usr01 64 Apr 20 22:13 2 -> /dev/pts/11
lrwx------ 1 public usr01 64 Apr 20 22:14 255 -> /dev/pts/11
[public@CNSZ040588 ~]$ ls /tmp/ForWrite.txt 
/tmp/ForWrite.txt
[public@CNSZ040588 ~]$  echo "Good" >&100
[public@CNSZ040588 ~]$ cat /tmp/ForWrite.txt 
Good
[public@CNSZ040588 ~]$ exec 100<&-
[public@CNSZ040588 ~]$ ls /tmp/ForWrite.txt 
/tmp/ForWrite.txt
[public@CNSZ040588 ~]$ ls /proc/$$/fd
0  1  2  255



原文:
阅读(2553) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~