1、链接的概念

在Linux系统中链接分为硬链接和软连接两种,一种为硬链接,另一种为软连接或符号链接(symbolic Link)。ln命令就是创建链接文件的,在默认不带参数的情况下,执行ln命令创建的链接就是硬链接。

2、硬链接

硬链接是指通过索引节点(inode)来进行链接。在Linux(ext2,ext3)文件系统中,保存在磁盘分区中的文件不管是什么类型都会给它分配一个编号,这个编号被称为索引节点(inode)。如果多个文件名指向同一个inode是正常且允许的。这种情况的文件就称为硬链接。硬链接的作用之一就是允许一个文件拥有多个有效路径名,这样用户就可以建立硬链接到重要的文件。以防止误删除源数据(很多硬件存储,如netapp存储 中的快照功能就应用了这个原理,增加一个快照就多了一个硬链接)。为什么一个文件建立了硬链接就会防止数据误删呢?

因为文件系统(ext2)的原理是,只要文件的索引节点还有一个以上的链接。只删除其中一个链接(即仅仅删除了该文件的链接指向)并不影响索引节点本身和其他的链接(即文件数据实体并未被删除),只有当文件的最后一个链接被删除后,此时如果有新数据要存储到硬盘上时或者系统通过fsck做磁盘检查的时候,被删除文件的数据块及目录的链接才会被释放,空间被新数据占用并覆盖。此时,数据就再也无法找回了。也就是说,Linux系统中删除静态(未被使用的文件)文件(目录也是文件)的条件是与之相关的所有硬链接文件均被删除(暂时这样理解即可,后文会讲和进程的占用有关)。

硬链接就相当于文件的另外一个入口,如下图所示。文件的权限放在Inode节点当中,但是文件的名称(文件名)并未保存在inode节点当中,所以每个inode可以对应多个不同文件名的相同数据块的文件。

注:文件名保存在文件目录的block数据块中

3、硬链接的创建

直接执行命令ln 源文件 硬链接文件 即可创建硬链接

硬链接的类型为(-)普通文件类型

第一组数字表示文件的inode节点,权限后边的数字2表示文件的硬链接数量。

小结:

  • 硬链接文件是具有相同inode节点号的不同文件;
  • 删除硬链接文件或者删除源文件之一,文件实体依然存在并未被消除;
  • 只有删除了源文件及所有对应的所有硬链接文件,文件实体才会被删除;
  • 当所有的硬链接文件及源文件被删除后,再存放新的数据会占用文件(包括inode和block)的空间,或者磁盘做fsck检查时数据也会被回收。
  • 硬链接文件是文件的又一个入口
  • 欲删除通过ln(不带参数)创建的硬链接文件,使用rm -f删除硬链接文件即可。
  • 可以通过给文件设置硬链接文件,来防止重要文件被误删除。

3、软连接

