首页 > 系统相关 >Linux文件系统属性解读

Linux文件系统属性解读

时间:2024-11-13 14:57:57浏览次数:1  
标签:文件 文件名 文件系统 目录 解读 Linux inode 链接 block

原文分享:https://bbs.deepin.org/post/281192

一、ls -ihl 每一列的含义

image.png

二、inode和block

理解inode要从文件存储说起。

文件存储在硬盘上,硬盘的最小存储单位叫做“扇区”(Sector),每个扇区存储512字节(相当于0.5KB)。

操作系统读取硬盘的时候,不会一个扇区一个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个“块”(block),这种由多个扇区组成的“块”,是文件存取的最小单位。

“块”的大小,常见的是4KB,即连续8个sector组成一个block。

block(块)

            连续的8个扇区组成一个block

            是文件存取地最小单位

inode(索引节点)

            中文译名为:索引节点,也叫i节点

            用于存储文件元信息

525ed71e-22d4-4068-b4a4-b24698da5a1d.png

inode和block的作用

  • block的作用:用来存真正的数据内容;
  • inode的作用:用来存数据的元信息的,所谓元信息指的就是该数据的一些属性,特性。

inode 详细介绍

inode可以记录的信息有哪些?

可以是文件权限(rwx)的记录,文件的属组,属主,文件大小,时间戳等,这种存储文件元信息的区域聚焦做inode,中文译名“索引节点”,也叫 i 节点。因此一个文件必须占用一个inode,但至少占用一个block。

注1:inode并不包括文件名,其实文件名是存放在目录当中的,linux系统中一切皆文件,因此目录也是一种文件。即查看目录中的文件,cd 跳转到指定目录后,通过 ls 查看目录中的文件名。每个inode都有一个号码,系统用inode号码识别不同的文件。对于用户,文件名只是inode号码便于识别的别称。

注2:inode 也会消耗硬盘空间,所以格式化的时候,操作系统自动将硬盘分成两个区域。一个是数据区,存放文件数据;另一个是 inode 区,存放 inode 所包含的信息。每个 inode 的大小,一般是128字节或256字节。通常情况下不需要关注单个 inode 的大小,而是需要重点关注 inode 总数。inode总数在格式化的时候就确定了。

inode编号

每一个 inode 都有一个编号,系统根据 inode 编号可以快速的计算出 inode 信息在磁盘 inodes 存储区的偏移,然后从中获取 inode 信息,再根据 inode信息中记录的 Block 块位置,从Block存储区读出文件内容每个inode都有一个号码,操作系统用inode号来识别不同的文件。

inode 编号在一个文件系统中是唯一的,多个文件系统之间可能会出现相同的编号,下图磁盘存储结构示意图中 /dev/vda1 和 /dev/vda2 在各自的文件系统中 inode 编号是唯一的。

f41cbeb7-e758-4f41-9af3-db87a3bed384.png

Unix/Linux系统内部不是用文件名,而使用inode号来识别文件。对于系统来说,文件名只是inode号便于识别的别名。表面上用户是通过文件名打开文件,实际上系统内部分成三个步骤:

  1. 系统找到这个文件名对应的inode号;
  2. 通过inode号,获取inode信息;
  3. 根据inode信息,找到文件数据所在的block,读出数据。

其实系统还要根据inode信息,看用户是否具有访问的权限,由就指向对应的数据block,没有就返回权限拒绝。

查看 inode 信息

使用 stat 命令查看inode信息

image.png

ls -i 直接查看文件 i 节点号

也可以通过 stat 查看文件 inode 信息,查看 i 节点号

image.png

df -i 查看硬盘分区的 inode总数 和 已使用 情况

image.png

上述文件字段解释:

  • 文件系统:文件系统
  • inodes:文件系统中的inodes总数量
  • 已用I:inodes已经使用了的数量
  • 可用I:inodes 可供使用的数量
  • 已用I%:已经使用了的inodes百分比
  • 挂载点:文件系统的挂载点

inode 特性带来的问题

由于 inode 号码和文件名分离,导致一些Unix/Linux 系统具备以下几种特有的现象。

  1. 文件名包含特殊符号,可能无法正常删除。这时直接删除 inode ,能够起到删除文件的作用;
