链接的概念

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

硬链接

硬链接是指通过索引节点来进行链接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都会给它分配一个编号,这个编号被称为索引节点编号(Inode Index)或者Index。

在Linux系统中,多个文件名指向同一索引节点(Inode)是正常且允许的。一般这种链接就称为硬链接。硬链接的作用之一是允许一个文件拥有多个有效路径名,这样用户就可以建立硬链接到重要的文件,以防止“误删”源数据(很多硬件,如netapp存储中的快照功能就应用了这个原理,增加一个快照就多了硬链接)。为什么为文件建立了硬链接就会防止数据误删呢?

因为文件系统的原理是,只要文件的索引节点(Inode Index)还有一个以上的链接(仅仅删除了该文件指向)。只删除其中一个链接并不影响索引节点本身和其他的连接(即数据实体并未被删除),只有当最后一个链接被删除后,此时如果有新数据要存储到硬盘时,被删除文件的数据块及目录的链接才会被释放,空间被新数据占用覆盖。此时,数据就再也无法找回了。也就是说,在linux系统中,删除文件(其实目录也是文件)的条件是与之相关的所有硬链接文件均被删除(暂时这样理解,后文会讲和进程占用也有关)。提示:硬链接就相当于文件的另外一个入口。

软链接

软链接有时也称为符号链接(Symbolic Link)。软链接文件就类似与Windows系统中的快捷方式。它实际上是一个特殊的文件,在软链接中,软链接文件实际中就是一个文本文件,这个文件中包含有软链接指向另一文件的位置信息内容,因此,通过访问这个“快捷方式”就可以迅速定位到软链接所指向的源文件实体。

示例演示

文件演示

[root@localhost ~]# mkdir /test/oldboy -p
[root@localhost ~]# cd /test/oldboy/
[root@localhost oldboy]# touch oldboyfile #创建一个测试文件oldboyfile
[root@localhost oldboy]# ln oldboyfile oldboyfile_hard_link #创建一个oldboyfile的一个硬链接文件oldboyfile_hard_link
[root@localhost oldboy]# ln -s oldboyfile oldboyfile_soft_link #创建一个oldboyfile的一个软链接文件oldboyfile_soft_link [root@localhost oldboy]# ls -li
#-i参数可查看文件的inode节点信息
total
-rw-r--r-- root root May : oldboyfile
-rw-r--r-- root root May : oldboyfile_hard_link
lrwxrwxrwx root root May : oldboyfile_soft_link -> oldboyfile

截图更清晰

总结:从上面的示例结果中可以看到,硬链接文件oldboyfile_hard_link

与源文件oldboyfile的inode节点号相同,均为810403,然而软链接文件oldboyfile_soft_link的inode节点号与源文件odboyfile不同,为810404。

目录示例

