ln 软链接和硬链接的区别

本文详细探讨了硬链接和软链接的特点与用法。通过实验证明,硬链接显示大小与原文件相同,而软链接则仅有数十字节大小。此外,文中还介绍了两种链接在跨文件系统时的行为差异。
 
 
先举个例子

系统文件系统使用情况,其中 /home 文件系统当前已使用了 3.0G ,剩余105G
[root@s14 ~]# df -h
Filesystem            Size Used Avail Use% Mounted on
/dev/mapper/sys-root 4.0G 2.3G 1.5G 60% /
/dev/cciss/c0d0p1     244M   11M 221M   5% /boot
none                  1.9G     0 1.9G   0% /dev/shm
/dev/mapper/sys-home 112G 3.0G 105G   3% /home
/dev/mapper/sys-var   2.0G 174M 1.7G 10% /var

我们拿一个大文件来做测验,1.6G 大小。
[root@s14 ~]# ls -lh /home/zjw/Wins2003.tar.gz
-rw-r--r-- 1 zjw zjw 1.6G Jun 12 18:51 /home/zjw/Wins2003.tar.gz

建立软连接:
[root@s14 ~]# ln -s /home/zjw/Wins2003.tar.gz /home/zjw/Wins2003.tar.gz.symboliclink

建立硬连接:
[root@s14 ~]# ln -b /home/zjw/Wins2003.tar.gz /home/zjw/Wins2003.tar.gz.hardlink

查看这几个文件的情况,发现:
1)硬链接文件显示跟原来文件一样大小1.6G,软链接文件才27个字节;
2)硬链接文件inode号跟原来文件一样,都是 753682,软链接文件inode号为 753685;
[zjw@s14 ~]$ ls -lih /home/zjw/Wins2003.tar.gz*
753682 -rw-r--r-- 2 zjw zjw 1.6G Jun 12 18:51 /home/zjw/Wins2003.tar.gz
753682 -rw-r--r-- 2 zjw zjw 1.6G Jun 12 18:51 /home/zjw/Wins2003.tar.gz.hardlink
753685 lrwxrwxrwx 1 root root   27 Jun 16 18:10 /home/zjw/Wins2003.tar.gz.symboliclink -> /home/zjw/Wins2003.tar.gz

查看 /home 文件系统,发现空间使用没有明显变化,还是使用 3.0G,剩余 105G
[root@s14 ~]# df -h /home
Filesystem            Size Used Avail Use% Mounted on
/dev/mapper/sys-home 112G 3.0G 105G   3% /home

上述实验说明:
1)在同一文件系统下,可以创建软链接或硬链接(同文件系统不同目录下也可以);
2)硬链接的文件显示大小跟原文件一样;软链接的文件很小,只有几十个字节;
3)硬链接的文件的inode跟原文件一样;软连接的文件有自己的inode,跟原文件不一样;
4)创建软链接或硬链接文件不会明显占用文件系统磁盘空间;

我们测试一下跨文件系统(/home --> /var ),是否可以建立软链接和硬链接:
软链接成功:
[root@s14 var]# ln -s /home/zjw/Wins2003.tar.gz   /var/wins2003.symboliclink
硬链接失败:
[root@s14 var]# ln -b /home/zjw/Wins2003.tar.gz   /var/wins2003.hardlink     
ln: creating hard link `/var/wins2003.hardlink' to `/home/zjw/Wins2003.tar.gz': Invalid cross-device link

上述实验说明:
1)软链接可以跨文件系统建立; 硬链接则不可以;




硬链接(hard link)
        UNIX文件系统提供了一种将不同文件链接至同一个文件的机制,我们称这种机制为链接。它可以使得单个程序对同一文件使用不同的名字。这样的好处是文件系 统只存在一个文件的副本,系统简单地通过在目录中建立一个新的登记项来实现这种连接。该登记项具有一个新的文件名和要连接文件的inode号,文件的目录登记项就是所谓的文件硬链接硬链接,目录登记项: 文件名-->文件的inode;文件名可以有多个,但文件inode只是一个)。不论一个文件有多少硬链接,在磁盘上只有一个描述它的inode,只要该文件的链接数不为0,该文件就保持存在。硬链接不能跨越文件系统,也不能对目录建立硬链接!
       
