iNode,index node,不是 Apple 公司的产品。

原文地址: Linux 的 inode 的理解

  • ls -i:查看文件的 inode 号;

    • ls -ai:会发现./..也是一种硬链接
  • stat:

0. 软链接与硬链接

ln -s 源文件 目标文件

当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在其它的目录下用 ln 命令链接(link)它就可以,不必重复的占用磁盘空间。例如:

ln -s /bin/less /usr/local/bin/less

-s 是代号(symbolic)的意思。

有两点需要注意:

  • 第一,ln命令会保持每一处链接文件的同步性,也就是说,不论你改动了哪一处,其它的文件都会发生相同的变化;
  • 第二,ln的链接又软链接和硬链接两种,
    • 软链接就是ln -s ** **,它只会在你选定的位置上生成一个文件的镜像,不会占用磁盘空间,硬链接ln ** **,没有参数 -s , 它会在你选定的位置上生成一个和源文件大小相同的文件(软链接和硬链接自然原理和实现上不会相同),无论是软链接还是硬链接,文件都保持同步变化

1. 源文件与其符号链接

使用 ln -s original_file s_original_file创建原始文件的符号链接文件。注:

  • 符号链接仍然是一份文件,一份独立的文件,只不过指向另外一个文件;

  • 使用 ls -i filename查看文件的 inode

    • 可知原始文件和其符号链接具有不同的 inode;
  • inode 是什么?

    理解inode,要从文件储存说起。
    文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。

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

    文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的元信息(meta info),比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做 inode,中文译名为"索引节点"。

    文件分为两部分:

    • 文件内容,存储在 block 中;
    • 文件元信息,存在 inode 中;
  • inode 的内容

    inode包含文件的元信息,具体来说有以下内容:

    • 文件的字节数
    • 文件拥有者的User ID
    • 文件的Group ID
    • 文件的读、写、执行权限
    • 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。
    • 链接数,即有多少文件名指向这个inode
    • 文件数据block的位置

    可以用stat命令,查看某个文件的inode信息:

    stat example.txt
    

    总之,除了文件名以外的所有文件信息,都存在inode之中。至于为什么没有文件名,下文会有详细解释。

  • inode 的大小

    inode 也会消耗硬盘空间,所以硬盘格式化的时候,操作系统自动将硬盘分成两个区域。

    • 一个是数据区,存放文件数据;
    • 另一个是inode区(inode table),存放inode所包含的信息。

    每个 inode 节点的大小,一般是 128字节 或 256 字节。inode 节点的总数,在格式化时就给定,一般是每 1KB 或每 2KB 就设置一个 inode。假定在一块1GB的硬盘中,每个inode节点的大小为128字节,每1KB就设置一个inode,那么inode table的大小就会达到128MB,占整块硬盘的12.8%。

    查看每个硬盘分区的inode总数和已经使用的数量,可以使用 df 命令。

    df -i
    

    查看每个inode节点的大小,可以用如下命令:

    sudo dumpe2fs -h /dev/hda | grep "Inode size"
    

    由于每个文件都必须有一个inode,因此有可能发生inode已经用光,但是硬盘还未存满的情况。这时,就无法在硬盘上创建新文件。

Linux 符号链接与 inode相关推荐

  1. Linux——什么是inode

    inode 哦哦哦哦哦哦 看带颜色的字就可 inode(索引节点) 文件存储在硬盘上 硬盘的最小存储单位"扇区(Sector)" 每个扇区存储512个字节(0.5KB) 操作系统读 ...

  2. Linux入门之inode解析及管道重定向

    Linux入门之inode解析及管道重定向 inode 简介: 当磁盘分区格式化后会根据分区格式.大小等信息来指定分区分配多少个inode表,每个inode表都会有一个在当前分区中唯一的编号,可能有一 ...

  3. Linux 索引节点 inode

    1.inode 简介 理解 inode,要从文件储存说起.文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector).每个扇区储存 512 字节(相当于 0.5KB).操作系 ...

  4. 【Linux】文件系统/inode/软硬链接

    目录 一.了解磁盘 1.磁盘的概念 2.磁盘的物理结构 3.磁盘的逻辑结构 4.磁盘区域的划分 二.linux文件系统 三.inode 四.软硬链接 1.软链接 2.硬链接 一.了解磁盘 前言: 一般 ...

  5. Linux文件系统之inode,block,superblock

            文件存储在硬盘上,硬盘的最小存储单位叫做扇区sector,每个扇区存储512个字节(0.5)kb,系统读取文件时不会一个一个扇区的读,而是一次性连续读取多个扇区,即一次性读1个'块'( ...

  6. Linux——文件管理之inode

    一.inode概念 inode(index node):译为"索引节点",是理解Linux文件系统和硬盘存储的基础. 理解inode,要从文件储存说起.文件储存在硬盘上,硬盘的最小 ...

  7. Linux中的 inode以及 软硬链接分析

    一. inode 是什么?(索引节点)理解inode 需要知道文件存储,文件是存储在硬盘上的,操作系统读取硬盘的时候会连续读取多个扇区(硬盘的最小存储单元),即一次性读取一个块(文件存取的最小单位). ...

  8. linux 符号链接攻击防御简介

    前言 IBM下有两款大型关系型数据库,分别是Informix和DB2.早在2001年和2003年两款数据库就被爆出存在符号链攻击提权的问题.尤其2003年Snosoft一口气发布了DB2数个关键工具存 ...

  9. Linux下对于inode的理解

    0x01 什么是inode 文件存储在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector),每个扇区储存512字节: 操作系统读取硬盘时,不会一个个扇区地读取,这样效率低,而是一 ...

最新文章

  1. HCNA多区域OSPF配置
  2. android 生成签名命令
  3. SQL 判断两个时间段是否有交叉
  4. ajax中json和文本的区别,json格式字符串--json对象 【ajax_responseText】重点
  5. node.js 笔记1 模块方面
  6. Exynos4412 内核移植(五)—— 驱动的移植
  7. 随机样本一致性:一种用于图像分析和自动制图的模型拟合模型(2)--(P3P)
  8. 【Flink】Flink The TaskSlotTable has to be started
  9. 自学hadoop(三)
  10. Keras 学习笔记
  11. 超级硬盘数据恢复软件 4.6.5.0注冊码破解版
  12. 软件架构设计的几点理解
  13. 简单分析minidump
  14. jxl生成excel 设置隐藏列 隐藏行
  15. roundcube db.inc.php,Webmail Roundcube安装配置基础教程
  16. 中国 vs 卡塔尔 一场幸运的比赛
  17. windows7删除计算机管理员权限,win7系统删除C盘文件需要管理员权限的解决方法...
  18. utf8在mysql占几个字符_utf-8的中文,一个字符占几个字节
  19. 记一次投票活动的感触
  20. Auto.js脚本开发入门

热门文章

  1. linux cron网址,cron 计划任务问题,我的cron要求是点击网站一个网址
  2. 理解mysql 底层原理
  3. Spark面试术语总结
  4. 考勤排班_考勤管理系统VS传统考勤排班优劣如何?
  5. python门牌制作
  6. Sklearn——交叉验证(Cross Validation)
  7. LeetCode 207. 课程表(广度优先遍历)
  8. matlab知识集锦
  9. Happy Mid-Autumn Festival !
  10. tf.transpose()函数(转)