Вопрос Данный файл или каталог отсутствует? Но файл существует!


Я загрузил игру (Shank), но файл bin не запускается. Ошибка, которая появляется при попытке запуска исполняемого файла:

bash: ./shank-linux-120720110-1-bin: No such file or directory

150
2018-05-07 19:06


происхождения


Может быть, сначала «chmod u + x ./shank*bin»? - agent86
также не должно быть «.bin», а не «-bin», может быть, это просто опечатка - Anake
Спасибо за ваш ответ. Я выполнил команду, указанную Agent86, но у меня такой же результат. Я также загрузил файл .deb, но есть проблема. Я не знаю, в чем проблема. - Francesco
Проверьте, выполняется ли 64-разрядная установка (это наиболее распространенный случай для этой проблемы). - Gilles
Да, я подтверждаю, что использую 64-битную архитектуру на своем ноутбуке. - Francesco


ответы:


Вероятно, вы пытаетесь запустить 32-битный двоичный код в 64-разрядной системе, в которой не установлена ​​32-разрядная поддержка.

Есть три случая, когда вы можете получить сообщение «Нет такого файла или каталога»:

  • Файл не существует. Я предполагаю, что вы проверили, что файл существует (возможно, потому, что оболочка завершает его).
  • Существует файл с этим именем, но это болтливая символическая ссылка.
  • Файл существует, и вы даже можете его прочитать (например, команда file shank-linux-120720110-1-bin отображает что-то вроде «ELF 32-bit LSB executable ...»), и все же, когда вы пытаетесь выполнить его, вам сообщается, что файл не существует.

Сообщение об ошибке в этом последнем случае, по общему признанию, запутывает. Это говорит о том, что ключевой компонент среды выполнения, необходимый для запуска программы, отсутствует. К сожалению, канал, через который сообщается об ошибке, имеет место только для кода ошибки, а не для этой дополнительной информации, что это действительно среда выполнения, которая виновата. Если вы хотите получить техническую версию этого объяснения, прочитайте Сообщение «Не найдено» при запуске 32-битного двоичного файла в 64-битной системе,

file команда сообщит вам, что это за двоичный файл. За некоторыми исключениями вы можете запускать только двоичный код для архитектуры процессора, для которого предназначен выпуск Ubuntu. Основное исключение состоит в том, что вы можете запускать 32-разрядные (x86, a.k.a. IA32) двоичные файлы в 64-разрядных (amd64, a.k.a. x86_64) системах.

В Ubuntu до 11.04 для запуска 32-разрядного двоичного кода при 64-разрядной установке вам необходимо установить ia32-libs пакет  Install ia32-libs, Возможно, вам придется установить дополнительные библиотеки (при этом вы получите явное сообщение об ошибке).

Начиная с 11.10 (один) мультиархитектурная поддержки, вы все равно можете установить ia32-libs, но вы можете выбрать более тонкий подход, этого достаточно, чтобы получить libc6-i386  Install libc6-i386 (плюс любая другая необходимая библиотека).


201
2018-05-07 21:47



Спасибо за отличный ответ, Жиль. Хотя я еще не испытал эту проблему (пока!), Я подал ваш ответ для дальнейшего использования. - Jim C
Спасибо за ваш исчерпывающий ответ! Загруженный ящик для файлов был единственным, доступным в этом формате (bin). Поэтому я считаю, что это хорошо для всех архитектур. Я также загрузил файл .deb для своей архитектуры (64 бит), но с другой ошибкой. На данный момент я думаю, что на игру влияют некоторые ошибки, или я не могу установить эту игру. Теперь я пытаюсь загрузить libc6-i386, и я все еще пытаюсь установить его. Я напишу еще раз, если произойдут значительные изменения. Благодарю вас за время. - Francesco
@Francesco Пожалуйста, разместите решение! Скорее всего, это поможет другим людям, пытающимся запустить Shank на Ubuntu. Вы можете ответить на свой вопрос, - Gilles
Вы можете использовать ldd чтобы проверить, нет ли у вас библиотеки. ldd kgio_ext.so может сказать что-то вроде libruby.so.2.3 => not found среди прочих - EnabrenTane
По-видимому, есть еще один сценарий, когда bash: ...some...path...: No such file or directory может отображаться: после перемещения исполняемого файла. Кажется, что Bash кэширует пути к исполняемым файлам, найденным в $ PATH; бег hash -r чтобы очистить его. Видеть: unix.stackexchange.com/a/5610/11352 - akavel


64-битные системы Ubuntu Multiarch

Следуйте этому ответу, только если вывод file file-name шоу,

