linux下cat /dev/null > nohup.out命令把nohup.out文件清空,但是查硬盘容量是却毫无变化

说白了,Oracle告警日志占用的磁盘空间清理,核心就是让进程别再"死抱着"文件不放手。
这事复杂在Linux的文件管理机制上——先说最重要的,当文件被删除但进程仍在访问时,系统会显示(deleted)状态,这时文件空间没释放是因为内核还在维护这个"幽灵文件"。
另外一点,通过lsof查到这些"幽灵文件"并kill掉持有它们的进程,是最直接的方法,但去年我们跑的那个3 000量级集群,直接杀进程导致业务中断的教训太深刻了。
还有个细节挺关键的,Linux把每个进程打开的文件都挂在/proc//fd/里,用kill -9 直接截断这个链接能强制回收,但说实话挺坑的,因为Oracle应用对这种操作支持不咋地,可能触发内核崩溃。
等等,还有个事,如果进程是正常运行的,建议先尝试让应用重启或显式关闭日志文件句柄,这个方式更安全。

linux删除文件 空间没有被释放

嗯...你说的对...有时候...删文件...删不掉...
就...2 02 2 年...我在上海...遇到过...有个服务器...突然空间满了...查了半天...发现是某个日志文件...svn.log...删不掉...
用lsof...查了查...发现...有个进程...一直往里写...锁定了...文件...所以...空间没释放...
当时我也懵...后来才反应过来...不能直接重启...那样...进程没了...但文件还在...
就...试了...你说的方法...echo "" > /tmp/svn.log...这个命令...在线清空...
结果...空间立马就释放了...而且...进程还能继续写...日志...
这个...确实好用...不过...备份还是要做...特别是...生产环境...
rm...这个命令...太猛了...慎用...用mv...可能好点...
总之...遇到这种事...先查...lsof...看哪个进程...在搞鬼...
然后...对症下药...关进程...或者...清空文件...
空间...就能回来了...

文件rm删除但空间不释放问题

记得有一次,我清理服务器上的旧日志文件,用rm命令删了个大文件,心想这下总该释放空间了吧。
结果du一查,空间是下来了,但df一看,空间还是没变。
我当时就纳闷了,这是咋回事呢?
突然想到,我前两天在服务器上部署了个新应用,它可能还在用那个文件。
于是,我赶紧用lsof|grepdeleted查了一下,果不其然,那个文件还被那个应用给用着呢。

然后我就开始思考怎么解决。
直接杀进程怕数据有问题,那我就试试重定向覆盖文件的方法。
我把那个日志文件重定向成空文件,然后给应用发送了个HUP信号,让它重新打开日志文件。
结果,空间一下就释放了。

这事儿让我明白了,Linux的文件删除机制还挺复杂的,得注意文件的引用计数。
下次再遇到类似问题,我就能快速解决了。
不过,这事儿也让我想,是不是还有什么更简单的方法来处理这类问题呢?