查找并删除已打开但已删除的大文件

多坦科恩

如何找到已删除但仍在应用程序中打开的大文件?即使进程已打开,如何删除该文件?

情况是,我们正在运行一个进程,该进程正在以惊人的速度填充日志文件。我知道原因,并且我可以解决它。在此之前,我想在不关闭进程的情况下rm或清空日志文件。

简单地执行rm output.log操作只会删除对文件的引用,但是它会继续占用磁盘上的空间,直到进程终止。更糟糕的是:rming之后,我现在无法找到文件的位置或文件的大小!有什么方法可以找到文件,甚至可以在另一个进程中打开它,也可以将其清空?

我专门指的是基于Linux的操作系统,例如Debian或RHEL。

斯蒂芬·查泽拉斯(Stephane Chazelas)

如果无法终止应用程序,则可以截断而不是删除日志文件来回收空间。如果未在附加模式(带有O_APPEND下打开文件,则文件将与下一次应用程序写入文件时一样大(尽管前导部分稀疏并且看起来好像包含NUL字节),但是空格将被回收(这不适用于Apple OS / X上不支持稀疏文件的HFS +文件系统)。

截断它:

: > /path/to/the/file.log

如果已将其删除,则在Linux上,您仍然可以通过以下方式截断它:

: > "/proc/$pid/fd/$fd"

$pid打开文件的进程的进程ID在哪里,打开$fd文件的文件描述符在哪里(您可以使用进行检查)lsof -p "$pid"

如果您不知道该pid,并且正在查找已删除的文件,则可以执行以下操作:

lsof -nP | grep '(deleted)'

lsof -nP +L1如@ user75021所提到的,是一个更好的选择(更可靠,更可移植)(列出链接少于1个的文件)。

或(在Linux上):

find /proc/*/fd -ls | grep  '(deleted)'

或使用以下命令查找较大的zsh

ls -ld /proc/*/fd/*(-.LM+1l0)

如果应用程序是动态链接的,则另一种方法是将调试器附加到该应用程序并使其调用,close(fd)然后再调用new open("the-file", ....)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

释放已删除但已打开的日志文件

来自分类Dev

我应该担心lsof中的大文件(已删除)吗?

来自分类Dev

linux大文件已删除,但未释放磁盘空间

来自分类Dev

恢复已删除的文件

来自分类Dev

已删除的 regedit 文件

来自分类Dev

jenkins 中已删除文件的大量打开文件处理程序

来自分类Dev

如何防止perforce打开/移动已删除的文件?

来自分类Dev

linux +查找+删除文件,并警告“文件<文件名>已删除”

来自分类Dev

Laravel迁移已删除文件

来自分类Dev

从GIT检索已删除的文件

来自分类Dev

ownCloud同步已删除的文件

来自分类Dev

如何清除已删除的文件

来自分类Dev

OneDrive上载已删除的文件

来自分类Dev

Subversion:提交已删除的文件

来自分类Dev

我已删除_viewstart文件

来自分类Dev

Elasticsearch:找到已删除的文件?

来自分类Dev

查看已删除文件的列表

来自分类Dev

使用中的已删除文件

来自分类Dev

检索已删除分区的文件

来自分类Dev

已删除的配置文件

来自分类Dev

StreamReader 读取已删除的文件

来自分类Dev

如何清除已删除的文件

来自分类Dev

Perforce reconcile命令无法识别已打开以进行编辑的文件已删除

来自分类Dev

对于已删除且不再跟踪的大文件,Git强制将其推送到github拒绝

来自分类Dev

对于已删除且不再跟踪的大文件,Git强制将其推送到github拒绝

来自分类Dev

为什么打开似乎删除了硬盘的已删除文件的文件句柄

来自分类Dev

为什么打开似乎删除了硬盘的已删除文件的文件句柄

来自分类Dev

查找两个Excel文件之间的更改(新行,已删除行,已更新行)

来自分类Dev

如何删除已删除用户的剩余文件?

Related 相关文章

热门标签

归档