find ./* -inum 节点号 -delete
  1. 移动文件或重命名文件,只是改变文件名,不影响 inode号码;
  2. 打开一个文件以后,系统就以 inode 号码来识别这个文件,不再考虑文件名。

这种情况使得软件更新变得简单,可以在不关闭软件的情况下进行更新,不需要重启。因为系统通过 inode 号码,识别运行中的文件,不通过文件名。更新的时候,新版文件以同样的文件名,生成一个新的 inode ,不会影响到运行中的文件。等到下一次运行这个软件的时候,文件名就自动指向新版文件,旧版文件的 inode 则被回收。

硬链接与软链接

硬链接

通过文件系统的 inode 链接来产生新的文件名,而不是产生新的文件,称为硬链接。

一般情况下,每个 inode 号码对应一个文件名,但是 linux 允许多个文件名指向同一个 inode 号码。意味着可以使用不同的文件名访问相同的内容。

ln 源文件 目标文件(名)

运行该命令之后,源文件与目标文件的 inode 号码相同,都指向同一个 inode。inode 信息中的链接数这时就会增加1。

当一个文件拥有多个硬链接时,对文件内容修改,会影响到所有文件名;但是删除一个文件名,不影响另一个文件名的访问。删除一个文件名,只会使得 inode 中的链接数减1.

需要注意的是:不能对目录做硬链接。
通过 mkdir命令创建一个新目录,其硬连接数应该有2个,应为常见的目录本身为1个硬链接,而目录下的隐藏目录 .(点号)是该目录的又一个硬链接,也算是1个硬链接数。

[root@hero ~]# mkdir /oldboy/oldboy
[root@hero ~]# ll -d /oldboy/oldboy
drwxr-xr-x. 2 root root 6 3月  17 09:11 /oldboy/oldboy
[root@hero ~]# ll -a /oldboy/oldboy
总用量 0
drwxr-xr-x. 2 root root   6 3月  17 09:11 .
drwxr-xr-x. 3 root root 181 3月  17 09:11 ..

隐藏目录中的 . 表示当前目录,它是当前目录的一个硬链接,和当前目录拥有相同的inode编号。我们执行一个文件需要输入类似 ./test 的命令,命令中的 . 表示的就是当前目录; .. 表示当前目录的父目录,它是父目录的一个硬链接,和父目录拥有相同的inode编号。还记得返回上一层的命令 cd ..吗?这里的 cd ..表示的就是当前目录的父目录。

软链接

软链接就是再创建一个独立的文件,而这个文件会让数据的读取指向它连接的那个文件的文件名。

ln -s 源文件或目录 目标文件或目录

例如,文件A 和 文件B 的 inode 号码虽然不一样,但是 文件A 的内容是 文件B 的路径。读取 文件A 时,系统会自动将访问者导向 文件B 。这时,文件A 就称为 文件B 的软链接 soft link 或者符号链接 symblic link。

这意味着,文件A 依赖于 文件B 而存在,如果删除了 文件B,打开 文件A 就会报错。这是软链接与硬链接最大的不同:文件A 指向 文件B 的文件名,而不是 文件B 的 inode 号码,文件B 的 inode 链接数不会因此发生变化。

标签:文件,文件名,文件系统,目录,解读,Linux,inode,链接,block
From: https://www.cnblogs.com/yuezc/p/18543936

相关文章

  • Linux CPU 拓扑结构之调度域 调度组 - 以8核ARM big.Little架构处理器为例
    CPU拓扑结构简介SMTLevel超线程处理器的一个核心MCLevel多核CPU的一个核心DIELevel一个物理CPU的晶片(注意不是package,package是封装好了的,肉眼看到的CPU处理器)(覆盖系统所有的CPU(CPU0~CPUN))cpu最小级别的就是超线程处理器的一个smt核,次小的一级就是一个多核cpu......
  • 2024 同一个网段,反弹shell四种方法【linux版本】bash、python、nc、villian反弹shell
    实验环境准备(同一个网段下,我是桥接的虚拟机)一、bash反弹shell二、python反弹shell三、nc反弹shell四、villain反弹shell实验环境准备(同一个网段下,我是桥接的虚拟机)      一台kali的linux(攻击者)        一台centos7/debian[另一个linux](受害者)一、b......
  • Foxit PDF Conversion SDK (C++, Linux ARM)-2.0.2
    FoxitPDFConversionSDKisaflexiblehigh-performancelibraryforconversionbetweenPDFfiles andMSOfficefileswhilemaintainingthelayoutandformatofyouroriginaldocuments.Itoffers advancedconversioncapabilitiesaswellasthesamequa......
  • 在 Windows 系统中,可以使用内置的命令行工具来分割和合并大文件,虽然没有专门的 split
    在Windows系统中,可以使用内置的命令行工具来分割和合并大文件,虽然没有专门的split命令(类似于Linux中的split命令),但可以通过一些其他方式实现这一功能。以下是一些常用方法:1.使用 fsutil 命令分割大文件fsutil是Windows提供的一个工具,可以用于管理文件系统,但并不直......
  • Linux之运维命令
    查看日志1、系统今日小于warning级别的日志manjournalctl|grep-C2"debug"|journalctl-xenall--sincetoday-pwarning[-ojson|-ojson-pretty]2、系统启动日志、内核日志#启动journalctl-b[-0]#内核journalctl-k3、指定服务或进程最新日志#......
  • Linux基础——Vscode远程管理服务器
    一、VisualStudioCode链接服务端报错1、无法与xxxxx建立连接:未能下载VSCODE服务器failedtofetch2、VScode版本 二、解决办法1、服务端查看用户根目录.vscode-server/i.检查缓存目录ls-al~/.vscode-server/ii.切换到缓存目录及清除缓存cd ~/.vscode-server/......
  • avalonia在linux下运行出现Default font family name can't be null or empty问题的解
    avalonia在linux下运行出现Defaultfontfamilynamecan'tbenullorempty的错误,是因为Avalonia无法确定或找不到默认的字体名,可以先在控制台打命令确定本机安装字体fc-list然后在avalonia项目的program.cs中增加此代码:publicstaticAppBuilderBuildAvalonia......
  • SUSE Linux 里一些常用的命令
    在SAPBusinessoneversionforHANA中经常用到的一些命令。重启HANA数据库的服务:用putty或者直接登录suse服务器,打开命令行,先登录数据库用户,如果当时HANA数据库安装使用的是ndb,那对应的就是su-ndbadm--先登录对应的数据库用户su-ndbadm--然后重启数据库服务./H......
  • Linux:理解动静态库
    一、前言如果我们写了一些方法想给别人用??有什么办法呢??——>(1)我直接把头文件和源文件给他(.c+.h)  ——>这样会让别人轻易看到你的实现    (2)把源文件打包成库,再和头文件一起给他(库+.h)——>这样别人看不到你的实现——>所以平时为了能够不让别人轻易窃取我们的......
  • Linux内存管理,它的价值?面试被问过吗?
    Linux内核的内存管理是操作系统最基础且关键的部分之一。它直接影响系统性能、资源分配的效率和多任务管理的稳定性。掌握Linux内核的内存管理,不仅能够帮助我们理解操作系统如何调度资源,还能优化应用程序的性能。在面试中,内存管理常常是考察系统设计、操作系统基础和调优......