谨记: 大多数服务在运行时,是不能删除对应的服务正在写入的日志文件,会带来意料之外的结果!!!
Linux是通过link的数量来控制文件删除的,link包括被调用的数量和硬链接数量。
真正的删除一个文件,只有在文件未被进程调用的情况下,删除该文件的所有硬链接数即可。
如果在进程调用时,通过rm命令删除一个文件,是无法彻底删除的,该文件依然存在,只不过通过ls命令无法看到而已!
案例: 删除进程正在调用的/var/log/secure文件
[root@t-c6 ~]# ls /var/log/secure /var/log/secure [root@t-c6 ~]# \rm -rf /var/log/secure [root@t-c6 ~]# ls /var/log/secure ls: 无法访问/var/log/secure: 没有那个文件或目录
通过命令lsof可以看到,该文件并未彻底删除,因为系统进程正在写入数据到该文件中,进程调用数不为零导致的!
[root@t-c6 ~]# lsof | grep deleted rsyslogd 917 root 2w REG 252,1 5573745 41014 /var/log/secure (deleted)
如何解决该问题?
重启对应的服务
[root@t-c6 ~]# /etc/init.d/rsyslog restart 关闭系统日志记录器: [确定] 启动系统日志记录器: [确定]
将来有一天发现磁盘block满了,通过du -sh /* | grep G,并未发现太大的文件,可能是删除了不该删除的文件,导致文件大小一直增长,导致block满了,可通过 # lsof | grep deleted 查看
只有进程调用数为0并且硬链接数为0,该文件才能彻底删除!
注:我使用的系统为:CentOS release 6.9 (Final)