硬链接和软链接的区别

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

一文件系统上创建硬链接

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

~]# 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

相关推荐

  • 用一条命令’pwd’判断并证明系统命令的执行顺序。

    一、命令分类        在Linux系统中命令分为两类:            1.内部命令:shell buildin 每次启动系统都会重新加载入内存。        2.外部命令:即某目录下的…

    Linux干货 2017-09-03
  • centos6启动故障及修复

    前言 前文中我们熟悉了linux的启动流程,如果在启动过程中文件丢失或者损坏了怎么办呢?难道只有重装系统这一条路吗?那我们不是成了普通网管了吗?作为专业的运维工程师,我们需要掌握如何快速修复系统启动。 实验1: 破坏/boot/grup/下的文件——-stage2 阶段  不影响启动  mv /boot/grub …

    2017-09-03
  • 硬链接和软链接的区别

                        硬链接和软链接的区别     硬链接: 1.创建命令:ln或link 2.同一文…

    Linux干货 2016-12-05
  • TCP详解

    TCP协议详解   TCP/IP协议不是TCP和IP这两个协议的合称,而是指因特网整个使用TCP/IP协议的协议集合。他取代了OSI七层模型,成为事实上的应用于实际的模型。 TCP/IP协议与OSI协议的关系如下:   各层的作用如下: TCP特性: 工作在传输层面向连接协议 全双工协议 半关闭 错误检查 将数据打包成段,排序 确认机制 …

    2017-09-02
  • linux文本处理三剑客—grep

      cat:concatenate 文本文件查看工具 cat [option] filename… -n:给显示出来的文本行加上编号 -b:非空行编号 -V:显示 ^ -E:显示行结束符$ -T:显示制表符 -A:显示所有控制符-A=-VET -s:压缩连续…

    系统运维 2016-08-05
  • CentOS下搭建LAMP

    实验:centos7.3实现lamp应用wordpress环境 host1 httpd,php  host2 mariadb1 yum install httpd php php-mysqlyum install mariadb-serversystemctl start httpdsystemctl start mariadb 2 创建数据库及用户mysq…

    2017-10-16