`

深入理解硬链接和软链接

阅读更多

深入理解硬链接和软链接 plumpeach(原作)



UNIX和Linux都提供了链接命令ln。顾名思义,ln是将 两个文件名(此说法不大准确)彼此链接起来,使得用户无论使用哪一个文件名都可访问到同一文件。这是我们用ln命令所要达到的目的,但是从技术上讲,只有 软链接是链接两个文件名,硬链接不在此列之中。要透彻理解链接的含义,就必须要分清文件与文件名的区别。而要区分文件与文件名,我们就得知道文件系统如何 管理文件。看似很普通的命令,其技术背景却一点儿也不简单。



文件系统如何管理文件涉及范围太大,不可能也不必要在此全部 叙述,但我们只需知道以下技术要点即可。在Linux中,文件的外延很大,我们常识中的“文件”(例如一篇文档等)是文件, 目录、设备等也都是文件。这些文件种类繁多,数量巨大,万一重名怎么办,文件系统是如何区分并管理它们的呢?限制重名?这当然不行!我们来看看Linux 是如何做的。原来Linux的文件系统为每一个文件分配了一个我们称为索引节点(Inode)的数据结构,在这个索引节点内有一个全系统独一无二的索引节 点号,文件系统正是靠这个索引节点号来识别一个文件。另外文件系统用来管理文件的所有信息都包含在索引节点之中。



好了, 给每个文件分配一个唯一的number,文件系统就知道某个文件究竟是张三的文件还是李四的文件。但是文件的真正使用者——我们人类也要用该number 去识别文件吗?呵呵,若此为真,不知是人玩电脑还是电脑玩人罗。因此我们要用我们的方式去区分各个文件,给每一个文件起一好听易记的名字,同一地点(即同 一目录)不能有两个名字一样的文件。地点若不同,允许重名。至此,人类有人类识别文件的方法,电脑(文件系统)有电脑的做法,喔喔,问题又来了,二者是要 “水火不容”呢,还是“沟通无限”呢?这还用问,当然是后者啦。



OK,既然要“沟通”,“链接”自然而然就提出来了。绕 了个大圈,终于得以言归正传,有了上述的背景知识,不管是硬链接还是软链接对于我们来说已是板上鱼肉。所谓硬链接(hard link, 也称链接[1])就是一个文件的一个或多个文件名。再说白点,所谓链接无非是把我们人类使用的文件名和电脑(文件系统)使用的节点号链接起来。因此我们可 以用多个文件名与同一个文件进行链接,这些文件名可以在同一目录或不同目录。一个文件有几个文件名(用ln命令实现多个文件名),我们就说该文件的链接数 为几。由定义可知,此链接数可以是1, 这表明该文件只有一个文件名。



需要特别指出的是,在info ln的帮助信息中所说的硬链接与我的理解是有差别的,先看info是如何讲硬链接。“A "hard link" is another name for an existing file; the link and the original are indistinguishable.”(一个“硬链接”是一个现有文件的别名;链接文件与被链接文件是无法区别的。)哇喔,好象乱套了,谁对谁错?谁都 没错,二者角度不同。Info是就ln命令而论的“硬链接”,注意了,info中的硬链接也是打了双引号的,我估计此有特殊含义。“链接文件与被链接文件 是无法区别的”,没错,因为它们都指向同一个索引节点嘛。现在我与info主要差别在于,我认同而info不认同以下观点:对于一个拥有文件名的文件,在 没有用过ln命令的情况下,该文件仍存在硬链接,且链接数为1。理论需要实践来证明,在Linux中用ls –l命令获得该目录下文件的详细信息,格式如下:

-rwxr-xr-x 1 root root 1024 Apr 30 17:06 filename

上述格式中黑体加下划线的“1”代表文件名filename的文件的链接数为1。做个实验,在同一目录(不同目录也行)使用ln命令:

ln filename filename2

然后再使用ls –l命令,会得到下面的信息:

-rwxr-xr-x 2 root root 1024 Apr 30 17:06 filename

-rwxr-xr-x 2 root root 1024 Apr 30 17:06 filename2

很 明显,原来文件名为filename的文件现在拥有了两个文件名,链接数变为2, 除此之外其它一切信息都没变,所以说“链接文件与被链接文件是无法区别的”。下面的事实让我怀疑有没有必要用ln产生新的硬链接:无论使用任一文件名对文 件的任何改动,该文件的所有直接或间接[2]链接文件都会随之而改变,最后所有信息都保持一致。



将文件名与索引节点分 开,然后采用硬链接的技术使得管理文件变得更方便,效率更高。例如重命名,进程并不需要打开该文件,只需改动某个目录项的内容即可。还有删除一个文件也是 如此,将相应的目录项删除,该文件的链接数减1,如果删除目录项后该文件的链接数为零,这时系统才把真正的文件从磁盘上删除。



认识了硬链接究竟是怎么一回事,理解硬链接的两个限制就容易多了。

1、不允许给目录创建硬链接;

2、只有在同一文件系统中的文件之间才能创建链接。

篇幅关系,不再赘述。





为 了克服以上限制,引入符号链接(symbolic link,也称软链接)。符号链接实际上是一种特殊的文件类型,这种文件包含了另一个文件的任意一个路径名。这个路径名指向位于任意一个文件系统的任意文 件,甚至可以指向一个不存在的文件。系统会自动把对符号链接的大部分操作(如读、写等)变为对源文件的操作,但某些操作(如删除等)就会直接在符号链接上 完成。在ln中加选项-s便产生一个文件的符号链接。

总之:硬链接就是让多个不在或者同在一个目录下的文件,同时能够修改同一个文件,其中一个修改后,所有有与其有硬链接的文件都一起修改了。

软链接就是与window中的快捷键一样

 

分享到:
评论

相关推荐

    linux 硬链接和软链接深入理解.docx

    Linux 硬链接和软链接深入理解 Linux 操作系统中有两种类型的链接:硬链接和软链接。了解硬链接和软链接的区别和使用场景对于 Linux 系统管理员和开发者非常重要。 硬链接(Hard Link) 硬链接是一种文件系统中...

    软链接与硬链接

    ### 软链接与硬链接 ...通过深入理解硬链接和软链接的差异,我们可以更加灵活地使用这些功能来提高Linux系统的操作效率和安全性。希望本文能够帮助大家告别对链接机制的模糊认识,真正掌握其核心原理。

    深入理解 Linux 链接:符号链接与硬链接的创建与管理

    通过本文的详细介绍和示例,你应该已经了解了如何创建和管理符号链接和硬链接,以及它们在不同情况下的应用。 本文通过深入分析链接的概念、特点和使用场景,并结合实际的 Linux 命令示例,为读者提供了一个全面的...

    Linux软连接和硬链接

    主要分为两种类型:软链接(也称为符号链接)和硬链接。这两种链接方式各有特点,适用场景不同。 **硬链接** 硬链接是Linux中文件的一种特殊形式,它实际上并不创建新文件,而是为已存在的文件添加一个新的名字。硬...

    linux复习,秋招,春招,面试

    - **理解原理**:深入理解硬链接与软链接的工作原理,能够解释它们之间的区别。 - **实践操作**:通过实际操作创建硬链接和软链接,并观察它们的行为差异。 - **应用场景**:了解硬链接与软链接的实际应用场景,能够...

    shell中的函数、硬链接、软链接、权限、特定变量$1,$#等

    本文将深入探讨Shell中的函数、硬链接、软链接、权限管理以及特定变量如$1和 $#等概念。 首先,让我们从Shell函数开始。函数在Shell脚本中起到模块化代码的作用,可以重复使用并降低复杂性。定义一个函数的基本语法...

    11.linux8.0-软硬链接.pdf

    了解并熟练使用软链接和硬链接对于Linux用户来说是至关重要的,这不仅能够提高工作效率,还能帮助理解文件系统的深层结构。通过实践创建和使用这两种链接,Linux初学者可以更深入地掌握这一核心概念。

    ln的软硬连接区别

    综上所述,软链接和硬链接各有优势,适用于不同的场景。软链接提供了灵活性和便捷性,尤其适合于构建复杂的文件结构和跨分区引用;而硬链接则在保持数据一致性、节省磁盘空间和优化文件操作方面表现突出。理解并恰当...

    windows四种文件链接方式

    在Windows操作系统中,链接是一种特殊的文件系统功能,允许用户创建多个文件夹项指向同一个文件或文件夹。...尽管Linux用户可能更熟悉硬链接和软链接,但Windows的链接方式同样强大,值得用户深入学习和利用。

    +实验4 Linux的文件系统.docx

    Linux 文件系统实验报告 本实验报告主要介绍了 Linux 文件系统的使用,包括文件硬链接...本实验报告通过实验和分析,掌握了文件硬链接和软连接的实现方法,了解了文件链接的概念,并深入了解了 Linux 文件系统的使用。

    Centos 7 硬连接和软连接.pdf

    本文将深入探讨两个关键概念:硬连接(Hard Links)和软连接(Symbolic Links),它们都是Linux系统中创建多条访问同一文件内容路径的方法。了解这两个概念对于日常的文件管理和系统维护至关重要。 首先,让我们来...

    ubuntu-修改python与pip软链接.pdf

    在深入讨论如何修改Python和pip的软链接之前,我们先来了解一下软链接的基本概念。软链接(Symbolic Link)类似于Windows中的快捷方式,它是一种文件或目录的引用,并不占用实际的磁盘空间。通过创建软链接,我们...

    链接文件管理~~~~

    1. Linux/Unix系统:这两个操作系统广泛支持链接文件,命令如`ln`用于创建硬链接和软链接。 2. Git版本控制系统:Git中的分支实际上就是一种软链接,指向同一份共同的提交历史。 3. 软件安装:某些软件安装程序会...

    Linux操作系统文件链接.docx

    总之,Linux的硬链接和软链接提供了文件系统中多路径访问文件的能力,各有其应用场景。硬链接通过索引节点确保多个文件名共享同一内容,而软链接则像Windows的快捷方式,提供指向其他文件的路径。深入理解这两种链接...

    C语言符号链接解析:深入`readlink`函数的使用

    在C语言中处理文件系统时,符号链接(也称为软链接)是一种常用的文件类型,它提供了一种指向另一个文件或目录的引用。在Linux系统中,readlink函数允许程序读取符号链接指向的目标路径。本文将详细介绍readlink函数...

    中文版Linux 链接工具

    本教程将深入探讨Linux中的链接机制,包括硬链接和软链接(也称为符号链接),以及如何在命令行环境中使用它们。 **硬链接** 是Linux中的一种特殊文件类型,它实际上并不创建新文件,而是创建了一个指向已有inode...

    linux 连接与索引节点

    1. **inode号**:硬链接和原文件共用同一个inode号,而软链接则有自己的inode号,这表明它们是独立的文件。 2. **文件属性**:软链接在其属性中明确标记为链接,而硬链接则不显示此属性,因为它们在本质上与原文件...

    深入理解Linux内核pdf

    VFS支持文件的创建、打开、读写、关闭等操作,并实现了目录、硬链接、软链接等功能。 网络协议栈是现代操作系统的重要组成部分,Linux内核提供了对多种网络协议的支持,包括TCP/IP。它包含了网络接口层、网络层、...

    convbpsk.rar_LDPC 译码_LDPC卷积_ldpc软硬_卷积译码 软硬_软硬译码

    总结起来,"convbpsk.rar"文件提供了研究和比较LDPC码卷积译码中软硬判决方法的实际示例,对于理解这两种方法的优劣以及在实际通信系统中的应用具有重要意义。通过实验和分析,你可以深入学习到LDPC码解码原理,增强...

    创软自助网站链接系统

    在深入理解这一系统之前,我们先来探讨一下相关的核心知识点。 1. **全自主链接添加系统**: 这一特性意味着用户可以独立完成链接的上传、编辑和删除操作,无需编程知识。用户界面应该是直观且易用的,允许用户...

Global site tag (gtag.js) - Google Analytics