file-name: ELF 32-bit LSB  executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8, not stripped

Для запуска 32-битного исполняемого файла в 64-битной многоэкранной системе Ubuntu вы должны добавить i386 архитектуры, а также вы должны установить libc6:i386,libncurses5:i386,libstdc++6:i386 эти три пакета библиотеки.

sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386
./file-name

40
2018-04-24 13:14



Я бы использовал sudo для последней команды: запуск 32-битного двоичного файла (что явно не скомпилировано вами или Ubuntu), поскольку sudo может быть рискованным. (ну, даже как не root, допустимо) - alci
что бы это ни было, но это работает. - Avinash Raj
Следует отметить, что если вы используете CentOS или RedHat, этот ответ не применяется. Из-за этого было отброшено на несколько часов. - oMiKeY
На Kali 2 64 бит мне нужно было установить libselinux1:i386 - Aralox


Установив deb для 32 бит, я понял, что мне не хватает некоторых библиотек (в дополнение к ia32-libs и libc6). Сначала я решил эту проблему, указав эту команду:

sudo apt-get install -f          

Затем я получил еще одну ошибку:

Message: SDL_GL_LoadLibrary 
Error: Failed loading libGL.so.1

Очевидно, что эти библиотеки были правильно установлены. Не вдаваясь в подробности, мне пришлось связывать библиотеки вручную. Тогда я понял, что может также упростить решение через Synaptic установить следующие пакеты:

libgl1-mesa-glx:i386
libgl1-mesa-dri: i386.

После этого следующей проблемой был черный экран во время игры, который я решил, заменив исполняемый файл в / Shank / bin следующим: http://treefort.icculus.org/smb/smb-linux-mesa-hotfix-test.tar.bz2,

Надеюсь, это будет полезно кому-то. Если вам нужна дополнительная помощь или более подробная информация, не стесняйтесь обращаться ко мне.


4
2018-05-09 19:12





Вот расшифровка, в которой рассказывается о природе проблемы, и как ее исправить как Ubuntu 16.04. Обратите внимание, что хотя file отчеты «динамически связаны», ldd сообщает «не динамический исполняемый файл».

$ ./myprogram
bash: myprogram: No such file or directory

$ file myprogram
myprogram: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.2.5, not stripped

$ ldd myprogram
    not a dynamic executable

После установки libc6: i386, все начинает улучшаться ...

$ sudo apt-get install libc6:i386 # the initial fix
...

$ ldd myprogram
    linux-gate.so.1 =>  (0xf77fd000)
    libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf7626000)
    /lib/ld-linux.so.2 (0x56578000)

$ ./myprogram
myprogram: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory

Чтобы завершить работу, вам может потребоваться определить и установить дополнительные библиотеки по одному за раз ...

$ sudo apt-get install libstdc++6:i386 ## may require various additional libs

$ ./myprogram
... works correctly ...

Я не знаю, существует ли систематический способ определения правильных библиотек для установки. Существует немного догадок, сопоставляющих сообщения об ошибках с именами пакетов (помощь по завершению табуляции).


3
2018-06-08 20:57



ldd (неправильно) сообщает «не динамический исполняемый файл». - nobar


Чтобы расширить ответ на @Gilles, существует как минимум три сценария, приводящие к этой ошибке:

  1. Файл не существует.
  2. Файл существует, но является висячей символической ссылкой.
  3. Файл существует (например, file команда работает), делая для загадочного сообщения об ошибке. Это может означать, что проблема связана с загрузчиком.

Категории проблем с загрузчиком:

  1. Загрузочный исполняемый файл не существует. Вы можете проверить это с помощью команды file и посмотреть, существует ли загрузчик. Например.

    file lmgrd
    lmgrd: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-lsb-x86-64.so.3, for GNU/Linux 2.6.18, stripped
    

    уведомление interpreter /lib64/ld-lsb-x86-64.so.3; если этот файл не существует, вам необходимо его установить. Для этого конкретного загрузчика 16.04 ответ оказался sudo apt-get install lsb,

  2. Проблемы с загрузчиком скрипта (см. этот ответ).

  3. Отсутствие разделяемых библиотек - используйте ldd <file-name> для проверки наличия каких-либо «не найденных» библиотек. Видеть этот ответ для получения дополнительной информации.

Загрузчик, который не существует, может быть вызван несоответствием 32/64 бит или какой-либо другой причиной. Могут быть и другие ошибки загрузчика, о которых я не знаю.


2
2018-05-11 18:54



В моем случае, file lmutil не показывал переводчика, но ldd сделал и установил lsb решил проблему. - meowsqueak