iTech Asked: 2014-02-08 00:15:40 +0800 CST2014-02-08 00:15:40 +0800 CST 2014-02-08 00:15:40 +0800 CST rm 会删除网络客户端当前正在访问的文件吗? 772 我的网络服务在客户端上运行nginx并使用标头向客户端php传递文件,如果我使用它将如何处理客户端当前正在访问/下载的文件?X-Accel-Redirectrm /my/folder/*.* linux 1 个回答 Voted Best Answer Jenny D 2014-02-08T00:36:05+08:002014-02-08T00:36:05+08:00 当进程开始从文件中读取时,它会创建一个附加到文件所在的 inode 的文件句柄。 删除文件时,会删除从目录到 inode 的链接。该链接将立即被删除,因此其他进程将无法找到该文件。 但是,只要 inode 有一个活动的文件句柄,就仍然可以从使用该文件句柄的进程访问内容。一旦具有该 inode 的文件句柄的所有活动进程都关闭了它们的文件句柄,文件所在的空间将被标记为空。 您可以将文件名视为一种符号链接。 您有一个名为 的文件/inodes/1234,并将其符号链接到/myapp/myfile.txt 你打开/myapp/myfile.txt。真正发生的是你打开/inodes/1234了,因为那是实际的文件。 您删除符号链接/myapp/myfile.txt。原始文件/inodes/1234仍然存在,在步骤 2 中打开它的进程仍在读取/访问它。 另一个进程要求/myapp/myfile.txt. 它不存在,因为您删除了符号链接。(当然,原版/inodes/1234仍然存在!) 第二个进程要创建/myapp/myfile.txt. 操作系统创建文件/inodes/4711并创建一个符号链接到/myapp/myfile.txt 当然它比这稍微复杂一些,但在这种情况下它是一个有用的模型。 顺便说一句,这也是对“为什么我的磁盘已满,即使我删除了这个巨大的日志文件并且没有其他东西占用空间”这个问题的答案——如果一个进程仍在读取或写入文件,你刚刚做了它是看不见的,你实际上并没有清除它。
当进程开始从文件中读取时,它会创建一个附加到文件所在的 inode 的文件句柄。
删除文件时,会删除从目录到 inode 的链接。该链接将立即被删除,因此其他进程将无法找到该文件。
但是,只要 inode 有一个活动的文件句柄,就仍然可以从使用该文件句柄的进程访问内容。一旦具有该 inode 的文件句柄的所有活动进程都关闭了它们的文件句柄,文件所在的空间将被标记为空。
您可以将文件名视为一种符号链接。
/inodes/1234
,并将其符号链接到/myapp/myfile.txt
/myapp/myfile.txt
。真正发生的是你打开/inodes/1234
了,因为那是实际的文件。/myapp/myfile.txt
。原始文件/inodes/1234
仍然存在,在步骤 2 中打开它的进程仍在读取/访问它。/myapp/myfile.txt
. 它不存在,因为您删除了符号链接。(当然,原版/inodes/1234
仍然存在!)/myapp/myfile.txt
. 操作系统创建文件/inodes/4711
并创建一个符号链接到/myapp/myfile.txt
当然它比这稍微复杂一些,但在这种情况下它是一个有用的模型。
顺便说一句,这也是对“为什么我的磁盘已满,即使我删除了这个巨大的日志文件并且没有其他东西占用空间”这个问题的答案——如果一个进程仍在读取或写入文件,你刚刚做了它是看不见的,你实际上并没有清除它。