【问题标题】:Some strange output on my command in linux shell我在 linux shell 中的命令有一些奇怪的输出
【发布时间】:2025-11-29 13:15:01
【问题描述】:

我在命令中写了以下内容:

$ cat /bin/ls > blah
$ cat blah blah blah > bbb
$ chmod u+x bbb
$ ./bbb

它打印了当前工作目录中的所有文件名。

我的问题是为什么?为什么不是 3 次?

【问题讨论】:

  • 您实际上复制了ls 可执行文件,最后还有一堆额外的垃圾(可执行文件的额外副本)。然后你运行副本...列出文件并退出。

标签: linux shell command-line cat ls


【解决方案1】:

因为 Linux 可执行文件格式 (ELF) 不是一个脚本,您可以连续复制粘贴 3 次以获得相同的结果。更准确地说,标头包含一个入口点(将其视为存储int main() 的地址),即从中读取指令的位置。一旦你到达最终的return 0; 或其他什么,程序就会停止,即使二进制文件中有更多(结构良好的)二进制垃圾。

TL;DR:不要忘记 - /bin/ls 是编译后的二进制文件,而不是 shell 脚本。

【讨论】:

  • 是的,我忘了这是一个已经编译好的文件。现在很清楚了,谢谢!