软连接也成为符号链接(symbolic link)。Linux 软连接文件就类似于windows系统中的快捷方式。它实际上是一个特殊的文件。在软连接中,软连接文件实际上就是一个文本文件,这个文件中包含有软连接指向另外一个文件的位置信息内容(通过readlink命令,(readlink 软连接文件名称)可以查看软连接记录的位置信息内容,因此通过访问这个快捷方式就可以迅速定位到软连接所指向的源文件的实体。下图为软连接文件的示意图:

执行软连接命令 ln -s 源文件或目录 软连接文件名称

小结:

  • 软连接文件类似windows的快捷方式,软连接存放的是源文件的路径并且指向源文件;
  • 当源文件被删除时,软连接文件依然存在但无法访问指向的源文件(软连接失效);
  • 软连接文件和源文件的Inode不同,即软链接和源文件是不同的文件,文件类型也不同,源文件可能是d,-,b,但软连接文件是l文件;
  • 软连接文件用rm -f删除(不能使用-r),因为软连接不是目录文件,使用-r将删除上层的目录文件。请谨慎使用。

4、示例:

  • 普通文件示例

  • 目录文件示例

  • 基础知识普及(为什么目录文件的硬链接数初始就为2)?

补充:当一个目录为空时,其“.”的硬链接数初始为2,如果此时在当前目录下创建一个子目录,则“."的硬链接数将加1,如果再创建一个文件硬链接数再加1,…….,因为创建一个目录时会在每个目录产生一个"..”指向上层目录的硬链接,该机制直接造成上层目录的硬链接数增加。如果创建子目录的子目录,则爷目录的硬链接不会增加。如果在当前目录创建文件,则关于当前目录"."的硬链接将不会增加。

关于文件链接的总结:

  • 对于删除软链接文件对源文件及硬链接文件无影响;
  • 删除硬链接文件对源文件及软链接文件无影响;
  • 删除源文件对硬链接文件无影响,但是会导致软链接文件失效,白字红底闪烁;
  • 同时删除源文件硬链接文件,整个文件会真正的被删除;
  • 很多硬件设备的快照功能,都是利用了硬链接的原理;
  • 源文件和硬链接文件具有相同的索引节点号,可以认为是同一个文件或一个文件的多个入口;

源文件和软链接文件索引点号不同,是不同的文件,软链接文件相当于源文件的快捷方式,含有源文件的目录指向信息;

关于目录链接的总结

  • 对于目录不可以创建硬链接,但可以创建软连接;
  • 对于目录的软链接是生产场景运维中常用的技巧(例题中有关apache 2.2.17目录指向的简化)
  • 目录的硬链接不能跨越文件系统(从原理可以理解,因为每个文件系统具有独立的Inode编号,每个文件系统的Inode编号可能重合,如何跨文件系统创建硬链接,很有可能造成Inode冲突)
  • 每个目录下面都有一个硬链接“.”号,和上级目录的硬链接“..”

Linux系统中硬链接和软链接的区别

  • 默认不带参数情况下,ln命令创建的是硬链接,带-s参数创建的是软连接
  • 硬链接文件与源文件的Inode节点号相同,而软链接文件的inode节点号与源文件不同
  • ln命令不能对目录创建硬链接,但可以创建软链接,对目录的软链接会经常被用到;
  • 删除软链接文件,对源文件及硬链接文件无任何影响;
  • 删除文件的硬链接文件,对源文件及软链接文件无任何影响;
  • 删除链接文件的源文件,对硬链接文件无影响,会导致其软链接失效(红底白字闪烁);
  • 同时删除源文件机器硬链接文件,导致文件才会被真正删除;
  • 很多硬件设备的快照功能,使用的就类似硬链接的原理;
  • 软链接可以跨文件系统,硬链接不可以跨文件系统。

链接知识拓展

1、Linux系统文件的删除原理

通过上图可以得知以下几点信息:

  • 文件的删除与软链接无任何关系;
  • 文件是否有进程占用,有一个进程占用文件,则i_count加1,如果进程释放文件,则i_count减1.当i_count为0时,文件被删除了。i_count默认为0;
  • 文件的释放受文件进程控制,当有进程使用这个文件时,删除文件时文件占用的空间无法释放。
  • 文件的硬链接数有一个硬链接i_link加1,减少一个硬链接i_link减1,当i_link为0时,文件就被删除了;
  • 当i_link和i_count都为0时,此时才可以真正删除文件数据,回收空间。

Linux系统硬链接和软链接介绍的更多相关文章

  1. 【Linux】Linux系统硬链接和软链接

    在linux系统中有种文件是链接文件,可以为解决文件的共享使用.链接的方式可以分为两种,一种是硬链接(Hard Link),另一种是软链接或者也称为符号链接(Symbolic Link). 查看lin ...

  2. Linux系统——硬链接与软链接

    文件属性软硬连接: 链接有两种,一种为硬链接(Hard Link),另一种为软链接或符号链接(Symbolic Link或Soft Link). 建立硬链接时,链接文件和被链接文件必须位于同一个文件系 ...

  3. Linux系统硬链接和软链接说明 - 运维笔记

    在linux系统中有种文件是链接文件,可以用来解决文件的共享使用.链接的方式可以分为两种,一种是硬链接(Hard Link),另一种是软链接或者也称为符号链接(Symbolic Link).先来查看下 ...

  4. 二、Linux系统硬链接和软链接详细介绍与实践

    链接的概念 在linux系统中,链接可分为两种:一种被称为硬链接(Hard LinK),另一种被称为软链接或符号链接(Symbolic Link).在默认不带参数的情况下,执行ln命令创建的链接是硬链 ...

  5. linux系统 硬链接和软链接

    背景: 当几个用户同在一个项目里工作时.经常须要共享文件. 假设一个共享文件同一时候出如今属于不同用户的不同文件夹下.工作起来就非常方便. 比如B和C文件夹下有一文件D是两者都能够訪问和改动的共享文件 ...

  6. 理解 Linux 的硬链接与软链接(待研究)

    从 inode 了解 Linux 文件系统 硬链接与软链接是 Linux 文件系统中的一个重要概念,其涉及文件系统中的索引节点 (index node 又称 inode),而索引节点对象是 Linux ...

  7. Linux 的硬链接与软链接

    Linux 的硬链接与软链接    http://www.ibm.com/developerworks/cn/linux/l-cn-hardandsymb-links/    若一个 inode 号对 ...

  8. 理解Linux的硬链接与软链接-转载

    理解Linux的硬链接与软链接 来自:https://www.ibm.com/developerworks/cn/linux/l-cn-hardandsymb-links/index.html

  9. 转:理解 Linux 的硬链接与软链接

    Linux 的文件与目录 现代操作系统为解决信息能独立于进程之外被长期存储引入了文件,文件作为进程 创建信息的逻辑单元可被多个进程并发使用.在 UNIX 系统中,操作系统为磁盘上的文本与图像.鼠标与键 ...

随机推荐

  1. Android 强制设置横屏或竖屏 设置全屏

    (转自:http://blog.csdn.net/yuejingjiahong/article/details/6636981) 强制横屏: @Override protected void onRe ...

  2. Linux安装详情图解

    本文讲解Linux的安装 因为是纯属学习使用,所以安装在了虚拟机里   需要软件: VirtualBox-5.1.10 ubuntu-16.04.1-desktop-amd64 说明: 虚拟机可以选择 ...

  3. 烂泥:ubuntu 14.04搭建OpenVPN服务器

    本文由秀依林枫提供友情赞助,首发于烂泥行天下 公司分部需要连接公司内部的服务器,但是该服务器只允许公司内部的网络访问. 为了解决这个问题,打算使用VPN.对于VPN以前使用最多的是PPTP这个解决方案 ...

  4. iOS开发常用代码块(第二弹)

    GCD定时器 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, ); dispat ...

  5. POJ 2356. Find a multiple 抽屉原理 / 鸽巢原理

    Find a multiple Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7192   Accepted: 3138   ...

  6. Intellij IDEA 快捷键整理

    CSDN 2016博客之星评选结果公布      [系列直播]算法与游戏实战技术      "我的2016"主题征文活动 Intellij IDEA 快捷键整理(TonyCody) ...

  7. cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'mvc:annotation-driven'.

    spring 配置文件报错报错信息:cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be ...

  8. 前端自动化测试 —— TDD环境配置(React+TypeScript)

    欢迎讨论与指导:) 前言 TDD -- Test-Drive Development是测试驱动开发的意思,是敏捷开发中的一项核心实践和技术,也是一种测试方法论.TDD的原理是在开发功能代码之前,先编写 ...

  9. dubbox 增加google-gprc/protobuf支持

    好久没写东西了,今年实在太忙,基本都在搞业务开发,晚上来补一篇,作为今年的收官博客.google-rpc 正式发布以来,受到了不少人的关注,这么知名的rpc框架,不集成到dubbox中有点说不过去. ...

  10. selector 使用说明

    android:state_pressed=["true" | "false"]//是否触摸 android:state_focused=["true ...