硬 连接是直接建立在节点表上的(inode),建立硬连接指向一个文件的时候,会更新节点表上面的计数值。举个例子,一个文件被连接了两次(硬连接),这 个文件的计数值 是3,而无论通过3个文件名中的任何一个访问,效果都是完全一样的,但是如果删除其中任意一个,都只是把计数值减1,不会删除实际的内容的,(任何存在的 文件本身就算是一个硬连接)只有计数值变 成0也就是没有任何硬连接指向的时候才会真实的删除内容。

软链接(symbolic link)
        我们把符号链接称为软链接,它是指向另一个文件的特殊文件,这种文件的数据部分仅包含它所要链接文件的路径名。软链接是为了克服硬链接的不足而引入的,软链接不直接使用inode号作为文件指针,而是使用文件路径名作为指针软链接:文件名 + 数据部分-->目标文件的路径名)。软件有自己的inode,并在磁盘上有一小片空间存放路径名。因此,软链接能够跨文件系统,也可以和目录链接!其二,软链接可以对一个不存在的文件名进行链接,但直到这个名字对应的文件被创建后,才能打开其 链接。
### 软链接硬链接区别 #### 创建方式 软链接硬链接都可以通过 `ln` 命令创建,但它们的语法行为有显著差异。软链接需要使用 `-s` 选项,例如: ```bash ln -s [目标文件] [链接文件] ``` 而硬链接的创建不需要 `-s` 选项: ```bash ln [目标文件] [链接文件] ``` 软链接类似于 Windows 中的快捷方式,它指向目标文件的路径,而硬链接则直接指向目标文件的 inode[^2]。 #### inode 的使用 在文件系统中,每个文件都有一个唯一的 inode,其中包含了文件的权限、大小、时间戳等元数据。硬链接共享同一个 inode,这意味着硬链接原始文件实际上是同一份数据的多个入口[^5]。 相比之下,软链接拥有一个独立的 inode,它存储的是目标文件的路径信息。因此,软链接目标文件的 inode 是不同的[^2]。 #### 文件删除的影响 当原始文件被删除时,硬链接不会受到影响,因为硬链接原始文件指向相同的 inode。只要还有一个硬链接存在,文件的数据就不会被删除。 然而,软链接在原始文件被删除后会变成“悬空链接”(dangling link),因为软链接指向的路径已经不存在。在这种情况下,软链接将无法访问目标文件[^2]。 #### 跨文件系统的限制 硬链接不能跨越不同的文件系统,因为它们必须指向同一个文件系统中的 inode。而软链接可以跨越不同的文件系统,因为它们只是指向目标文件的路径[^2]。 #### 目录链接的限制 硬链接不能用于目录,这是为了防止文件系统中出现循环引用的问题。而软链接可以用于目录,并且可以跨目录创建链接[^3]。 #### 文件修改的影响 无论是硬链接还是软链接,对原始文件的修改都会反映在链接文件中。这是因为硬链接直接指向文件的 inode,而软链接指向文件的路径,最终访问的仍然是原始文件的内容[^2]。 #### 示例 以下是一个创建软链接硬链接的示例: ```bash # 创建软链接 ln -s original_file soft_link # 创建硬链接 ln original_file hard_link ``` 在创建链接后,可以通过 `ls -i` 命令查看文件的 inode 编号,以验证软链接硬链接区别: ```bash ls -i original_file soft_link hard_link ``` #### 总结 软链接硬链接在行为使用场景上有显著的区别软链接更加灵活,可以跨越文件系统,但容易因为原始文件的删除而失效;而硬链接更加稳定,但受到文件系统目录结构的限制。根据具体需求选择合适的链接方式是非常重要的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值