Linux下硬链接和软链接区别

 

链接——是一种在共享文件和访问它的用户的若干目录项之间建立联系的一种方法。

在Linux中分为硬链接(hard link)和软链接(soft link),其中软链接又称为符号链接(symbolic link)。

1、索引节点:
在linux系统中对文件的管理本质上是通过其索引节点进行管理的。
从系统的角度来看,文件的索引节点(inode)是文件的唯一标识,它包含了文件系统处理文件所需要的全部信息。
 
  详细来说,实际上存在两种类型的索引节点
  • 内核索引节点(in-core indoe):保存在内存中,在系统中每个打开的文件都对应着一个内核索引节点;
  • 磁盘索引节点(on-disk inode):在文件系统中的每一个文件都有一个磁盘索引节点,保存在磁盘上,它所保存的具体信息与文件系统的类型有关。

注意:这两种索引节点的关系为:

当进程打开一个文件时,文件的磁盘索引节点中的信息就会被载入内存,并建立一个内核索引节点。

当内核索引节点被修改后,系统负责将其同步到磁盘上。磁盘索引节点与对应的内核索引节点所保存的信息并不是完全相同的。

内核索引节点记录的是关于文件的更通用的一些信息,而忽略掉于具体文件系统类型相关的一些信息。


2、硬链接:就是让一个文件对应一个或者多个文件名,或者说多个文件名和文件系统使用的节点号链接起来,这些文件可以在同一目录或者不同目录下。

一个文件对应的多个文件名的个数,称作该文件的链接数。例如:

ln [options] existingfile newfile
ln [options] existingfile-list directory


用法:
第一种为”existingfile”创建硬链接,文件名为”newfile”。
第二种在”directory”目录中,为” existingfile-list”中包含的所有文件创建一个同名的硬链接。
常用可选[options]:-f 无论”newfile”存在与否,都创建链接。-n 如果”newfile”已存在,就不创建链接。

 


3、软链接:又称为符号链接,实际上是一种特殊的文件,这种文件包含了另一个文件的一个路径名。

这个路径名指向位于任意一个文件系统的任意一个文件,甚至可以指向一个不存在的文件。

系统会自动的把对符号链接的操作转换为对目标源文件的操作。

其使用和硬链接的使用类似,软链接又叫符号链接,这个文件包含了另一个文件的路径名。

可以是任意文件或目录,可以链接不同文件系统的文件。

和win下的快捷方式差不多。

可以用:ln -s 命令来建立软链接。

引用
ln -s existingfile newfile
ln -s existingfile-list directory
下面我们用一个实例来说明硬链接和软链接。

现在目录下有两个文件,一个名为AAA,一个名为BBB。
引用
$ ls -il
963922 -rw-r--r-- 1 ocean ocean 92 2007-05-18 15:46 AAA
963923 -rw-r--r-- 1 ocean ocean 95 2007-05-18 15:46 BBB


首先先做一个AAA的硬链接。
引用
$ ln AAA AAAhard
$ls -il
963922 -rw-r--r-- 2 ocean ocean 92 2007-05-18 15:46 AAA
963922 -rw-r--r-- 2 ocean ocean 92 2007-05-18 15:46 AAAhard
963923 -rw-r--r-- 1 ocean ocean 95 2007-05-18 15:46 BBB

这里我们注意在创建链接前,AAA显示的链接数目为1,创建链接后
1.AAA和AAAhard的链接数目都变为2。
2.AAA和AAAhard的inode号是一样的,都是963922。
3.AAA和AAAhard显示的文件大小也是一样,都是92B。

可见进行了ln命令的操作结果:AAA和AAAhard是同一个文件的两个名字,它们具有同样的索引节点号和文件属性,
建立文件AAA的硬链接,就是为 AAA的文件索引节点在当前目录上建立一个新指针。
你可以删除其中任何一个,如rm AAA,每次只会删除一个指针,链接数同时减一,
只有将所有指向文件内容的指针,也即链接数减为0时,内核才会把文件内容从磁盘上删除。
尽管硬链接节省空间,也是Linux系统整合文件系统的传统方式,但是存在一些不足之处:

1.不允许给目录创建硬链接。
2.不可以在不同文件系统的文件间建立链接。

接着我们做一个指向BBB的软链接,软链接克服了硬链接的不足,
没有任何文件系统的限制,任何用户可以创建指向目录的符号链接。
因而现在更为广泛使用,它具有更大的灵活性,甚至可以跨越不同机器、不同网络对文件进行链接。
引用
$ ln -s BBB BBBsoft
$ ls -il
总用量 0
963922 -rw-r--r-- 2 ocean ocean 92 2007-05-18 15:46 AAA
963922 -rw-r--r-- 2 ocean ocean 92 2007-05-18 15:46 AAAhard
963923 -rw-r--r-- 1 ocean ocean 95 2007-05-18 15:46 BBB
963924 lrwxrwxrwx 1 ocean ocean 3 2007-05-18 15:47 BBBsoft -> BBB

从上面链接后的结果可以看出来软链接与硬链接,区别不仅仅是在概念上,在实现上也是完全不同的。
区别:

1.硬链接的原文件/链接文件公用一个inode号,说明他们是同一个文件; 而软链接原文件/链接文件拥有不同的inode号,表明他们是两个不同的文件;
2.在文件属性上软链接明确写出了是链接文件,而硬链接没有写出来,因为在本质上硬链接文件和原文件是完全平等关系;
3.链接数目是不一样的,软链接的链接数目不会增加;
4.文件大小是不一样的,硬链接文件显示的大小是跟原文件是一样的。而这里软链接显示的大小与原文件就不同了,BBB大小是95B,而BBBsoft是3B。
总之,建立软链接就是建立了一个新文件。当访问链接文件时,系统就会发现它是个链接文件,它读取链接文件找到真正要访问的文件。

当然软链接也有硬链接没有的缺点:
因为链接文件包含有原文件的路径信息,
所以当原文件从一个目录下移到其他目录中,再访问链接文件,系统就找不到了;
而硬链接就没有这个缺陷,你想怎么移就怎么移;
还有它要系统分配额外的空间用于建立新的索引节点和保存原文件的路径。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值