Linux的文件系统
首先我们要知道Linux中的文件系统由目录,inode和block组成,接下来是相关解析
Block是文件具体内容的存放地,Linux中把磁盘分为几个分区,而这每个分区中又分为无数个block,每个block的大小通常为1k,2k或4k,block是文件系统的最小存储单位。我们在存储数据时,数据可能不会存储在相连的几个block中而且我们不知道存储的到底是哪个block,这就需要inode了,inode中包含了block指针,当我们需要某个数据时inode中的指针会指向我们需要的数据。
Inode是文件索引节点,每个文件对应的只有一个inode。Linux中inode用来存储文件的元数据(数据类型,权限,owner,group,链接数,时间戳,文件大小,扩展属性,block指针),inode一般很小,只有一百多字节,它里面除了存储文件的元数据,最重要的是还存储了block的指针。Linux中通常将一个文件存储在一个磁盘分区的不连续block中,而指针的作用就是在系统要使用这些数据时永远知道下一个block的位置,即将这些分散的block链接在一起,一个inode中包含了12个直接指针,1个间接指针,1个双间接指针,1个三间接指针,也就是一个不到1k的inode可以间接存储16G的数据
以下是一个inode的结构:
目录包含了文件名和inode,系统对文件的引用是通过inode来引用的,而我们无法记住所有文件的inode所以对于使用者来说我们是通过文件名来引用文件的,所以一个目录是目录下的文件名和文件inode之间的映射
所以当我们要索引一个文件时,我们首先通过目录层层递进找到我们要使用的文件,然后系统根据我们找到的文件得出inode,,inode再通过指针调用block。
以下是目录,inode和数据区(block)的图解:
相关命令
cp
cp命令在使用时首先给新文件分配一个inode号,在indode表中生成新条目,然后在目录中创建一个目录项将名称与inode号关联,最后在复制数据生成新的文件
rm
删除文件时链接数递减,释放inode,把数据块放在空闲列表中,删除目录项。rm实际上不会立即删除数据,当存放该数据的block被需要时直接用新数据覆盖
mv
如果mv命令的目标和源文件在相同的文件系统,作为mv命令,用新的文件名创建新的目录项,删除旧目录条目对应的旧的文件名,不影响inode表或磁盘上的数据位置,如果目标和原文件在一个不同的文件系统则相当于cp和rm。
硬链接和软连接
硬链接:创建一个文件的副本,这个副本单独存在,有自己的inode,有着和源文件一样的指针,删除源文件并不会影响副本,修改其中一个的数据,另一个也被修改。
ln 源 新文件
一旦创建成功,则没有源和目的文件关系 (新文件也有其自己的inode)
硬链接必须在相同的分区下才能创建
硬链接不能对目录创建
目录的硬链接数包含目录自身的名字,以及.和子目录里的..
所以目录的子目录数=(链接数-2)
软链接:也叫符号连接,相当于Windows的快捷方式,软连接中存储的内容只是源文件的路径,当源文件删除时软连接将不可用
ln -s 源文件 目的文件
相当于Windows下的快捷方式
软链接可以跨分区
可以用相对路径 ,也可以用绝对路径
在创建相对路径时,推荐进入到最终目录,再创建
删除源,软链接不可用