【发布时间】:2017-09-17 16:05:07
【问题描述】:
我在阅读 /bin/sh 和 /bin/bash 之间的区别时遇到了这个有趣的问题/答案:here
我对在我的标题中提出同样问题的答案发表了评论,他回复了更新的答案:
你如何知道 /bin/sh 在你的系统上指向什么?
复杂之处在于 /bin/sh 可能是符号链接或硬链接 关联。如果是符号链接,解决它的可移植方法是:
> % file -h /bin/sh
> /bin/sh: symbolic link to bash
如果是硬链接, 试试
> % find -L /bin -samefile /bin/sh
> /bin/sh
> /bin/bash
我试过这个但遇到了麻烦,所以我想我会提出一个单独的问题。
链接答案的结果:
>file -h /bin/sh
>/bin/sh: executable (RISC System/6000) or object module
>find -L /bin -samefile /bin/sh
>find: bad option -samefile
我错过了什么? 我正在运行 AIX:
>oslevel -s
7100-03-03-1415
【问题讨论】:
-
运行
man find。这是一个对不同系统上的选项非常挑剔的程序。您的版本的-samefile将有一个不同的名称,如果它存在的话。 -
看起来
/bin/sh确实是您系统上的可执行文件,而不是符号链接。请记住,它不一定“指向”某些其他 shell 可执行文件。显然,您的find实用程序不是 gnu find 实用程序,并且与该实用程序不兼容。这对于商业 Unix 变体来说并不奇怪。 -
@arkascha。问题不在于此时它是可执行文件还是符号链接。问题是它是否是 bash 可执行文件的硬链接。
-
AIX 的
find实用程序支持-inum。从ls -i /bin/bash获取inode,然后使用find /bin -inum inode并查看/bin/sh是否会出现。或者只是比较ls -i /bin/sh /bin/bash的inodes。 -
硬链接是用于常规文件的文件系统指针结构。硬链接是对文件系统内部数据结构的引用。您无法区分常规文件和硬链接,因为所有常规文件都是通过硬链接访问的。符号链接是包含路径的文件,该路径用于指向另一个文件。符号链接中的数据并不指向文件系统的内部数据结构。这就是为什么符号链接可以指向单独的文件系统,而硬链接不能。