[root@localhost oldboy]# mkdir oldboydir   #创建一个测试文件oldboydir
[root@localhost oldboy]# ln oldboy
oldboydir/ oldboyfile_hard_link
oldboyfile oldboyfile_soft_link
[root@localhost oldboy]# ln oldboydir oldboydir_hard_link
ln: `oldboydir': hard link not allowed for directory #目录无法创建硬链接
[root@localhost oldboy]# ln -s oldboydir oldboydir_soft_link #但目录可以创建软链接,在生产环境也经常用到。
[root@localhost oldboy]# ls -lirt
total
-rw-r--r-- root root May : oldboyfile_hard_link
-rw-r--r-- root root May : oldboyfile
lrwxrwxrwx root root May : oldboyfile_soft_link -> oldboyfile
drwxr-xr-x root root May : oldboydir
lrwxrwxrwx root root May : oldboydir_soft_link -> oldboydir
提示:红色部分为本例

截图更清晰

总结:ln命令不能对目录创建硬链接,到哪可以对目录创建软链接,对于目录的软链接也是生产场景常用的功能。

删除示例

[root@localhost oldboy]# echo "this is oldboyfile" > >oldboyfile
[root@localhost oldboy]# cat oldboyfile
this is oldboyfile
[root@localhost oldboy]# cat oldboyfile_hard_link
this is oldboyfile
[root@localhost oldboy]# cat oldboyfile_soft_link
this is oldboyfile
[root@localhost oldboy]# rm -f oldboyfile #删除原始文件,其实就是删除了一个文件的硬链接

截图更清晰:

[root@localhost oldboy]# cat oldboyfile_hard_link
this is oldboyfile
提示:奇怪,内容还在,其实这就是因为有oldboyfile_hard_link硬链接存在,因此即使删除了oldboyfile,但是仍有硬链接指向文件的INODE节点,所以,此时文件才不会被释放被删除,当删除文件oldboyfile时,仅仅删除了oldboyfile到该文件INODE节点的连接而已。
[root@localhost oldboy]# cat oldboyfile_soft_link
cat: oldboyfile_soft_link: No such file or directory
总结:通过上面的测试可以看出:当删除原始文件oldboyfile,硬链接oldboyfile_hard_link不受影响,而oldboyfile_soft_link失效。

链接总结

有关文件

通过以上的测试,可以得到以下几个结论:

.删除软链接oldboyfile_soft_link,对oldboyfile,oldboyfile_hard_link无影响;
.删除硬链接oldboyfile_hard_link,对oldboyfile,oldboyfile_soft_link也无影响;
.删除oldboyfile,对硬链接oldboyfile,oldboyfile_hard_link没有影响,导致软链接oldboyfile_soft_link失效。
.同时删除源文件oldboyfile,硬链接oldboyfile_hard_link,整个文件会真正的被删除。
.很多已经设备中的快照功能,就是利用了硬链接的原理。

有关目录

1.对于目录,不可以创建硬链接,但可以创建软链接

2.对于目录的软链接是生产环境中采用的技巧

二、Linux系统硬链接和软链接详细介绍与实践的更多相关文章

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

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

  2. Linux系统硬链接和软链接介绍

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

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

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

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

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

  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. 【小技巧】object上显示div

    这个现在不大常用了,就是object在页面中显示的优先级最高,其他层想覆盖在其上面,设置的z-index再高都不管用,解决办法是在层中加一个iframe.不多说了,直接记录下代码吧,估计以后用到的机率 ...

  2. 洛谷$2014$ 选课 背包类树形$DP$

    luogu Sol 阶段和状态都是树形DP板子题,这里只讲一下背包的部分(转移)叭 它其实是一个分组背包模型,具体理解如下: 对于一个结点x,它由它的子结点y转移而来 在子结点y为根的树中可以选不同数 ...

  3. Q: 字符串的修改

    题目描述 怎么样,前面的题还可以吧~ 依旧是字符串处理,设A和B是两个字符串.我们要用最少的字符操作次数,将字符串A转换为字符串B.这里所说的字符操作共有三种: 1. 删除一个字符: 2. 插入一个字 ...

  4. JAVA字节码文件之结构

    开发工具:IEDA.JDK1.8.WinHex 一.字节码文件结构 源代码 package com.jalja.java.bytecode; /** * @Auther: XL * @Date: 20 ...

  5. vmware 14 激活码

    VMware虚拟机已升级至14版本,之前的12版本的秘钥已经无法使用,在此分享一下VMware Workstation 14永久激活密钥: CG54H-D8D0H-H8DHY-C6X7X-N2KG6 ...

  6. C++ 模板常见特性(函数模板、类模板)

    背景 C++ 是很强大,有各种特性来提高代码的可重用性,有助于减少开发的代码量和工作量. C++ 提高代码的可重用性主要有两方面: 继承 模板 继承的特性我已在前面篇章写过了,本篇主要是说明「模板」的 ...

  7. C# 数独求解算法。

    前言 数独是一种有趣的智力游戏,但是部分高难度数独在求解过程中经常出现大量单元格有多个候选数字可以填入,不得不尝试填写某个数字然后继续推导的方法.不幸的是这种方法经常出现填到一半才发现有单元格无数可填 ...

  8. Vmware下Ubuntu 14.04静态IP地址的设置方法

    一.环境 宿主机 Win 8.1 虚拟机工具 VMware 10.0 虚拟主机系统 Ubuntu 14.04   二.说明 这里需要注意的是:VMware对于VMnet8采用如下规则(192.168. ...

  9. Spring中使用注解 @Scheduled执行定时任务

    注解@Scheduled 使用方式 注解@Scheduled 可以作为一个触发源添加到一个方法中,例如,以下的方法将以一个固定延迟时间5秒钟调用一次执行,这个周期是以上一个调用任务的完成时间为基准,在 ...

  10. ArcGIS for JavaScript 开发智能提示

    开发如果没有智能提示,可想而知是一件多举痛苦的事情,好在Esri为Visual Studio 2010.Aptana3提供了一个插件,这样就使我们在使用ArcGIS API for Javascrip ...