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

Kon*_*rus 6 filesystems open-files rename files

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

Ale*_*ios 6

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

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

  • 这适用于任何文件系统和任何 unix 变体(某些 unix 变体上的可执行文件除外)。打开的文件与 inode 相关联,而不是与文件名相关联,并且文件是否被重命名甚至删除都没有关系。 (2认同)

Pat*_*aba 1

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

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

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

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

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