硬链接和软链接的区别

硬链接和软链接在文件系统实现上的区别决定了两者之间功能上的不同,也就是说硬链接和软链在文件系
统上两者实现的方式不同,让其各自具有不同的功能和特色,也决定了各自的优点和缺点。接下同文件系统上创建硬链接和软链接看各自的特点。

一文件系统上创建硬链接

下面命令是在文件系统上创建一个硬链接:

~]# ln test /testdir/test.h     #在/testdir目录下创建一个test.h的硬链接                                 #他指向的原文件为test

创建test.h硬链接文件实际上是在/testdir目录(在文件系统目录也是一个文件,用一个唯一的inode标
识)数据区添加一个条目。这个条目记录着test.h这个文件名对应着的inode,而test.h是一个硬链接文
件故其inode为指向原文件的inode,即test和test.h的inode一样

~]# ls -i test /testdir/test.h              #查看test和test.h的inode 202766542 test  202766542 /testdir/test.h

我们可以看到test和test.h对应的inode相同,也就是说test和test.h指向的数据相同(使用的都是同一
个inode中的数据指针,指针相同指向的数据区数据相同)。这也表明两个文件大小实际在数据区只占一
个文件大小
。通过下列命令看到数据大小也一样都是4个字节(字节相同并不能证明数据相同,这只是简单说明一
下)

~]# ls -l test /testdir/test.h   
202766542 -rw-r--r--. 2 root root 7 10月 20 08:04 test 
202766542 -rw-r--r--. 2 root root 7 10月 20 08:04 /testdir/test.h

当我们删除其中一个文件时,还会有另一个文件通过inode找到指向的数据区数据,也就是表明硬链接
文件和原文件相互无影响

~]# rm test                                      #删除原文件 
~]# ls -l /testdir/test.h                        #查看硬链接文件,可以看文件依然存在,也可以看 
-rw-r--r--. 1 root root 7 10月 20 08:04 /testdir/test.h ~]# cat /testdir/test.h          #查看文本内容依然可见,文本内容为abcdef acdefg

从上面的命令我们可以看到当删除原文件后硬链接个数减少了一,也就是说硬链接能增加元数据中硬链
接的数
。如下图可以看每增加一次硬链接,硬链接数就加一

~]# ln /testdir/test.h ./test.h2            #在当前文件夹下创建一个指向/testdir/test.h的硬链 接文件test.h2 
~]# ls -l /testdir/test.h                   #查看到硬链接数从1变成了2 -rw-r--r--. 2 root root 7 10月 20 08:12 /testdir/test.h

我们在回过头来看,硬链接在文件系统上的创建过程对其产生的影响,前面提到过硬链接文件的inode是
原文件的inode,而inode只在本分区文件系统下唯一,所以硬链接不能跨分区。举个简单的例子说明
为什么不能跨分区,原文件在test在分区f1上,inode为25535。而我们在另一个分区文件系统f2上
创建硬链接文件test.h,由于硬链接和原文件inode一样,故test.h的inode为25535。当我们查看test.h
文件时看的是f2分区上inode为25535的对应的数据,而不是f1文件系统上inode为25535对应的数据区
数据,因为f1和f2分区中元数据和数据是独立的。下面我们用命令查看能否创建不同分区的硬链

~]# df                                                #可以看出/根目录和/dev是两个分区 
文件系统                   1K-块    已用     可用 已用% 挂载点 
/dev/mapper/centos-root 41922560 1161516 40761044    3% / 
devtmpfs                  490216       0   490216    0% /dev 
~]# touch /test                                       #在根目录下创建一个test文件 
~]# ln /test /dev/test.h                              #试图在另一个分区/dev下创建硬链接test.h文件 
ln: 无法创建硬链接"/dev/test.h" => "/test": 无效的跨设备连接   #从报错信息可看出原因

硬链接还有一个特点是目录不能创建链接文件,因为容易形成循环,例如创建硬链接文件在原目录下,这
样就形成了一个循环。本着只说不做等于耍流氓,下面用命令证明一下。

~]# ln /testdir/ test.h3 ln: "/testdir/": 不允许将硬链接指向目录

总结:
  

    1.各个硬链接与原文件共用一个inode
  

    2.硬链接会增加硬链接数
  

    3.多个硬链接在数据区只占用一个文件大小
  

    4.各硬链接文件相互不影响(删除其他的另外的也能使用)
  

    5.硬链接不能跨文件系统
  

    6.目录不能创建硬链接

二文件系统上创建软连接

创建软连接的命令如下

~]# ln -s ./test /testdir/test.s

