为什么 `/usr/bin/` 和 `/usr/bin/X11/` 中有“相同”的可执行文件?它们真的一样吗?

为什么 `/usr/bin/` 和 `/usr/bin/X11/` 中有“相同”的可执行文件?它们真的一样吗?

使用 Ubuntu 14.04 LTS。我正在自定义安装gcc我想将其与对于我的目的来说太旧的受支持版本放在一起。

我的计算机安装了来自 Ubuntu 存储库的 4.8.4 版本,我正在查看whereis gccgcc 文件在文件系统中的正常排列方式。

然后我注意到相同的可执行文件存储在和中/usr/bin//usr/bin/X11ll -L两个文件夹中使用)。出现以下问题:

  • 一般来说,/usr/bin/X11/与 有什么区别/usr/bin/?我研究过标准文件系统层次结构,且/usr/bin/X11/无标准目录;
  • 具体来说,假设 中的文件/usr/bin/X11/只是 中的文件的复制品,这/usr/bin/在规则上是正确的吗?新版本的树中gcc没有<mount point>/bin/X11文件夹。了解这一点很有用,以便自信地将 中的现有符号链接重定向/usr/bin/X11到新版本的可执行文件(不要在细节上太过谨慎)。

感谢您的思考。

答案1

以前没有 GUI。当X Window 系统出现,它带有奇妙的图形程序,例如xtermxclock等等,以及诸如xrdbxmodmap。人们过去常常把这些图形程序放在一个特殊的目录中,后来这个目录就变成了/usr/bin/X11。(X11因为最终版本的X 协议是 11,具体来说是 X 版本 11 发布 6 点 4,X11R6.4;X11 之前有 X9 和 X10。

但是现在所有可执行文件都存在于/bin/usr/bin/sbin和中/usr/sbin;虽然/usr/bin/X11不再有用途,但它仍然被创建为符号链接为了/usr/bin保持与旧的系统管理员和旧脚本的兼容性,这些脚本已经习惯xterm/usr/bin/X11/xterm

/usr/bin所以答案是,和中相同的可执行文件并不相同/usr/bin/X11:它/usr/bin/X11本身与 相同/usr/bin

如果你仔细观察,你会发现这/usr/bin/X11是一个指向 的符号链接.。这被称为相对的符号链接:/usr/bin/X11作为中的文件/usr/bin和指向当前目录的符号链接,.这使其成为/usr/bin/X11的同义词/usr/bin

答案2

为了发现路径和文件实际指向的内容,请执行以下操作

$ realpath /usr/bin/X11
/usr/bin

有趣的变体:

$ myDir=/usr/bin/X11
$ echo $(realpath -s $myDir) is in fact $(realpath $myDir)
/usr/bin/X11 is in fact /usr/bin

这是在线手册页realpath

感谢@AlexP 和@muru 让我走上正轨

相关内容