![为什么 `/usr/bin/` 和 `/usr/bin/X11/` 中有“相同”的可执行文件?它们真的一样吗?](https://linux22.com/image/890909/%E4%B8%BA%E4%BB%80%E4%B9%88%20%60%2Fusr%2Fbin%2F%60%20%E5%92%8C%20%60%2Fusr%2Fbin%2FX11%2F%60%20%E4%B8%AD%E6%9C%89%E2%80%9C%E7%9B%B8%E5%90%8C%E2%80%9D%E7%9A%84%E5%8F%AF%E6%89%A7%E8%A1%8C%E6%96%87%E4%BB%B6%EF%BC%9F%E5%AE%83%E4%BB%AC%E7%9C%9F%E7%9A%84%E4%B8%80%E6%A0%B7%E5%90%97%EF%BC%9F.png)
使用 Ubuntu 14.04 LTS。我正在自定义安装gcc
我想将其与对于我的目的来说太旧的受支持版本放在一起。
我的计算机安装了来自 Ubuntu 存储库的 4.8.4 版本,我正在查看whereis gcc
gcc 文件在文件系统中的正常排列方式。
然后我注意到相同的可执行文件存储在和中/usr/bin/
(/usr/bin/X11
在ll -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 系统出现,它带有奇妙的图形程序,例如xterm
xclock
等等,以及诸如xrdb
和xmodmap
。人们过去常常把这些图形程序放在一个特殊的目录中,后来这个目录就变成了/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 让我走上正轨