在文件系统中是现在testdir文件中增加一个条目,文件名是test.s,而inode是本文件系统分配的一个新的
inode,新inode所指向的元数据区中的指针数据区存放的不是数据指针,而是原文件路径。在本例中存的是
./test。软连接的大小就是指针数据区中数据的大小,即./test字符串的大小

~]# ls -l /testdir/test.s                  #大小为./test的大小6个字符 lrwxrwxrwx. 1 root root 6 10月 20 10:08 /testdir/test.s -> ./test  
~]# ls -i /testdir/test.s /testdir/test    #两个inode不同 1129 /testdir/test  1113 /testdir/test.s

软连接如何查找到文件呢?当我们找到test.h软链接的inode时,得知指针数据区为./test,会到父目录
中查找文件名为test的文件。如果指针数据区是test,也是到父目录中查找文件名为test的文件,如果指
据区存放的是/path/to/file就会根据此绝对路径查找指定文件。这表明如果原文件是相当路径的话,则
这个相对是相对于软链接路径
。软链接的这种存在方式也决定了软链接能跨分区文件系统。我们删除
了原文件,软链接就会失效,因为找不到原文件了。下面证明一下

~]# rm /testdir/test                #删除原文件
~]# cat /testdir/test.s             #不能查看软链接,报错了
cat: /testdir/test.s: 没有那个文件或目录
~]# touch /testdir/test             #创了一个同名的文件,用nano写入了一些数据
~]# cat /testdir/test.s             #可以查看软链接了。
new /testdir/test file.

总结:
  

    1.软链接占用inode
   

    2.软连接文件大小为原文件路径大小
  

    3.原文件一旦删除,软链接就失效,而软链接的损坏不影响原文件
  

    4.可跨文件系统
  

    5.目录可以创建软连接

原创文章,作者:lirou,如若转载,请注明出处:http://www.178linux.com/53066

(0)
liroulirou
上一篇 2016-10-29
下一篇 2016-10-29

相关推荐

  • 编辑器之神VS神之编辑器

      在linux下有两款非常棒的处理器,它们的功能异常的强大,在普通使用者手中,我们或许仅仅把它们当做文本处理器,但在官方文档中,它们不仅仅被定义为开发工具。正如在windows下,office在我们手中仅仅是文本,表格,PPT等文件的处理工具,而在大神手中,Excel是可以用来作画的!PowerPoint 还可以用来播放视频!  &nb…

    Linux干货 2017-08-05
  • linux文本处理三剑客-sed

    sed 是什么? sed是一种流编辑器,它是文本处理中非常中的工具,在linux中被称为linux文本处理三剑客之一,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文…

    Linux干货 2017-03-15
  • 磁盘分区及初步文件系统

    磁盘分区 磁盘分区有两种方式:     MBR, GPT      MBR: Master Boot Record,1982年,使用32位表示扇区数 ,分区不超过2T      分区时按柱面…

    Linux干货 2016-08-30
  • 可伸缩的逻辑卷

    什么是逻辑卷? 逻辑卷简称LVM, LVM是Linux环境中对磁盘分区进行管理的一种机制,是建立在硬盘和分区之上、文件系统之下的一个逻辑层,可提高磁盘分区管理的灵活性.   为什么要使用逻辑卷? 逻辑卷相比于一般的磁盘分区, 具有更高的灵活性。可随时伸缩空间的大小.   构建逻辑分区图:   逻辑卷概念: PV(物理卷): 是在…

    Linux干货 2016-09-01
  • 马哥教育网络班21期+第11周课程练习

    1、请描述一次完整的加密通讯过程,结合图示最佳。 Bob先利用单向加密算法提取当前数据的指纹(特征码),再用自己的私钥加密数据指纹并附加于数据尾部,然后利用对称加密将整个文件加密,之后用对方的公钥加密对称加密密钥附加于尾部。 Alice收到数据后,先用自己的私钥解密,得到对称加密密钥,之后用对称加密密钥解密,然后用Bob的公钥解密得到数据指纹,并且验证了Bo…

    Linux干货 2016-09-26
  • 高级文件系统管理1

    本部分内容主要讲述了高级文件系统的管理,包括设定文件系统配额,设定和管理软RAID设备,配置逻辑卷,设定LVM快照和btrfs文件系统。其中文件系统配额和软RAID在企业中使用的频率并不很高,作为熟练即可,而逻辑卷的创建和LVM快照是非常重要的内容,必须精通并完全理解其原理。至于btrfs文件系统是新兴的一种技术,作为了解即可。 一、知识整理 1、文件系统配…

    Linux干货 2016-08-29