硬链接和软链接的区别

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

一文件系统上创建硬链接

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

~]# 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 21:03
下一篇 2016-10-29 21:03

相关推荐

  • grep用法

    一、前言 grep是功能强大的文本处理工具,全称:global search regular expression and print out the line,grep一行一行使用正则表达式匹配文本,之后对匹配到的文本整行显示(除非使用特定的选项取反,如 grep -v)。 二、grep用法 grep命令用法:    &nbs…

    Linux干货 2015-08-24
  • iptables/netfilter网络防火墙:

    iptables/netfilter网络防火墙: FORWORD链上的防火墙规则 路由功能打开[root@localhost ~]# echo 1 > /proc/sys/net/ipv4/ip_forward 网关设置防火墙,让内网可以访问外网网页 iptables -A FORWARD -s 192.168.126.131 -p tcp –dpo…

    2016-10-26
  • N28-第二周作业

    1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。 命令:cp、mv、rm 1.1 cp命令 用法: cp [OPTIONS]…[-T] SOURCE DEST cp SRC DEST而言,SRC是文件时 如果目标不存在: 新建DEST,并将SRC中内容填充至DEST中 如果目标存在: 如果DEST是文件:将SRC中的内容覆盖至DE…

    Linux干货 2017-12-15
  • CentOS 7 yum安装LAMP,LNMP并搭建WordPress个人博客网站

    本次实验要进行的是在CentOS7.2,内核版本3.10.0-327.el7.x86_64的环境下搭建LAMP和LNMP,并在此之上做一个WordPress博客网站。 [root@Shining ~]# uname -a Linux Shining.ACG 3.10.0-327.el7.x86_64&nbsp…

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

    马哥教育网络班21期+第6周课程练习 [TOC] vim编辑器使用方法总结 vim编辑器: 简介: vi: visual interface,文本编辑器 vim: vi improved,vi的增强版 文本:ASCII,Unicode, 文本编辑器种类: 行编辑器:sed, 全屏编辑器:nano,vi vim:模式化的…

    Linux干货 2016-08-15
  • 用户与用户组相关的配置文件与命令总结

    Linux 中用户与用户组相关的配置文件与命令总结 用户与用户组 UID、GID 名称解析与解析库(passwd、group、shadow、gshadow) 用户信息库/etc/passwd 用户密码信息/etc/shadow 组的信息库/etc/group 组的密码信息/etc/gshadow 用户管理命令 用户组管理命令 用户与用户组 Linux是一种多…

    2016-10-23