linux中的硬连接和软连接

本文解析了Linux中的硬连接和软连接的工作原理。硬连接使多个文件名指向同一个索引节点,从而实现文件共享而不重复占用磁盘空间。软连接类似于Windows中的快捷方式,它是一个包含指向另一个文件路径的特殊文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

linux中的硬连接和软连接

背景

linux中的文件主要分3块,
- 真正的数据
- 索引节点号(inode index)
- 文件名

读取文件的顺序是通过文件名,找到对应的inode,然后通过inode找到对应的数据,进行读取。

连接

当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在 其它的目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间。

硬连接

硬连接就是将多个不同的文件名指向同一个inode index。这样通过其中的任意一个文件名,都会访问到同一份数据。如下图所示,文件名1,文件名2,文件名3都会通过同一个inode访问到同一份数据。
Alt text

软连接

软连接类似windows中的快捷方式。它不是直接连到源文件的inode上的,而是一个新的特殊的文件,它记录了被连的文件名3的路径。

Alt text

example

➜  /tmp  ln -s test test1 #symbolic link 
➜  /tmp  ln test test2 #hard link
➜  /tmp  ls -l test*
6508253 -rw-r--r--@ 2 deshengkong  wheel  3423  7 10 20:08 test
6534236 -rw-r--r--  1 deshengkong  wheel   103  7 13 10:22 test.php
6544973 lrwxr-xr-x  1 deshengkong  wheel     4  7 13 11:13 test1 -> test # symbolic link 该文件的类型是l(link)
6508253 -rw-r--r--@ 2 deshengkong  wheel  3423  7 10 20:08 test2 # hard link 该文件的文件类型是普通文件

➜  /tmp  rm test #delete source file
➜  /tmp  cat test1 #symbolic link file找不到源文件,所以报错。
cat: test1: No such file or directory
➜  /tmp  cat test2 #hard link file 正常

reference

http://www.cnblogs.com/itech/archive/2009/04/10/1433052.html
http://www.cnblogs.com/joeblackzqq/archive/2011/03/20/1989625.html

### 硬链接与链接的区别 在Linux文件系统中,硬链接链接提供了不同的方式来关联文件。两者的主要区别在于工作原理以及适用范围。 #### 硬链接特性 硬链接指向的是inode节点而非路径名。这意味着即使原始文件被重命名或移动到其他目录下,通过硬链接仍然可以访问该文件的内容[^1]。创建一个新的硬链接不会增加磁盘空间占用量,因为多个名称共享同一份实际数据副本。然而需要注意的是,无法为目录建立硬链接,并且所有指向相同inode的链接都具有平等地位——删除任何一个都不会影响其余部分。 ```bash ln source_file hard_link_name ``` 此命令用于生成指定源文件的一个新硬链接名为`hard_link_name`. 要移除一个已存在的硬链接,则只需像处理普通文件那样操作即可: ```bash rm hard_link_name ``` 这只会减少相应inode上的链接计数而不会真正清除物理存储中的资料除非其计数值降到了零表示没有任何有效入口指向它时才会彻底释放资源. #### 链接特点 相比之下,符号链接(即所谓的“链”)保存着目标对象的位置信息(绝对路径或相对路径)。如果原文件位置发生变化则可能造成悬空状态;另外当尝试读取不存在的目标时会返回错误提示。不过好处是可以跨分区甚至网络挂载点之间建立联系而且能够针对整个目录树结构进行映射。 创建链接的方法如下所示: ```bash ln -s target_path symbolic_link_name ``` 这里`target_path`是要链接的对象的具体地址,而`symblic_link_name`则是赋予的新快捷方式的名字. 对于不再需要使用的链接同样可以通过简单的unlink指令予以消除: ```bash unlink symbolic_link_name ``` 这种方式仅废止特定的指针关系而不触及背后的数据实体本身.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值