我可以移动包含打开文件的目录吗?

我可以移动包含打开文件的目录吗?

想象一下使用目录的一堆进程/home/user/logs。他们有一些日志打开的时间较长。

答案1

是的,在某些条件下。如果移动文件的父目录,文件的 inode 不会改变,因此打开的文件句柄仍然有效。条件是:

  • 您不会跨文件系统移动目录。当然,这会改变文件的索引节点号。
  • 过程实际上保持文件打开,并且偶尔不要关闭它们(如果是这样,您必须重新配置应用程序以使它们知道新的父目录)
  • 您正在使用 ext2/3/4 或 ufs 的各种版本之一。我不能诚实地谈论其他文件系统,因为我不确定它们的内部组织方式。

答案2

进程通常不会在日志中长时间保持文件打开状态。

是的,您可以随时移动/删除任何进程正在使用的任何目录或文件。哎呀,您可以在进程运行时删除该进程的可执行文件,它将继续运行。

但是,请为一些可能的情况做好准备:

  • 当进程重新打开以写入日志文件时,它们将重新创建它们。
  • 进程将继续写入旧位置而不是新位置
  • 如果删除进程的可执行文件,您将无法再次启动它

当没有进程使用文件描述符时,文件将在删除时被物理清除。您将立即看到文件被移动/删除。

相关内容