• unix文件系统:链接与文件


    说明:以下是在读小骆驼书《Perl 语言入门》第十二章 目录操作 中“链接与文件”一节(P189-193)中的读书笔记。

    目录是一种由系统管理的特殊文件,它基本上是一份列表。
    每份文件都会存储在一个编好号的inode里,我们可以把它想象成磁盘上的门牌号码。


    ls -l命令,硬链接的数量会显示在权限标记的右边。
    每个目录都会有 . 这个项目,它会指回目录本身的inode。所以任何目录的链接数都至少是2.一般来说,目录的链接数等于子目录的数量加上2.

    链接分硬链接和软链接(又叫符号链接)。

    【硬链接】
    硬链接的本质是:不同的文件名指向同样的inode,文件事实上只有一份。
    建立硬链接:
    shell命令:ln file1 file2
    perl命令:link file1 file2

    此时,file1和file2指向同一个inode(假定inode为12345),文件事实上只有1份,修改file1的时候同时会修改file2(因为只有一个文件)。但是要注意用文本编辑器进行修改的时候,可能会导致变成两份文件,视文本编辑器的原理而定。

    当删除file1的时候,inode 12345的链接数减一,file2并不会删除。只删除file2的时候,也是一样原理。
    当该inode的链接数等于0的时候,数据就丢失了。

    因为硬链接的性质,所以在某种程度上可以防止数据的流失(只要inode的链接数大于0,数据就还在)。

    perl的rename函数可以将文件搬移到别的目录里,但是来源和目的地必须在同一个文件系统上(同一个磁盘上),因为rename的原理是基于文件的 inode 列表。如果跨磁盘搬移文件,那inode里的数据就必须重新部署。

    目录不能建立硬链接(从文件系统基于inode的原理很容易理解为什么。如果可以的话,文件系统那就乱套了,而且整个系统的性能不知道要低成什么样了)

    【软链接】
    软链接又叫符号链接。它是目录里的一种特殊项目,用来告诉系统到别的方向找找看。
    建立软链接:
    shell命令:ln -s fileA fileB
    perl命令:symlink "fileA" "fileB"

    假定fileA的inode为34567,inode的链接数为1.那么在建立软链接之后,inode的链接数仍然为1,保持不变。
    符号链接只是告诉系统:如果你是来找fileB的,请到fileA那边去。仅此而已。
    如果删除fileA,那么该inode的链接数就减到0,则文件内容永久丢失了。

    目录可以建立软链接。
    perl里面使用readlink可以取得软链接所指向的位置。

    硬链接和软链接都非常有用。但unix之外的很多系统对此两者都不支持。
    这两种链接都可以用unlink移除,unlink只是从目录里移除该文件名的链接项目,将它的链接数递减,如有需要再释放inode。这也是为什么perl和php中的文件删除函数取名为 unlink 的原因。

  • 相关阅读:
    工厂模式简介
    设计模式
    idea的安装与配置及基本用法
    软件架构设计的七大原则
    C#设计模式开启闯关之路
    基础知识详解系列目录
    .Net Core2.2 使用 AutoMapper进行实体转换
    通俗易懂设计模式解析——解释器模式
    通俗易懂设计模式解析——备忘录模式
    通俗易懂设计模式解析——访问者模式
  • 原文地址:https://www.cnblogs.com/rethink/p/1554692.html
Copyright © 2020-2023  润新知