有没有办法在Linux中创建链接到特定iNode的文件? 采取这种情况:有一个文件正在写入(可能是日志),特定文件被删除但 dir / proc中的链接仍然指向它。在这种情况下,我们需要不是裸份,而是需要它的硬链接,以便我们可以在进程关闭之前进行未来修改和最后修改,系统将其删除。
如果我们有iNode号码有没有办法实现这个目标?
答案 0 :(得分:15)
由于没有涉及iNode的Syscall,因为这是一个extX fs的概念并且不是一个好的做法制作一个炉管但它是一个负责任的链(如MEL建议的那样),只有一个否回答这个问题,因为在VFS级别我们处理文件路径和名称而不是其他内部表示。
但是为了实现跟踪最后修改的目标,我们可以使用 tail 连续监控和复制:
tail -c+1 -f --pid=PID /proc/PID/fd/FD > /path/to/the/copy
其中PID是已删除文件仍然打开且FD是其文件描述符编号的进程的pid。在 -f 尾部打开并按住文件以显示进一步修改, -c + 1 开始" tail"从第一个字节开始,用 - pid = PID 尾部通知pid退出时退出。
答案 1 :(得分:5)
您可以使用lsof恢复已删除的文件(有时)......
> lsof | grep testing.txt
less 4607 juliet 4r REG 254,4 21
8880214 /home/juliet/testing.txt (deleted)
在尝试此操作之前,请务必阅读原始文章以获取完整的详细信息,除非您是像我一样的Maveric。
> ls -l /proc/4607/fd/4
lr-x------ 1 juliet juliet 64 Apr 7 03:19
/proc/4607/fd/4 -> /home/juliet/testing.txt (deleted)
> cp /proc/4607/fd/4 testing.txt.bk
http://www.linuxplanet.com/linuxplanet/tips/6767/1
享受
答案 2 :(得分:4)
总是很难回答“我能做什么”这样的问题。但据我所知,/ sys / nor / proc都没有提供不是符号链接的打开文件描述符的映射。我假设“但是dir / proc中的链接仍然指向它”你的意思是/ proc // fd / entries看起来像符号链接?我几乎可以肯定你无法恢复原始文件。
我把它拿回来:正如用户user2676075指出的那样,复制确实有效。只是硬链接不...
更新:如果您考虑一下,这是合乎逻辑的。
/ proc / * / fd / entries假装是符号链接,但实际上它们是不同的,否则复制将无效。我认为他们假装是符号链接,用'ln -l'提供有意义的信息。
关于(缺少)硬链接到某些inode的能力(假设有一些系统调用):由于以下原因,这不能成为内核或VFS接口的一部分:
这会违反文件系统的完整性。文件系统不应该保留完全删除的文件的磁盘块,其方式与保留的文件相同。
inode可能是一个完全虚拟的概念,用于标识“存储数据流的插槽”。我假设可能存在将没有引用的插槽转换回插槽的问题。由文件系统中的名称引用。
我承认反对这种系统调用的可能性并不紧张。但是考虑到VFS接口的当前状态(AFAIR没有提供这样的调用),对于任何文件系统实现(包括例如分布式文件系统)来说,提供调用将文件链接到一个文件系统将是一个沉重的负担。目录由inode。
ATM我想知道在删除最后一个引用之前和之后调用fstat实际上是否需要返回相同的inode信息... 吨