linux 里有硬链接和软连接两种概念。要明白这些概念首先要明白文件在linux 上其实有3个组成部分。

data 真正的数据存储区域

inode 一个用来唯一表示data的数据结构

filename 指向inode

硬链接

hard link是说增加一个filename point到inode。 这里的重点是inode不变,data不变。只是filename多了一个。因为inode 不变,而inode是跟文件系统一一对应的,所以硬链接不能跨文件系统。

软连接

soft link是说增加了一个新的文件,即一个新的data区域 一个新的inode, 一个新的filename。但是data 中存储的内容是指向源文件的一个指针。因为软连接多了一个inode, 所以软连接可以跨文件系统。

下面的步骤可以更详细的展示文件,硬链接 软连接的关系

首先创建一个文件large。 如下例子中

stat 显示了 Inode 为4298673113

ls -l 显示了 large文件的大小为9.4G 引用数 为1 (-rw-r--r--. 1 这里的1是引用数)

[root@node1 test]# stat large
File: ‘large’
Size: 10000000000 Blocks: 19531256 IO Block: 4096 regular file
Device: fd02h/64770d Inode: 4298673113 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2015-09-24 15:55:42.703757216 +0800
Modify: 2015-09-24 15:55:51.054222277 +0800
Change: 2015-09-24 16:14:12.166408739 +0800
Birth: -
[root@node1 test]#
[root@node1 test]# ls -lh large
-rw-r--r--. 1 root root 9.4G Sep 24 15:55 large

其次我们创建一个硬链接如下:

stat 显示了 Inode 为4298673113 ,两个文件都是。

ls -l 显示了 两个文件的大小为9.4G 引用数 为2

这是因为硬链接只是为文件多建立了个名字。即引用多了一个。而inode不变。文件的大小也不变。

[root@node1 test]# stat large
File: ‘large’
Size: 10000000000 Blocks: 19531256 IO Block: 4096 regular file
Device: fd02h/64770d Inode: 4298673113 Links: 2
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2015-09-24 15:55:42.703757216 +0800
Modify: 2015-09-24 15:55:51.054222277 +0800
Change: 2015-09-24 16:17:47.855250627 +0800
Birth: -
[root@node1 test]# ls -lh large
-rw-r--r--. 2 root root 9.4G Sep 24 15:55 large
[root@node1 test]#
[root@node1 test]# stat large.hard
File: ‘large.hard’
Size: 10000000000 Blocks: 19531256 IO Block: 4096 regular file
Device: fd02h/64770d Inode: 4298673113 Links: 2
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2015-09-24 15:55:42.703757216 +0800
Modify: 2015-09-24 15:55:51.054222277 +0800
Change: 2015-09-24 16:17:47.855250627 +0800
Birth: -
[root@node1 test]#
[root@node1 test]# ls -lh large.hard
-rw-r--r--. 2 root root 9.4G Sep 24 15:55 large.hard
[root@node1 test]#

我们在创建一个软连接文件

stat 显示inode变了

ls -lh 显示引用为1 而大小也变了。

这是因为软连接是一个新的文件,其filename是新的,inode是新的,data区域也是新的。data区域的内容是指向源文件的。所以引用为1 inode 不一样而且大小也不一样

