linux文件存储之inode,硬链接,软链接详解

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!求赞

猜你喜欢

转载自blog.csdn.net/qq_63693805/article/details/133942188