【发布时间】:2013-11-25 09:58:24
【问题描述】:
当您在 linux 中复制文件时(使用 contex 菜单复制命令),linux 是否会创建文件的硬链接? 另外,如果您删除原始文件而不是硬链接,该文件仍保留在内存中,但它的指针已删除,会发生什么情况? 我很难用记忆理解一些事情。 要释放磁盘空间,您需要删除这两个文件,对吗? 硬链接是否指向原始文件的内存位置?我曾经看到术语 inode,现在我很确定 inode 到底是什么。
【问题讨论】:
当您在 linux 中复制文件时(使用 contex 菜单复制命令),linux 是否会创建文件的硬链接? 另外,如果您删除原始文件而不是硬链接,该文件仍保留在内存中,但它的指针已删除,会发生什么情况? 我很难用记忆理解一些事情。 要释放磁盘空间,您需要删除这两个文件,对吗? 硬链接是否指向原始文件的内存位置?我曾经看到术语 inode,现在我很确定 inode 到底是什么。
【问题讨论】:
inode是除内容外的所有文件数据。
一个目录包含一组名称和数字:“这个目录包含文件 foo,它是这个驱动器上的文件号 3,bar,它是文件号 4,quux,17,即,123,最后是 ohmygod,77321341” .索引节点 3 包含“此文件创建于 1970 年 1 月 1 日,最后一次修改于 1990 年 1 月 1 日,最后一次读取于 1990 年 1 月 2 日。它有 722 个字节大,这些字节位于驱动器上的 4k 块编号 768123 中”还有其他一些东西。
stat() 系统调用显示需要多少块,以及与 inode 相关的几乎所有其他内容。
【讨论】:
复制不会创建硬链接,这将是破坏行为。硬链接只是同一个文件的一个附加的一流名称;通过一个名称修改文件(而不是像某些编辑器那样通过保存在临时名称下然后移动它),当以另一个名称访问时,您也会看到文件中的更改。不是我对副本的期望。
请注意,文件的名字没有什么特别之处。所有硬链接都只是指向同一个文件。
一旦指向文件的最后一个目录条目被删除,可能仍然有打开的文件句柄指向它(来自打开文件的程序)。只要其中之一存在,该文件就仍然存在并且可以使用。它只是不能被以前没有打开过的进程打开,因为它已经没有名字了。
当没有更多的目录条目指向一个文件并且没有程序再有一个打开的文件句柄时,它就再也无法访问了。因此,操作系统会释放磁盘上的空间。
【讨论】: