软链接和硬链接及两者之间的不同

Linux 上被分成两个部分:用户数据 (user data) 与元数据 (metadata)。用户数据,即文件数据块 (data block),数据块是记录文件真实内容的地方;而元数据则是文件的附加属性,如文件大小、创建时间、所有者等信息。在 Linux 中,元数据中的 inode 号(inode 是文件元数据的一部分但其并不包含文件名,inode 号即索引节点号)才是文件的唯一标识而非文件名。文件名仅是为了方便人们的记忆和使用,系统或程序通过 inode 号寻找正确的文件数据块。

为解决文件的共享使用,Linux 系统引入了两种链接:硬链接 (hard link) 与软链接(soft link)。链接为 Linux 系统解决了文件的共享使用,还带来了隐藏文件路径、增加权限安全及节省存储等好处。若一个 inode 号对应多个文件名,则称这些文件为硬链接。也就是说,硬链接就是同一个文件使用了多个别名,它们有共同的 inode。硬链接可由命令 ln 创建。

于硬链接是有着相同 inode 号仅文件名不同的文件,因此硬链接存在以下几点特性:

文件有相同的 inode data block

/]#touch xyz

/]#ln xyz 123

/]#ll -i 123 xyz

15 -rw-r–r– 2 root root 0 Oct 19 17:55 123

15 -rw-r–r– 2 root root 0 Oct 19 17:55 xyz

只能对已存在的文件进行创建;

/]#ln b.log b1.log

ln: accessing `b.log': No such file or directory

不能跨文件系统(跨分区)进行硬链接的创建,

/]#df

Filesystem           1K-blocks    Used Available Use% Mounted on

/dev/mapper/vg0-root  20511356  309312  19153468   2% /

tmpfs                   506224       0    506224   0% /dev/shm

/dev/sda1               194241   36311    147690  20% /boot

/dev/mapper/vg0-usr   10190136 2000276   7665572  21% /usr

/dev/mapper/vg0-var   20511356  547732  18915048   3% /var

/]#ln b.log /usr/b2.log

ln: creating hard link `/usr/b2.log' => `b.log': Invalid cross-device link

不能对目录进行创建,只可对文件创建;

/]#mkdir abc

/]#ln abc abc.ln

ln: `abc': hard link not allowed for directory

删除一个硬链接文件并不影响其他有相同 inode 号的文件。

[root@pxe12 /]#ll -i 123 xyz

15 -rw-r–r– 2 root root 0 Oct 19 17:55 123

15 -rw-r–r– 2 root root 0 Oct 19 17:55 xyz

[root@pxe12 /]#rm -f 123

[root@pxe12 /]#ll -i xyz   

15 -rw-r–r– 1 root root 0 Oct 19 17:55 xyz

硬链接在删除以后对数据不产生任何影响,即使把两个文件名都删除掉(硬链接),虽然我们看不到文件了,实际上文件数据还是存在在硬盘上,数据的恢复也就是重新建立一个别的文件名和文件数据建立连接。Inode编号是根据上一使用编号进行分配的,只是为了表示唯一性。多个磁盘分区具有相同的inode号。

软链接与硬链接不同,若文件用户数据块中存放的内容是另一文件的路径名的指向,则该文件就是软连接。软链接就是一个普通文件,只是数据块内容有点特殊。软链接有着自己的 inode 号以及用户数据块。因此软链接的创建与使用没有类似硬链接的诸多限制:

软链接有自己的文件属性及权限等;

~]#ll 567.txt 567.lnk

lrwxrwxrwx 1 root root 15 Oct 19 21:53 567.lnk -> ../root/567.txt

-rw-r–r– 1 root root  0 Oct 19 19:59 567.txt

可对不存在的文件或目录创建软链接;

[root@pxe12 ~]#ln -s ../root/sh.log /root/sh.lnk

[root@pxe12 ~]#ll sh.lnk

lrwxrwxrwx 1 root root 14 Oct 19 22:00 sh.lnk -> ../root/sh.log

软链接可交叉文件系统;

[root@pxe12 ~]#ln -s ../../root/567.txt /usr/ha/567.ln

[root@pxe12 ~]#ll /usr/ha/

total 0

lrwxrwxrwx 1 root root 18 Oct 19 21:58 567.ln -> ../../root/567.txt

软链接可对文件或目录创建;

[root@pxe12 ~]#ll -d  Music

drwxr-xr-x 2 root root 4096 Oct 11 20:42 Music

[root@pxe12 ~]#ln -s ../root/Music/ /root/music.lnk

 [root@pxe12 ~]#ll music.lnk

lrwxrwxrwx 1 root root 14 Oct 19 22:02 music.lnk -> ../root/Music/

创建软链接时,链接计数 i_nlink 不会增加;

[root@pxe12 ~]#ll -d Music

drwxr-xr-x 2 root root 4096 Oct 11 20:42 Music

删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接被称为死链接(即 dangling link,若被指向路径文件被重新创建,死链接可恢复为正常的软链接)。

两者之间的不同之处:

硬链接源文件和链接文件公用一个inode号,修改硬链接文件,源文件和其它的硬链接也会更改,因为它们的inode号相同,文件显示的大小是跟原文件是一样的。软链接源文件和链接文件拥有不同的inode号,软链接显示的大小与原文件不同是两个不同的文件。

文件属性上软链接表示出了是链接文件,而硬链接没有写出来。

当删除源文件或是移动源文件时,硬链接还能正常使用,而软链接就会找不到源文件了。

硬链接的对象必须是存在的文件,而软链接的对象可以是不存在的文件或目录。每次新建硬链接它们的硬链接属性会发生改变,软链接不会改变。因为它是独立的文件。只是在读取文件时指向源文件。

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

(0)
ai156ai156
上一篇 2016-12-05 17:03
下一篇 2016-12-05 17:04

相关推荐

  • 第十五周作业

    温故知新 1、总结sed和awk的详细用法 sed [OPTION]… ‘script’ [input-file] …script:地址定界编辑命令 常用选项:-n:不输出模式空间中的内容至屏幕;-e script, –expression=script:多点编辑;-f /PATH/TO/SED_S…

    Linux干货 2017-12-04
  • 2016/10/19作业:软链接与硬链接的区别

    软链接和硬链接的区别 linux中链接分为两种,一种是硬链接(Hard Link),一种是符号链接(Symbolic Link),其中,符号链接又称为软链接。 硬链接: 在Linux文件系统中 ,磁盘中的所有文件都有一个编号,这个编号称为索引节点(Inode)。在Linux中,多个同一索引节点可以有多个文件名,这就是硬链接。硬链…

    Linux干货 2016-10-20
  • 简明 Vim 练级攻略

    vim的学习曲线相当的大(参看各种文本编辑器的学习曲线),所以,如果你一开始看到的是一大堆VIM的命令分类,你一定会对这个编辑器失去兴趣的。下面的文章翻译自《Learn Vim Progressively》,我觉得这是给新手最好的VIM的升级教程了,没有列举所有的命令,只是列举了那些最有用的命令。非常不错。 ——————————正文开始—————————— …

    Linux干货 2015-04-04
  • corosync v2 + pacemaker + crmsh 实现mariadb高可用

    高可用mariadb拓扑图 一、设计前提     1、时间同步 # ntpdate 172.16.0.1 或者 # chronyc sources     2、所有的主机对应的IP地址解析可以正常工作, 主机名要与命令#uname -n 所得的结果一致   &…

    Linux干货 2016-08-28
  • Vim编辑器使用详解

    Vim编辑器使用详解 vim介绍 为什么要学习vim vim三种模式 vim工作模式(图解) vim如何打开文件 vim关闭文件 命令模式光标跳转 字符间跳转: 单词间跳转: 行首行尾跳转: 行间移动: VIM的命令模式下的命令: 字符编辑: 替换命令(r, replace) 删除命令: 复制命令 粘贴命令(p, paste): : 其他相关的编辑操作: 翻…

    Linux干货 2016-09-06
  • RPM程序包管理

           RPM的全名“RedHat Package Manager”,当初这个是RedHad公司开发的一款程序包管理套件,随着RPM的不断完善,RPM逐渐成为众多linux发行版程序包管理器的代名词,那什么是RPM,为什么会用到RPM这个程序包管理工具那,接下来我一一揭晓。  &nb…

    Linux干货 2015-11-04