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

我想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",但它们和前缀的"//"意义不同,之所以不报错且能正确当成单个斜线/,是因为系统有专门的路径处理函数。

绝对路径的表示方式为什么是"/usr"而不是"//usr"的更多相关文章

  1. java获得路径的多种方式

    本文讲解java语言中获得运行时路径的多种方式,包括java项目.java web项目.jar.weblogic等多种场景. 一.this.getClass().getClassLoader().ge ...

  2. Linux下/usr/bin与/usr/local/bin/区别总结

    Linux下/usr/bin与/usr/local/bin/区别总结 2017年10月13日 12:30:17 2puT 阅读数:15930    版权声明:本文为博主原创文章! github地址:h ...

  3. -bash: /usr/bin/yum: /usr/bin/python: bad interpreter: No such file or directory

    -bash: /usr/bin/yum: /usr/bin/python: bad interpreter: No such file or directory python多版本造成额问题 找不到p ...

  4. an安装jenkins时遇到ERROR: No Java executable found in current PATH: /bin:/usr/bin:/sbin:/usr/sbin的问题

    # sudo /etc/init.d/jenkins restartERROR: No Java executable found in current PATH: /bin:/usr/bin:/sb ...

  5. Linux /bin、/sbin、/usr/bin、/usr/sbin目录的区别

    在linux下我们经常用到的四个应用程序的目录是/bin./sbin./usr/bin./usr/sbin .而四者存放的文件一般如下:     bin目录:  bin为binary的简写主要放置一些 ...

  6. linux中/bin和/sbin和/usr/bin和/usr/sbin

    首先先解释一下bin和sbin的意思: 1.bin:为任何用户都可以使用的指令 2.sbin:(super bin)也就是只有超级管理员才能使用的指令 /usr    UNIX Software Re ...

  7. 为什么开源外围包安装指导都是按照到/usr/local/目录下,/usr/local与/usr的区别

    很多应用都安装在/usr/local下面,那么,这些应用为什么选择这个目录呢?Automake工具定义了下面的一组变量: Directory variable Default value prefix ...

  8. /bin, /sbin & /usr/bin, /usr/sbin & /usr/local/bin, /usr/local/sbin & glibc

    操作系统为自身完成启动所需要的 /bin, /sbin 系统基本管理所需要的 /usr/bin, /usr/sbin 第三方的 /usr/local/bin, /usr/local/sbin 核心库 ...

  9. 【centos】/usr/bin与/usr/local/bin的区别

    首先注意usr 指 Unix System Resource,而不是User 然后通常: /usr/bin下面的都是系统预装的可执行程序,会随着系统升级而改变. /usr/local/bin目录是给用 ...

随机推荐

  1. 对list遍历删除符合的数据

      例子

  2. drawable内存管理

    图片对象: drawable bitmap etc.图片对象在Android上该缓存吗?什么时候缓存?怎么缓存?缓存后使用时怎么取出?怎么销毁?什么时候销毁? bitmap对象(new出来的) :需要 ...

  3. Android中RecyclerView出现java.lang.IndexOutOfBoundsException

    在RecyclerView更细数据时出现java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid view holder ...

  4. 转:Override vs Overload

    重写(Override) 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变.即外壳不变,核心重写! 重写的好处在于子类可以根据需要,定义特定于自己的行为. 也就是说子类 ...

  5. 记录自己的 django管理 开发环境 和 生产环境 配置过程

    背景:自己的博客部署到服务器了,可每次上传服务器都要把配置重新该,包括数据库链接也得改,于是就需要管理开发环境和生产环境配置. 1, 这是目录结构,在blog下新建一个settings包,里面新建有c ...

  6. Xcopy命令参数使用介绍

    DOS批处理命令,永远是不朽的命令,不仅功能强大,同时,速度也是最快的!但是,很多新手学习计算机,都已经遗忘了本不该忘记的批处理命令 XCOPY是COPY的扩展,可以把指定的目录连文件和目录结构一并拷 ...

  7. 背水一战 Windows 10 (106) - 通知(Toast): 通过 toast 打开协议, 通过 toast 选择在指定的时间之后延迟提醒或者取消延迟提醒

    [源码下载] 背水一战 Windows 10 (106) - 通知(Toast): 通过 toast 打开协议, 通过 toast 选择在指定的时间之后延迟提醒或者取消延迟提醒 作者:webabcd ...

  8. 【福州活动】| "福州首届.NET开源社区线下技术交流会"(2018.11.10)

    活动介绍 微软爱开源,已是尽人皆知的事实.自从收购全球最大的开源社区 GitHub 之后,微软依旧使 GitHub 保持独立运营,并且通过此项举措,微软本身已经成为最大的社区服务者. .NET Cor ...

  9. Android JNI 学习(三):JNI 数据类型和数据结构

    本文我们来讨论一下JNI如何将Java类型映射到本机C类型. 一.基本数据类型 如下图表整理了Java基本类型和native对应的关系: Java类型 Native类型 描述 boolean jboo ...

  10. 第79节:Java中一些要点

    第79节:Java中一些要点 前言 一些知识点忘了没,可以通过一个点引出什么内容呢?做出自己的思维导图,看看自己到了哪一步了呢 内容 如果有人问jre,jdk,jvm是什么,你怎么回答呢? jre的英 ...