1.什么是inode
首先linux一切皆文件,一切皆文本流
inode ,中文译名“索引节点”,也叫“i节点”
文件储存在硬盘上,硬盘的最小存储单位叫做”扇区”(Sector)。每个扇区储存512字节(相当于0.5KB)。
操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个”块”(block)。这种由多个扇区组成的”块”,是文件存取的最小单位。”块”的大小,最常见的是4KB,即连续八个 sector组成一个 block。
Linux系统中文件的文件名和文件数据是分开存储的,而文件数据又分为实际数据与元信息。
元信息类似于文件属性,包括文件的创建者、创建日期、文件大小、文件权限等信息,实际信息存储在块block中,而存储文件元信息的区域就叫做inode,因此一个文件必须占用一个 inode, 并且至少占用一个block。
Linux内部使用 inode号来识别文件,而非文件名,对于系统来说,文件名是 inode号的别称,是便于用户识别文件的,文件名和 inode号是一一对应的关系,每个 inode号对应一个文件名。
2.查看文件inode信息
命令:stat 文件名
[test@test ~]$ stat 1.sh
File: ‘1.sh’
Size: 48 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 67308180 Links: 2
Access: (0777/-rwxrwxrwx) Uid: ( 1000/ test) Gid: ( 1000/ test)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2023-10-20 10:24:37.122033787 +0800
Modify: 2023-10-16 11:21:29.118521587 +0800
Change: 2023-10-20 10:58:12.815119852 +0800
Birth: -
--显示信息包括
--文件,大小,块,io块,文件类型,设备,inode号,链接,权限,用户,组
--最近访问信息,最近修改,最近改变信息,创建信息
总之,除了文件名以外的所有文件信息,都存在inode之中。Unix/Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称或者绰号。
inode也会消耗硬盘空间,所以硬盘格式化的时候,操作系统自动将硬盘分成两个区域。一个是数据区,存放文件数据;另一个是inode区(inode table),存放inode所包含的信息。
查看每个硬盘分区的inode总数和已经使用的数量 命令: df -i
由于每个文件都必须有一个inode,因此有可能发生inode已经用光,但是硬盘还未存满的情况。这时,就无法在硬盘上创建新文件。
3.打开文件发生了什么
--如果是新建文件,那么文件会为文件分配一个唯一的inode号,并将inode号和文件名关联
1.系统找到这个文件名对应的inode号码;
2.通过inode号码,获取inode信息;
3.根据inode信息,找到文件数据所在的block,读出数据。
4. 硬链接软连接
ln(英文全拼:link files)命令是一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接。
ln [参数][源文件或目录][目标文件或目录]
常用的参数 软连接参数-s ,不加是硬链接,其余参数我不常用
- --backup[=CONTROL] 备份已存在的目标文件
- -b 类似 --backup ,但不接受参数
- -d 允许超级用户制作目录的硬链接
- -f 强制执行
- -i 交互模式,文件存在则提示用户是否覆盖
- -n 把符号链接视为一般目录
- -s 软链接(符号链接)
- -v 显示详细的处理过程
5.硬链接和软连接的区别
有一个文件1.sh,对他分别创建一个软连接和硬链接
[test@test ~]$ ll
-rwxrwxrwx. 1 test test 48 Oct 16 11:21 1.sh
[test@test ~]$ cat 1.sh
#! /bin/bash
echo 111
echo $SHLVL
echo $BASHPID
----创建软连接 -s
[test@test ~]$ ln -s 1.sh 1
----硬链接
[test@test ~]$ ln -v 1.sh 2
‘2’ => ‘1.sh’
分别查看他们的inode号 ll -i
可以看到,硬链接 2 的inode号和源文件1.sh 的inode号一样,软连接 1 产生了个新的inode号
区别1:
硬链接:在文件系统了建了个文件名2,和原始文件1.sh共享相同的inode块和数据块,因此他们的文件大小和修改时间也是相同的
软链接:产生了一个新的文件1,可以理解成快捷方式,指向原始文件1.sh或者目录的路径,不共享inode块和数据块,因此他们的大小和修改时间不同
区别2:
软连接可以 跨文件系统 ,硬链接只有在同一个文件系统中才能创建;软链接可以对一个不存在的文件名wwwwww进行链接;软链接可以对目录进行链接,硬链接不允许对目录进行链接
硬链接,以文件副本的形式存在。但不占用实际空间。不论是硬链接或软链接都不会将原本的档案复制一份,只会占用非常少量的磁碟空间。
区别3:删除原始文件1.sh,软连接会失效(指向的文件没了),硬链接不会。
yeah!求赞