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. WPF 自定义的窗口拖动

    WPF原有的窗口样式太丑,当我们重新定义窗口时,则需要添加一些额外的功能,如拖动~ 1.在界面上对布局元素如Grid,添加委托事件: MouseLeftButtonDown="UIEleme ...

  2. MPLS与LDP从入门到了解

    多协议标签交换(MPLS)是一种用于快速转发数据包的技术,它的出现就是为了提高转发效率.因为IP转发大多靠软件进行,在转发的每一跳都要进行至少一次最长匹配查找,操作复杂导致转发速度比较慢.有些厂商借鉴 ...

  3. JAVA中整型的存储和左右移位运算

    byte,1个字节8位, -128 ~ 127之间,首位表示正负,0为正,1为负,0111,1111表示127,-127为127取反1000,0000,再加1,即1000,0001为-127,-127 ...

  4. 2016年Web前端面试题目

    以下是收集一些面试中经常会遇到的经典面试题以及自己面试过程中无法解决的问题,通过对知识的整理以及经验的总结,重新巩固自身的前端基础知识,如有错误或更好的答案,欢迎指正.:) HTML/CSS部分 1. ...

  5. 【repost】JavaScript完美运动框架的进阶之旅

    运动框架的实现思路 运动,其实就是在一段时间内改变left.right.width.height.opactiy的值,到达目的地之后停止. 现在按照以下步骤来进行我们的运动框架的封装: 匀速运动. 缓 ...

  6. JavaScript OOP 之「创建对象」

    工厂模式 工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程.工厂模式虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题. function createPers ...

  7. 关于mirai病毒的一些研究

    首页好像只能显示随笔,之前发在文章里面的,见文章http://www.cnblogs.com/mrchang/articles/6210681.html

  8. Android Hook技术

    原文:http://blog.csdn.net/u011068702/article/details/53208825 附:Android Hook 全面入侵监听器 第一步.先爆项目demo照片,代码 ...

  9. cocos2dx-lua_修改源码流程(cocos2dx-3.10、win7、Cocos Code IDE1.2)

    以下是在cocos2dx-3.10.win7.Cocos Code IDE1.2下假定你已经配置好了cocos2dx的环境.1.修改源代码步骤(1)在Cocos/Cocos2d-x/cocos2d-x ...

  10. <Script>放置位置

    html文件是自上而下的执行方式 css引入执行加载时,程序仍然往下执行 script脚本是则中断线程,待该script脚本执行结束之后程序才继续往下执行 页面效果实现类的js放在body之前,动作, ...