今天闲逛贴吧,竟然看到有个人问绝对路径的表示方式为什么不是//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. Linux下好用的屏幕录像软件kazam及截图软件shutter

    都是apt直接安装即可使用. 其中kazam默认保存的文件格式是avi,非常大,通常录制几十秒就已经好几个G,导致录制过程太占用资源,会出现卡顿的现象. 在“首选项”中可以选择输出格式为mp4,文件就 ...

  2. MySQL数据库(二)-数据库的增删改查

    简介: 以下是MySQL最基本的增删改查语句.在进行“增删改查”的操作之前,先建立一个包含数据表student的数据库,新建表grade(具体操作可以见上一篇). 一."增"-添加数据 1.1 为表中 ...

  3. queue deque

  4. P层

    package net.goeasyway.uploadimage.presenter; import net.goeasyway.uploadimage.model.Photo;import net ...

  5. weka环境配置

    java环境变量设置: 安装jdk到具体目录"ABC"下当前目录下应该有jdk+版本号和jre加版本号. 然后打开环境变量:新建JAVA_HOME内容是:jdk的安装目录.例如:D ...

  6. C语言fprintf, fwrite, fscanf, fread混用问题

    int main(int argc, const char * argv[]) { // insert code here... FILE * fp = fopen("test.txt&qu ...

  7. hdu 4069 垃圾数独

    首先dfs给每个格子分一个大的区块 其次套板子就a 我一开始直接在选取行的时候填数独,发现超时 我这一行也就4个元素,找到 x <= 81 的列计算元素位置,81 < x <= 16 ...

  8. gii配置

    下载完成后不要设置urlManager http://zjm.testyii.com/index.php?r=gii 即可进入gii页面 或者是 将'urlManager'=> [ 'enabl ...

  9. 学习Java的进度

    这周我们通过老师的讲解带着我们回到了第八周的知识点.lambda表达式也是一种简化程序的好方法,通过回调程序的测试可以对比出lambda 表达式少的不是一两行代码,可以少了类中方法的定义,直接使用.内 ...

  10. 使用 VSTS 进行 CI 的过程中,无法识别 .NET Core 2.x 的情况处理

    大概是由于 .NET Core 2.1 还没有正式发布,使用 VSTS 进行持续集成(CI)的过程中,自动 Build 的环节无法识别 .NET Core 2.1 的框架,查看日志会提示如下错误: V ...