从文件系统的角度看linux 软连接和硬连接

目前linux使用的文件系统为EXT4文件系统,即使用inode存放文件的元数据(例如属性与权限),使用block存放文件的数据,在inode里面存放了指向文件block的指针。属于索引式文件系统。对于linux系统的目录,也有专门的inode和block来存储。有一个目录dir,在目录dir下存放两个文件file1和file2。则dir的inode存放目录的权限信息等其他信息,dir的block存放指针,指向file1和file2的inode。在EXT4文件系统的硬盘分区中,文件是这样存储的:

每个目录至少占用一个inode和block,每个文件也至少占用一个inode和block。block的大小有多种选择,1KB,2KB,4KB等。

那么硬连接和软连接有什么区别呢?

首先是硬连接:

假设/dir1/file1和/dir2/file2两个文件连接到同一个文件,在底层文件系统是这样表示的:

这两个文件名都连接到同一个文件的inode,这两个文件是同一个文件。如果输入ll -i /dir1/file1可以发现这有一个字段是2,也就是说目标文件的inode被两个文件名连接到。使用file1来编辑文件,最后如果打开file2,一样是修改过的文件内容。

硬连接最大的好处是安全,如果将任意一个文件名删除,其实inode和block都是存在的,可以通过另外一个文件名来读取正确的文件数据。一般来说,硬连接只是在某个目录的block下多写了一个关联数据而已,既不会增加inode也不会耗用block的数量。不过硬连接只能在同一个文件系统中(我个人理解是同一个硬盘分区中,不知道对不对?)而且不能连接到目录。

不能连接到目录是因为如果使用硬连接连接到目录,连接的数据需要连同被连接目录下面所有的数据建立连接。如果将/etc目录创建一个硬连接/etc_hd,那么/etc_hd的block中的文件名和/etc的block中对应的文件名均需要指向同一个文件的inode,会造成相当大的复杂度。

 

而软连接(又叫符号连接)则有所不同,软连接类似于windows下的快捷方式,软连接本身就是一个独立的文件,这个文件指向它连接的那个文件的文件名,当源文件被删除的时候,软连接文件会打开不了。我们平时使用的ln命令就是建立软连接。

如图所示,file2是一个软连接文件,file2的block存放指针指向文件名file1,所以党打开file2的时候,顺着这个指针读取的是file1的文件内容。如果file1被删除,file2block的指针就变成了一个空指针,file2就会失效。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值