【问题标题】:Hard links linux, memory硬链接linux,内存
【发布时间】:2013-11-25 09:58:24
【问题描述】:

当您在 linux 中复制文件时(使用 contex 菜单复制命令),linux 是否会创建文件的硬链接? 另外,如果您删除原始文件而不是硬链接,该文件仍保留在内存中,但它的指针已删除,会发生什么情况? 我很难用记忆理解一些事情。 要释放磁盘空间,您需要删除这两个文件,对吗? 硬链接是否指向原始文件的内存位置?我曾经看到术语 inode,现在我很确定 inode 到底是什么。

【问题讨论】:

    标签: linux memory


    【解决方案1】:

    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 相关的几乎所有其他内容。

    【讨论】:

    • 这取决于编程语言。如果你只是想玩玩,试试 perl,perl 是小黑客的好选择。 man perlfunc,搜索 stat。
    • 如何从终端调用它? :D
    【解决方案2】:

    复制不会创建硬链接,这将是破坏行为。硬链接只是同一个文件的一个附加的一流名称;通过一个名称修改文件(而不是像某些编辑器那样通过保存在临时名称下然后移动它),当以另一个名称访问时,您也会看到文件中的更改。不是我对副本的期望。

    请注意,文件的名字没有什么特别之处。所有硬链接都只是指向同一个文件。

    一旦指向文件的最后一个目录条目被删除,可能仍然有打开的文件句柄指向它(来自打开文件的程序)。只要其中之一存在,该文件就仍然存在并且可以使用。它只是不能被以前没有打开过的进程打开,因为它已经没有名字了。

    当没有更多的目录条目指向一个文件并且没有程序再有一个打开的文件句柄时,它就再也无法访问了。因此,操作系统会释放磁盘上的空间。

    【讨论】:

    • 你告诉了我我已经知道的一切:/ 如何查看特定文件占用了多少空间?当我复制文件并使用 ll -h 命令时,它总是说 4K
    • 您问“A 做 B 吗?”我的回答从“不,A 不做 B”开始。如果你已经知道了,为什么还要问?在大多数文件系统上,小文件总是占据一个完整的块,而在您的计算机上似乎是 4k。
    • 另外,您说的是“删除两个文件”,其中只有一个文件,两个目录条目指向它。看来你应该重新阅读我写的内容。
    • 我想检查我是否正确,并认为有人会更彻底地解释它。你能回答我这个问题:如何查看特定文件消耗了多少空间?当我复制文件时,它总是说它们消耗 4kb(大于 4kb 的文件)
    • 你也没有提到什么是inode :)
    猜你喜欢
    • 1970-01-01
    • 2012-01-29
    • 2015-05-29
    • 1970-01-01
    • 2016-07-22
    • 1970-01-01
    • 1970-01-01
    • 2013-04-28
    • 2011-04-13
    相关资源
    最近更新 更多