热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

认识Linux系统中的inode,硬链接和软链接

1.Inode在Linux系统中,每个文件都有一个inode(索引节点),inode存储了文件的元信息,主要有:*文件的字节数*文件的用户ID*文件的组ID
1. Inode
在Linux系统中,每个文件都有一个inode(索引节点),inode存储了文件的元信息,主要有:
*文件的字节数
*文件的用户ID
*文件的组ID
*文件的read,write,execute权限
*文件的时间戳:最近的产生时间,最近一次存取时间,最近一次修改时间
*链接数
*inode所使用的block数
*文件数据block的位置
等等

这里补充一点,文件是存储在硬盘上的。硬盘的最小存储单位是扇区(Sector),每个扇区存储512字节。出于效率的考虑,操作系统不是按一个扇区一个扇区的读取文件,而是一次连续读取多个扇区,通常被称作块(block)。块是文件存取的最小单位,一般为4K,即连续的8个扇区组成一个块。因为inode要存储文件的元信息,它也会消耗硬盘空间,一般是128或256字节。inode节点的总数,在硬盘格式化的时候就给定了,一般是每1KB或2KB设置一个inode。有时候会遇到剩余硬盘空间足够,但系统仍然提示空间不足的情况,其原因就是inode用完了。

Linux系统中每个文件都有文件名,但是操作系统并不是按文件名来识别文件,而是按inode号来识别不同的文件。当用户打开一个文件时,主要有3步:1. 系统找到文件名对应的inode号;2. 通过inode号获取inode信息;3. 根据inode信息找到文件所在的block并读取数据。另外,因为系统是按inode来识别文件,所以直接删除inode就能到达删除文件的作用。

在Linux中有“一切皆文件”的说法,目录也被看作一种文件。当创建目录时,一般会生成两个目录项:“.”和“..”。可以看成是两个硬链接,前者的inode号就是当前目录的inode 号;后者的inode号就是当前目录的父目录的inode号。

<附>
查看inode信息的方法:
---
stat 文件名
---
查看inode号的方法:
---
ls -i 文件名
---
查看硬盘分区的inode总数和已使用inode的数量:
---
df -i
---

2. 硬链接和软链接
1)硬链接(hard link)
硬链接打破了文件名和inode号“一一对应”的关系,实现让多个文件名指向同一个inode号。删除其中一个文件名,不影响另一个文件名的访问。硬链接生成的文件大小与原文件一样大。创建硬链接的方法如下:
---
ln 源文件 目标文件
---
每当创建一个硬链接,inode信息里记录的链接数就会加1;反之,删除一个文件名,链接数就会减1。当链接数为0时,说明没有文件指向该inode,系统将回收该inode号,以及所对应的block区域。

2)软链接(soft link)
软链接又叫符号链接(symbolic link)。软链接生成的文件是对源文件的引用,但是与原文件的inode号不同。访问软链接生成的文件时,其实是读取的源文件。当源文件被删除时,系统会提示找不到文件的错误信息。可以用如下方法创建软链接:
---
ln -s 源文件 目标文件
---

3)比较
*硬链接指向文件索引节点,不重新分配inode;软链接生成时分配新的inode
*硬链接文件大小与源文件大小相同;软链接文件大小与源文件不同,一般较小
*硬链接不能跨越文件系统;软链接可以
*一般情况下,不能为目录创建硬链接;但可以为目录创建软链接



推荐阅读
  • 优化联通光猫DNS服务器设置
    本文详细介绍了如何为联通光猫配置DNS服务器地址,以提高网络解析效率和访问体验。通过智能线路解析功能,域名解析可以根据访问者的IP来源和类型进行差异化处理,从而实现更优的网络性能。 ... [详细]
  • 本文详细分析了JSP(JavaServer Pages)技术的主要优点和缺点,帮助开发者更好地理解其适用场景及潜在挑战。JSP作为一种服务器端技术,广泛应用于Web开发中。 ... [详细]
  • CentOS 7 磁盘与文件系统管理指南
    本文详细介绍了磁盘的基本结构、接口类型、分区管理以及文件系统格式化等内容,并提供了实际操作步骤,帮助读者更好地理解和掌握 CentOS 7 中的磁盘与文件系统管理。 ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 本文详细介绍了如何解决Uploadify插件在Internet Explorer(IE)9和10版本中遇到的点击失效及JQuery运行时错误问题。通过修改相关JavaScript代码,确保上传功能在不同浏览器环境中的一致性和稳定性。 ... [详细]
  • 本文将介绍如何使用 Go 语言编写和运行一个简单的“Hello, World!”程序。内容涵盖开发环境配置、代码结构解析及执行步骤。 ... [详细]
  • 本文探讨了Hive中内部表和外部表的区别及其在HDFS上的路径映射,详细解释了两者的创建、加载及删除操作,并提供了查看表详细信息的方法。通过对比这两种表类型,帮助读者理解如何更好地管理和保护数据。 ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
author-avatar
Victory学德语
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有