Linux文件系统软链接和硬链接
一、inode和block
1.概述
在Linux操作系统中,文件数据包括实际内容和属性(元信息),属性包括文件权限和文件所有者。
文件存储在硬盘上,硬盘最小存储单元是“扇区”,每个扇区存储512字节。
操作系统读取硬盘的时候,不会一个个扇区的读取,这样效率太低,而是一次性连续读取8个扇区,即一次性读取一个“块”(block),块是文件存取的最小单位。
连续的八个扇区组成一个block,“块”的大小,容量4KB。
文件数据是存储在块中的,而文件的相关属性就保存在inode中,称为索引节点或i节点,一个文件占有一个i节点。
2.inode节点信息
inode包含很多的文件元信息,包括文件的字节数、文件拥有者UserID、文件的GroupID、文件的rwx权限(读、写、执行)、文件时间戳。
使用stat命令可以查看某个文件的inode信息
touch df.log
stat df.log
mv df.log df.dy ##改个文件名,看看那个时间会改变
stat df.dy
最近改动为改属性的时间
最近更改为改内容的时间
2.inode节点信息
inode包含很多的文件元信息,包括文件的字节数、文件拥有者UserID、文件的GroupID、文件的rwx权限(读、写、执行)、文件时间戳。
使用stat命令可以查看某个文件的inode信息
touch df.log
stat df.log
mv df.log df.dy ##改个文件名,看看那个时间会改变
stat df.dy
最近改动为改属性的时间
最近更改为改内容的时间
Linux系统文件有三个主要的时间属性,分别是ctime(change time), atime(access time), mtime(modify time),对应中文显示为最近更改时间、最近访问和最近改动。
ctime(change time) 是最后一次改变文件或目录(属性)的时间,例如执行 chmod, chown 等命令;
atime(access time)是最后一次访问文件或目录的时间;
mtime(modify time)是最后一次修改文件或目录(内容)的时间
3.inode号
当用户打开文件,系统内部分成三步:
(1)系统找到文件名的inode号码
(2)通过inode号码,获取inode信息
(3)根据inode信息,找到文件所在的block,并读取数据
ls -i 命令可以查看文件对应的inode号码;state命令会显示更详细的信息,也是可以从中查到inode号的。
ls -i df.dy ##查看inode号
4.inode的大小
使用命令df -i可以查看每个硬盘的inode节点数和已使用情况
df -i
由于inode号码与文件名分离,导致一些Unix/Linux系统具有以下的现象:
(1)当文件名包含特殊字符,可能无法正常删除文件,直接删除inode,也可以删除文件;
(2)移动或者重命名文件时,只改变文件名,不影响inode号码;
(3)打开一个文件后,系统通过inode号码来识别该文件,不再考虑文件名。
当数据更新时,只要将文件指向新的节点号就可以了。
二、软链接和硬链接
1.软链接和硬链接
因为在系统中很多不同的目录文件位置会需要用到相同的文件,如果在每个需要的地方都存放一份文件的话,那样十分占据磁盘空间,在需要使用文件的地方创建链接可以节约资源,又可以使用文件。
软链接是快速链接到目标文件或者目录,硬链接产生新的文件名且所以链接产生的文件名和源文件都是指向相同inode节点的。
命令格式:ln 源文件 目标
创建硬链接
touch a b
ln a c##为源文件a创建硬链接
ls ##可看到c已存在
state c
state a ##看两个文件的i节点号是相同的
创建软链接
ln -s a d
ll ##可查看d指向a
state a
state d ##查看inode,d也是指到a
2.关于ll命令输出结果中字段信息
图中红框出来的数字,对于目录来说,这个数字是表示这个目录下的第一个子目录的数量,
比如test05这个目录,显示的是2,表示他目录下的.和…来个目录,其他的都不是目录。
对应其他文件来说,表示链接数,对于软链接一般为1,对于硬链接会显示的数量大于1(数字表示指向同个i节点号的文件数量,硬链接i节点号都相同)。