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

linux系统路径表达方式,绝对路径的表示方式为什么是“/usr"而不是"//usr”

今天闲逛贴吧,竟然看到有个人问绝对路径的表示方式为什么不是usrlocal而是usrlocal。原文:我想99%的人都没想过这个问题,都理

今天闲逛贴吧,竟然看到有个人问绝对路径的表示方式为什么不是//usr/local而是/usr/local。原文:

c6295b918950a111d6a26497497837d6.png

我想99%的人都没想过这个问题,都理所当然的认为:它不就是根"/"吗?

很巧,我是个探索狂和强迫症患者,当年回炉复习文件系统的时候,正好琢磨过这个问题。下面是我的理解,自认能解释的通。但本人毕竟菜鸟,也没法验证是否真是如此,如有错误,欢迎大牛指正。

我的结论是:"//usr/local"是正确的,和"/usr/local"的意义完全相同。

1.根文件系统具有"自引用"性,"/"和"//"无论是功能上还是意义上,都完全相同。

2.除了根目录外的任意目录,其内的"."和".."的inode号不一致,它们分别是当前目录的硬链接和父目录的硬链接。但是根目录下的"."和".."的inode号一致,都是根目录的硬链接。

例如:

[root@node1 ~]# ls -ail /usr

total 204

155 drwxr-xr-x.  13 root root  4096 May 11  2017 .

128 dr-xr-xr-x.  17 root root  4096 May 11  2017 ..

[root@node1 ~]# ls -ail /

total 36

128 dr-xr-xr-x.  17 root root 4096 May 11  2017 .

128 dr-xr-xr-x.  17 root root 4096 May 11  2017 ..

3.在Linux操作系统启动的时候,内核先有"虚拟根文件系统",表示方法为"/",之后找到真实的根文件系统,从"虚拟跟文件系统"切换到"真实根文件系统"。切换的方式就是将真实的根文件系统"挂载"到虚拟根文件系统上(并非真的挂载,但可以这么理解)。所以到这里正确的方式是"//",其中第一个"/"是虚拟根目录,第二个"/"是真实根文件系统。

因此,根文件系统下的".."代表的是第一个"/",即虚根,"."代表的是第二个"/",代表的是真实根目录。

在切换到真实根文件系统时,虚根和实根的inode号是一致的。但为什么能一致?虚根为什么也有inode号?

这是因为在每个分区创建为文件系统的时候,一定会预先保留几个特殊的inode号,相同的文件系统,这些预留inode号一定是相同的。例如ext类的文件系统中,为"/"保留的inode号为2,为"/proc"保留的inode号为1。这些预留的inode号就是为了给切换到真实根文件系统前的虚拟根文件系统使用的,它们记录在initrd/initramfs中。这样以来,既能为虚根分配inode,又能保证在切换时,"/"(虚根)和"//"(实根)的inode号保持一致,并在系统成功启动后使用。

之所以可以使用"/"来代替"//",也许是为了方便,也许是为了某些一致性,谁知道呢,甚至上面我的推理也是错误的呢。此外,除了绝对路径的前缀"/",路径中的任意"/"都可以替换为"//",例如"/usr//local"也能正确表示"/usr/local"。但它们和前缀的"//"意义不同。

0b1331709591d260c1c78e86d0c51c18.png



推荐阅读
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 深入探讨CPU虚拟化与KVM内存管理
    本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ... [详细]
  • 本文探讨了如何在 PHP 的 Eloquent ORM 中实现数据表之间的关联查询,并通过具体示例详细解释了如何将关联数据嵌入到查询结果中。这不仅提高了数据查询的效率,还简化了代码逻辑。 ... [详细]
  • 本文详细介绍了Linux系统中init进程的作用及其启动过程,解释了运行级别的概念,并提供了调整服务启动顺序的具体步骤和实例。通过了解这些内容,用户可以更好地管理系统的启动流程和服务配置。 ... [详细]
  • 解决网站乱码问题的综合指南
    本文总结了导致网站乱码的常见原因,并提供了详细的解决方案,包括文件编码、HTML元标签设置、服务器响应头配置、数据库字符集调整以及PHP与MySQL交互时的编码处理。 ... [详细]
  • 本文探讨了在Linux系统上使用Docker时,通过volume将主机上的HTML5文件挂载到容器内部指定目录时遇到的403错误,并提供了解决方案和详细的操作步骤。 ... [详细]
  • 本文介绍如何在现有网络中部署基于Linux系统的透明防火墙(网桥模式),以实现灵活的时间段控制、流量限制等功能。通过详细的步骤和配置说明,确保内部网络的安全性和稳定性。 ... [详细]
  • 作者:守望者1028链接:https:www.nowcoder.comdiscuss55353来源:牛客网面试高频题:校招过程中参考过牛客诸位大佬的面经,但是具体哪一块是参考谁的我 ... [详细]
  • PostgreSQL 10 离线安装指南
    本文详细介绍了如何在无法联网的服务器上进行 PostgreSQL 10 的离线安装,并涵盖了从下载安装包到配置远程访问的完整步骤。 ... [详细]
  • 深入理解Shell脚本编程
    本文详细介绍了Shell脚本编程的基础概念、语法结构及其在操作系统中的应用。通过具体的示例代码,帮助读者掌握如何编写和执行Shell脚本。 ... [详细]
  • PHP 时间与日期工具类:星座、干支、生肖的实现
    本文介绍了一个PHP时间与日期工具类,涵盖了时区设置、有效日期和时间检查、星座、干支、生肖计算等功能。该工具类特别适用于需要处理中国农历及西方星座的应用场景。 ... [详细]
  • 通过Web界面管理Linux日志的解决方案
    本指南介绍了一种利用rsyslog、MariaDB和LogAnalyzer搭建集中式日志管理平台的方法,使用户可以通过Web界面查看和分析Linux系统的日志记录。此方案不仅适用于服务器环境,还提供了详细的步骤来确保系统的稳定性和安全性。 ... [详细]
  • 解决U盘安装系统后无法重启的问题
    本文详细探讨了运维新手常遇到的U盘安装系统后无法正常重启的问题,提供了从问题分析到具体解决方案的完整步骤。通过理解Boot Loader的工作原理和正确配置启动项,帮助用户顺利解决问题。 ... [详细]
  • 本文详细介绍了网络存储技术的基本概念、分类及应用场景。通过分析直连式存储(DAS)、网络附加存储(NAS)和存储区域网络(SAN)的特点,帮助读者理解不同存储方式的优势与局限性。 ... [详细]
  • 本文介绍了Linux系统中的文件IO操作,包括文件描述符、基本文件操作函数以及目录操作。详细解释了各个函数的参数和返回值,并提供了代码示例。 ... [详细]
author-avatar
外包小王子
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有