硬连接和软连接,第一感觉就像是window的快捷方式,实则不然
要说硬连接和软连接,那就必须了解inode和block以及分区了
EXT文件系统在创建分区的时候,就划分了两块区域,inode table和date block
INODE
inode – index node ,索引节点
每一个inode固定分配了128bytes的空间
一个文件和目录对应着一个inode
多个文件可以对应一个inode
当访问一个文件的时候,发生了什么
首先会找到这个文件名对应的inode number,然后拿着inode number 找到inode,获取inode中的信息,inode中记录了文件的数据在哪些个block中储存,然后会根据着inode中的block顺序,依次取出数据
INODE的内容
用sata命令取出文件名对应的inode信息
- size :该文件的大小
- block : block的信息
- links :有多少个连接数,有多少个文件名连接上这个inode
- inode: inode number
- Access:mode 权限
- uid、gid
- atime、mtime、ctime
删除
删除一个文件的时候发生了什么?
当这个文件的links>1的时候,先links-1,不删除block中的数据,不删除inode
如果links=1,那就删除inode,而且删除block,这样的话,那文件真的是删除了
删除目录的软连接,对实际目录没有影响,删除实际目录那就是真的删除了
硬连接
ln source destination
用上面的指令可以新建一个硬连接
建一个硬连接发生了什么?
先新建一个文件名,文件名的inode number 指向源文件的inode number,然后把links+1,这就完成啦
所以硬连接文件的所有信息(权限、owner、size、time….)都和源文件一模一样
访问硬连接的过程
找出硬连接的inode number,然后读取这个inode的信息和bolck位置,接着读取block中的数据
注意
- 源文件和硬连接文件共用一个inode
- 建立硬连接,inode中的links会加一
- 所以删除硬连接对源文件不会有影响
软连接
ln -s source destination
用上面的指令可以建立一个软连接
建一个软连接发生了什么?
先建立一个文件,这个过程就会新建一个inode,软连接的inode和源文件的inode不一样
然后这个软连接文件的文件名会指向源文件
可以看到,软连接的inode和源文件的inode不一样
软连接文件的大小为4bytes,这刚好就是源文件文件名(demo)的大小,一个字幕一个byte
访问一个软连接
访问一个软连接文件的时候,会根据文件名找到源文件,然后就跟直接访问源文件一样了
注意
- 软连接的inode和源文件的inode不一样
- 软连接不会增加links,所以删除源文件(links=2)的时候,软连接就访问不了了
- 软连接文件的size=源文件的文件名的size