硬链接和软连接


太长不想看

硬链接:就是给文件起个别名,inode和文件内容是一样的,不能跨文件系统,不能对不存在的文件创立链接。

软连接:类似与window是快捷方式,软连接就是普通文件,文件里面存的是被链接文件的地址,
可以跨文件系统,可以对不存在的文件创立链接。

文件的组织:
在Linux文件被分为两部分:文件元数据(文件名、inode)和用户数据(数据块)

|--------------------------------------------------
|文件名 —> inode —> 数据块
|--------------------------------------------------
|<--------元数据------>|<-用户数据------>|

用户的真实数据存储在数据块,系统为了方面对数据的管理对每个文件添加了文件元数据,其中inode记录了文件的创建、修改时间,文件宿主、数据块地址等信息(不包括文件名),inode是文件的唯一标识(而非文件名,文件名的存在是方面人类识别和操作)。

我是可掠过的题外话:


既然inode中不包含文件名,那我们操作文件名,例如$cd Dowload是怎么实现的呢?
这时候就要说一下目录是什么鬼了,Linux系统对目录和文件一样对待,即目录也是文件,目录中存的是当前目录下的文件信息罢了。这些信息包括:偏移量、inode、文件名。
|----偏移量—|------inode—|---文件名—|
| 0 |6684632|.
| 16 |6684639|…
| 32 |6684684|Makefile
| 48 |6684679|Dowload

每个进程有自己的当前工作目录,当使用$cd Dowload命令时便会在进程当前工作目录中查找对应文件名从而获取其inode(6684679),然后获得Dowload文件中数据。


正文

为解决文件的共享使用,Linux 系统引入了两种链接:硬链接 (hard link) 与软链接(又称符号链接,即 soft link 或 symbolic link)

硬链接:

link oldfile newfile 
ln oldfile newfile

硬链接是对已有起的别名,既然是别名,不能无中生有对不存在的文件其别名,oldfile必须是已存在的文件。另外,newfile与oldfile共用inode,即硬链接不会产生新的inode。

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

  • 文件有相同的 inode 及 data block;
  • 只能对已存在的文件进行创建; 不能交叉文件系统进行硬链接的创建
  • 不能对目录进行创建,只可对文件创建;
  • 删除一个硬链接文件并不影响其他有相同 inode 号的文件

为何不能对目录创建硬链接,是因为,每个目录下有两个隐藏文件(.<本地目录>和…<上层目录>),通过$ll可以看到,而这两个文件本身就是硬链接,即.文件的inode和文本见的inode相同,可以通过$ls -i或stat参看文件inode。若对目录使用硬链接,会造成环路。

软连接:

ln -s oldfile newfile

链接就是一个普通文件,只是数据块内容有点特殊(数据块中存放的内容是另一文件的路径名的指向)。软链接有着自己的 inode 号以及用户数据块。
因此,软连接没有硬链接那么多限制:

  • 软连接有自己的inode文件属性和权限
  • 可对不存在的文件创立软连接
  • 软连接可跨文件系统
  • 软连接可对文件或目录创建
  • 删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接被称为死链接(即 dangling link,若被指向路径文件被重新创建,死链接可恢复为正常的软链接)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值