本文主要介绍了Linux系统中的连接文件。node
文件系统linux
在Linux系统中,将文件分为两个部分:用户数据和元数据。索引
元数据(inode)get
元数据即文件的索引节点(inode),用来记录文件的权限(r、w、x)、文件的全部者和属组、文件的大小、文件的状态改变时间(ctime)、文件的最近一次读取时间(atime)、文件的最近一次修改时间(mtime)、文件数据的block编号。test
inode的默认大小为128Byte,新的ext4和xfs能够设置为256Byte。权限
在Linux中,元数据中的inode号,即索引节点号,才是文件的惟一标识而非文件名。文件名仅是为了方便人们的记忆和使用,系统或程序经过inode号寻找正确的文件数据块。程序
用户数据(block)im
用户数据即文件数据块(block),记录了文件的真实内容,包括文件名,文件名会被记录在上级目录的block中。也就是说,目录的block中记录的是这个目录下全部一级子文件和子目录的文件名及inode的对应,而文件的block中记录的才是文件实际的数据。数据
block的大小能够是1KB、2KB、4KB,默认为4KB。block用于实际的数据存储,若是一个block放不下数据,则能够占用多个block,最后一个block可能不会占满,但也不能再放入其余文件的数据。多个block有多是连续的,也有多是分散的。文件
硬连接(Hard Link)
含义
硬连接共用同一个inode号,只是文件名不一样。
查找文件的步骤
当咱们查找一个硬连接文件,好比/root/test-hard时,要通过如下步骤:
1)首先找到根目录的inode(根目录的inode是系统已知的,inode号是2),而后判断用户是否有权限访问根目录的block。 2)若是有权限,则能够在根目录的block中访问到/root的文件名及对应的inode号。 3)经过/root/目录的inode号,能够查找到/root/目录的inode信息,接着判断用户是否有权限访问/root/目录的block。 4)若是有权限,则能够从/root/目录的block中读取到test-hard文件的文件名及对应的inode号。 5)经过test-hard文件的inode号,就能够找到test-hard文件的inode信息,接着判断用户是否有权限访问test-hard文件的block。 6)若是有权限,则能够读取block中的数据,这样就完成了/root/test-hard文件的读取与访问。
硬连接的特色
1)不管是修改源文件(test文件),仍是修改硬连接文件(test-hard文件),另外一个文件中的数据都会发生改变。 2)不管是删除源文件,仍是删除硬连接文件,只要还有一个文件存在,这个文件均可以被访问。 3)硬连接不会创建新的inode信息,也不会更改inode的总数。 4)硬连接不能跨文件系统(分区)创建,由于在不一样的文件系统中,inode号是从新计算的。 5)硬连接不能连接目录,由于若是给目录创建硬连接,那么不只目录自己须要从新创建,目录下全部的子文件,包括子目录中的全部子文件都须要创建硬连接,这对当前的Linux来说过于复杂。 6)硬连接不会占用inode和block。
软连接(Symbolic link)
含义
软连接有着本身的inode号以及用户数据块。只不过用户数据块中存放的内容是另外一文件的路径名的指向。
查找文件的步骤
当咱们查找一个软连接文件,好比/root/test-soft时,要通过如下步骤:
1)首先找到根目录的inode索引信息,而后判断用户是否有权限访问根目录的block。 2)若是有权限访问根目录的block,就会在block中查找到/root/目录的inode号。 3)接着访问/root/目录的inode信息,判断用户是否有权限访问/root/目录的block。 4)若是有权限,就会在block中读取到软连接文件test-soft的inode号。由于软连接文件会真正创建本身的inode索引和block,因此软连接文件和源文件的inode号是不同的。 5)经过软连接文件的inode号,找到了test-soft文件inode信息,判断用户是否有权限访问block。 6)若是有权限,就会发现test-soft文件的block中没有实际数据,仅有源文件test的inode号。 7)接着经过源文件的inode号,访问到源文件test的inode信息,判断用户是否有权限访问block。 8)若是有权限,就会在test文件的block中读取到真正的数据,从而完成数据访问。
软链接的特色
1)不管是修改源文件(test),仍是修改硬连接文件(test-soft),另外一个文件中的数据都会发生改变。 2)删除软连接文件,源文件不受影响。而删除原文件,软连接文件将找不到实际的数据,从而显示文件不存在。 3)软连接会新建本身的inode信息和block,只是在block中不存储实际文件数据,而存储的是源文件的文件名及inode号。 4)软连接能够连接目录。 5)软连接能够跨分区。 6)软连接会占用inode和block。