[root@node1 test]# stat large.soft
File: ‘large.soft’ -> ‘large’
Size: 5 Blocks: 0 IO Block: 4096 symbolic link
Device: fd02h/64770d Inode: 4298672263 Links: 1
Access: (0777/lrwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2015-09-24 16:21:35.503190700 +0800
Modify: 2015-09-24 16:21:35.503190700 +0800
Change: 2015-09-24 16:21:35.503190700 +0800
Birth: -
[root@node1 test]# ls -lh large.soft
lrwxrwxrwx. 1 root root 5 Sep 24 16:21 large.soft -> large

  

更进一步去理解硬链接可以用如下的例子:

我们有如下3个文件

[root@node1 test]# ls -l *
-rw-r--r--. 1 root root 10000000000 Sep 24 16:23 big
-rw-r--r--. 2 root root 10000000000 Sep 24 15:55 large
-rw-r--r--. 2 root root 10000000000 Sep 24 15:55 large.hard

这几个文件大小一样。large和large.hard互为硬链接。

我们再看man rm 输出的一句话

Remove (unlink) the FILE(s)

这说明rm操作其实是给文件去掉一个link (也就是硬链接)但如果文件去掉一个硬链接之后没有更多的引用了,操作系统会回收文件所占用的空间。

因此,我们可以断定,rm big 所需要的时间要远大于rm large 。 因为big只有一个硬链接,我们在rm后操作系统发现没有filename引用该文件,操作系统需要去回收空间。 但large不一样。 操作系统在unlink large后发现还有一个硬链接引用,所以不用去回收空间。 测试如下:

[root@node1 test]# time rm -f big

real	0m1.753s
user 0m0.000s
sys 0m1.750s
[root@node1 test]# time rm -f large real 0m0.001s
user 0m0.000s
sys 0m0.001s

  

linux 的硬链接与软连接的更多相关文章

  1. 【Linux学习】Linux文件系统4—Linux文件硬链接与软连接

    Linux文件系统4-Linux文件硬链接与软连接 inode:索引节点 (连接文件)link 一.文件硬链接 1.Linux文件系统中,inode只相同的文件是硬链接文件 2.不同文件名,inode ...

  2. Linux的硬链接、软连接与拷贝

    Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link).硬链接:创建一个与原文件任何信息都相同的目标文件(文件名可能不同,自由设定).硬连接的 ...

  3. Linux硬链接和软连接的区别与总结

    图示软硬链接的区别 有关硬链接的总结 具有相同inode节点号的多个文件互为硬链接文件: 删除硬链接文件或者删除源文件任意之一,文件实体并未被删除: 只有删除了源文件和所有对应的硬链接文件,文件实体才 ...

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

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

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

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

  6. Linux 的硬链接与软链接

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

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

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

  8. 轻松学习Linux之理解Shell的硬链接与软连接

     大家在学习linux的过程中常常遇到一些模糊且容易混淆的概念比如什么是硬链接和软链接,他们有什么区别?  软连接有点象windows中的快捷方式,连接和目标文件具有相同的节点,而硬连接就好象重新复制 ...

  9. Linux硬链接与软连接

    1.Linux链接概念 Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link).默认情况下,ln命令产生硬链接. [硬连接]硬连接指通过索引节 ...

随机推荐

  1. [小记]Android缓存问题

    今天晚上,产品经理打电话说我们的Android App除了问题,问题很简单就是一个缓存问题,由于这个程序是前同事写的,我也只能呵呵一笑,有些事你就得扛.还是回到正题吧,这个缓存问题,实在有点奇葩,所以 ...

  2. JS 中的 JSON

    JSON是JavaScript Object Notation的缩写,它是一种数据交换格式. 在JSON出现之前,大家一直用XML来传递数据.因为XML是一种纯文本格式,所以它适合在网络上交换数据.X ...

  3. 在 Windows Server 上搭建 *** 服务端(转载加亲测)

    转载自:https://diveng.io/build-shadowsocks-server-on-windows-server.html 下面的教程建议大家使用第一种方法安装,说是比较简单.我则使用 ...

  4. css定位position属性深究

    1.static:对象遵循常规流.此时4个定位偏移属性不会被应用. 2.relative:对象遵循常规流,并且参照自身在常规流中的位置通过top,right,bottom,left这4个定位偏移属性进 ...

  5. 合并百度影音的离线数据 with python 第二版 基于yield

    重新整理了一下代码. 增加了bdv,mkv的处理流程. 目前暂时支持windows平台. bdv,mkv,rmvb的不同处理流程 # -*- coding: UTF-8 -*- import os i ...

  6. Jenkins安装和初始化配置

    Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括: 1.持续的软件版本发布/测试项目. 2.监控外部调用执行的工作. 所以安装Jenkins包含安装相应的jdk环境 ...

  7. linux 10201 ASM RAC 安装+升级到10205

    准备环境的时 ,要4个对外IP,2个对内IP 不超过2T,,一般都用OCFS 高端存储适合用ASM linux10G安装的时候,安装的机器时间要小于等于(如果是等于要严格等于)第二个机器的时间(只有l ...

  8. cal - 显示一个日历

    总览 cal [-mjy ] [月份 [年份 ] ] 描述 Cal 显示一个简单的日历.. 如果没有指定参数, 则显示当前月份. 选项如下所列: -m 显示星期一作为一周的第一天.. (缺省为星期日. ...

  9. 入门迅速、应用广泛、月薪两万,马哥Python前景为什么这么好?

    随着Python的技术的流行,Python在为人们带来工作与生活上带来了很多的便捷,因为Python简单,学起来快,也是不少新手程序员入门的首选语言.新手们比较关心的就是Python的发展前景与方向. ...

  10. python selenium定位总结(转)

    转自:http://www.cnblogs.com/yufeihlf/p/5717291.html 父子定位元素 查找有父亲元素的标签名为span,它的所有标签名叫input的子元素 find_ele ...