Linux下已删除但被进程持有的文件能否被其他进程访问?
已删除但被进程持有的文件访问问题解答
我来针对你的两个问题逐一解释:
问题1:文件已被删除,但仍有进程持有其文件句柄,其他进程能否访问该文件?
- 直接通过原文件名是无法访问的,因为文件的目录条目已经被从文件系统中移除,系统找不到这个文件的索引路径。
- 但存在间接访问的途径,前提是你拥有足够的权限(比如root权限,或者和持有句柄的进程属于同一用户且有对应权限)。
问题2:Linux中如何让其他进程访问这类文件或获取写入的数据?
在Linux系统里,/proc虚拟文件系统是解决这个问题的关键——它保存了所有运行中进程的实时信息,包括进程打开的文件描述符。具体操作方法如下:
- 定位目标进程:使用
lsof命令找出持有已删除文件句柄的进程ID(PID):
输出结果里会显示进程的PID、文件描述符(FD列),以及原文件的相关信息。lsof | grep "deleted" - 找到文件的虚拟路径:每个进程的
/proc/<PID>/fd/目录下,数字命名的条目就是该进程打开的文件描述符,它们是指向实际文件的符号链接。比如目标进程PID是1234,文件描述符是3,那么对应的路径就是/proc/1234/fd/3。 - 访问或提取数据:
- 直接查看文件内容:
cat /proc/1234/fd/3 - 用程序打开这个路径读取数据:和操作普通文件完全一样,只要你的程序有访问该路径的权限。
- 持久化数据到新文件:
cp /proc/1234/fd/3 /path/to/saved_data.log
- 直接查看文件内容:
重要提醒
- 权限限制:root用户可以访问所有进程的
/proc目录;普通用户仅能访问自己拥有的进程的/proc内容。 - 生命周期:只要持有文件句柄的进程还在运行,
/proc下的这个文件描述符链接就会存在;一旦进程终止,系统会立即回收该文件占用的磁盘空间,届时就再也无法访问这些数据了。
内容的提问来源于stack exchange,提问作者James_pic
相关产品推荐
相关产品推荐

