Какой-то странный вывод моей команды в оболочке Linux

#linux #shell #command-line #cat #ls

#linux #оболочка #командная строка #cat #ls

Вопрос:

Я написал следующее в команде:

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

И он напечатал все имена файлов в текущем рабочем каталоге.

Мой вопрос в том, почему? и почему не 3 раза?

Комментарии:

1. По сути, вы создали копию ls исполняемого файла с кучей дополнительного мусора в конце (дополнительные копии исполняемого файла). Затем вы запустили копию… в котором перечислены файлы и завершены.

Ответ №1:

Поскольку формат исполняемого файла Linux (ELF) не является скриптом, который вы можете копировать и вставлять три раза подряд, чтобы получить тот же результат. Чтобы быть более точным, заголовок содержит единственную точку входа (думайте об этом как об адресе, где int main() был сохранен), откуда считываются инструкции. Как только вы достигнете финала return 0; или чего-то еще, программа останавливается, даже если в двоичном файле следует больше (хорошо структурированного) двоичного мусора.

TL; DR: Не забывайте — /bin/ls это скомпилированный двоичный файл, а не сценарий оболочки.

Комментарии:

1. Да, я забыл, что это уже выполненный файл. Теперь все ясно, спасибо!