No such file or directory? But the file exists!
I’ve downloaded a game (Shank) but the bin file doesn’t run. The error that is shown when I try to launch the executable is:
bash: ./shank-linux-120720110-1-bin: No such file or directory
Thank you for your reply. I’ve done the command you said Agent86 but I have the same result. I’ve downloaded also the .deb file but there is a problem too. I don’t know what problem has this game.
Please confirm whether you’re running a 64-bit installation (that’s the most common case for this problem).
9 Answers 9
You’re probably trying to run a 32-bit binary on a 64-bit system that doesn’t have 32-bit support installed.
There are three cases where you can get the message “No such file or directory”:
- The file doesn’t exist. I presume you’ve checked that the file does exist (perhaps because the shell completes it).
- There is a file by that name, but it’s a dangling symbolic link.
- The file exists, and you can even read it (for example, the command file shank-linux-120720110-1-bin displays something like “ELF 32-bit LSB executable …”), and yet when you try to execute it you’re told that the file doesn’t exist.
The error message in this last case is admittedly confusing. What it’s telling you is that a key component of the runtime environment necessary to run the program is missing. Unfortunately, the channel through which the error is reported only has room for the error code and not for this extra information that it’s really the runtime environment that’s to blame. If you want the technical version of this explanation, read Getting “Not found” message when running a 32-bit binary on a 64-bit system.
The file command will tell you just what this binary is. With a few exceptions, you can only run a binary for the processor architecture that your release of Ubuntu is for. The main exception is that you can run 32-bit (x86, a.k.a. IA32) binaries on 64-bit (amd64, a.k.a. x86_64) systems.
In Ubuntu up to 11.04, to run a 32-bit binary on a 64-bit installation, you need to install the ia32-libs package . You may need to install additional libraries (you’ll get an explicit error message if you do).
Since 11.10 (oneiric) introduced multiarch support, you can still install ia32-libs , but you can choose a finer-grained approach, it’s enough to get libc6-i386 (plus any other necessary library).
Файла нет, хотя он есть. что это значит?
У тебя 64-битный дистрибутив? Установи тогда 32-битный glibc, это исправит ошибку.
Да, наверно в этом дело… Просто странно что он пишет «нет файла»
Неформатированые посты смотрю по диагонали, да.
Скорее всего нет этого файла. В коде ошибки (ENOENT видимо) просто не уточняется, к какому именно файлу она относится, ну а баш думает что ошибка может касаться только того файла который ты запускаешь, вот и пишет так. Как уже выше предположили, скорее всего этот файл есть в пакете с 32-битным glibc.
firkax ★★★★ ( 04.11.21 23:05:06 MSK )
Последнее исправление: firkax 04.11.21 23:05:59 MSK (всего исправлений: 1)
Всё верно, спасибо. Учту что баш может приврать иногда)
Просто странно что он пишет «нет файла»
Да, неожиданно пишет, когда первый раз сталкиваешься.
Так ругается на ld-linux.so обычно. Например, нет 32-битного на 64-битной системе. Или, например, в NixOS так же ругается на неродную ему 64-битную. Давеча игрался с binfmt_misc — там тоже можно получить такое сообщение, если неверно указать интерпретатор.
До меня с первого раза тоже не дошло, что речь не про тот файл, который запустить просишь.
/lib/ld-linux.so.2: cannot open `/lib/ld-linux.so.2’ (No such file or directory)
Да, что-то мне его совсем не хватает, к тому же оказывается я на дебиане ) . На рпм бы сам нашёл наверно, а тут что-то всё как-то не так. Подскажите apt-get install … как дальше?
libc6-i386. и установи себе apt-file
Говорит: Следующие НОВЫЕ пакеты будут установлены: libc6-amd64-cross libc6-i386-amd64-cross libc6-i386-cross libc6-i386-x32-cross libc6-x32-cross
и вроде как установил, а файла как не было так и нет $ file /lib/ld-linux.so.2 /lib/ld-linux.so.2: cannot open `/lib/ld-linux.so.2’ (No such file or directory)
Нужно установить libc6:i386 . Если не устанавливается, то нужно перед установкой выполнить от рут:
dpkg --add-architecture i386 apt-get update
А что это было когда я запустил apt-get install libc6-i386 ?
Интересный этот апт. Если напишешь что-то не то, Yum обыкновенно посылает лесом, а вот апт соглашается, начинает суетиться, очень многословно что-то делать. Только хрен его знает что..
Заметьте, выбирается «libc6-i386-ppc64-cross» для регулярного выражения «libc6-i386.» Заметьте, выбирается «libc6-i386-mipsn32-cross» для регулярного выражения «libc6-i386.» Заметьте, выбирается «libc6-i386-x32-cross» для регулярного выражения «libc6-i386.» Заметьте, выбирается «libc6-i386-amd64-dcv1» для регулярного выражения «libc6-i386.»
Это ты кросс-компилятор установил, он 64-битный. libc:i386 же – это именно что 32-битная версия библиотеки.
Вот поэтому Линус на «федоре», а Грег – на «арче».
Korchevatel ★★★★★ ( 15.01.22 04:01:55 MSK )
Последнее исправление: Korchevatel 15.01.22 04:02:34 MSK (всего исправлений: 1)
На самом деле создаётся новый процесс bash или чего-то ещё и этот процесс возвращает из exec определённый код (числовой) ошибки, вызвавший процесс интерпретирует этот код как «нет такого файла» Может ошибка в чём-то другом, надо, предположительно, запустить трассировку и посмотреть, какой код ошибки вернёт екзек и самому его интерпретировать, ну это так, мысли вслух
А, понял, это он ругался, что нет файла библиотеки, наверно, а не твоего файла, в любом случае, в трассировке ты бы увидел, какой файл именно нет возможности открыть
IvanR ★★★ ( 15.01.22 04:47:08 MSK )
Последнее исправление: IvanR 15.01.22 04:50:35 MSK (всего исправлений: 1)
Проникся мыслями.. А как запустить трассировку? Да, библиотеки не было для 32 битных эльфов.
Это ты кросс-компилятор установил А что им можно делать? ))
No such file or directory — а файл есть
Снова всем здравствуйте. Мои увлекательнейшие приключения с Arch и KDE продолжаются и не дают скучать.
На сей раз проблема совсем странная. Пробовал поставить Catalyst для переключаемой графики в ноутбуке. Попробовал, что-то не пошло, решил пока забить. После одной из перезагрузок, когда Catalyst был уже удален и я вернулся на старый xf86-video-intel, обнаружилось, что не запускаются некоторые программы.
При запуске из консоли оказалось, что на попытку их запуска система говорит No such file or directory, хотя исполняемый файл — вот он. Более того, ему можно сделать file, его можно посмотреть в текстовом виде, переместить и удалить. А запустить нельзя. Расследование показало, что пали программы из /opt — Firefox, Chrome, Dropbox. Помимо них запускаться отказались и некоторые из /usr/bin, кажется, абсолютно рандомно. Переустановка не помогает. Удаление, например, /opt/google и переустановка тоже не помогает.
Совсем мистика. Мне уже не столько жалко систему, сколько просто интересно, что это такое может быть. Спасибо!
PS. Вспоминаю, что вроде началось после того, как я удалил коряво установленный Catalyst через
его можно посмотреть в текстовом виде
А файлы текстовые? Всмысле, это скрипты? Если это скрипты, то там вначале должно стоять что-то типа #!/bin/python . Вот может именно этого /bin/python и нет. (Если не понял — python я взял для примера, мог быть bash, sh, zsh, perl, php да что угодно)
Два телепат:
Покажи как ты запускаешь файл. Надеюсь не просто пишешь имя файла, а указываешь путь? Например ./program или /opt/bin/program
ldd на Dropbox натрави и сюда выхлоп, заодно uname -a
вобщем как вариант — хост 64 бит и слетела libc для 32 бит
> что на попытку их запуска система говорит No such file or directory, хотя исполняемый файл — вот он. Более того, ему можно сделать file, его можно посмотреть в текстовом виде, переместить и удалить. А запустить нельзя.
Покажите вывод ldd $filename. Если он покажет «not found» хотя бы для одной библиотеки, причина в этом.
Файлы бинарные, не скрипты. Файл запускаю правильно, естественно. Пробовал и под рутом, и под другой версией ядра — везде одинаковый результат.
Хост 64 бита, действительно, но и фаерфоксы с хромами были 64 битными — file на них говорит, что это 64-bit binary. LDD сейчас сделаю.
Забавно, ldd тоже считает, что этих файлов не существует.
$ file /opt/dropbox/dropbox /opt/dropbox/dropbox: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8, stripped $ ldd /opt/dropbox/dropbox /usr/bin/ldd: line 118: /opt/dropbox/dropbox: No such file or directory
А `readelf /opt/dropbox/dropbox`?
Похоже, потерялся какой-то файл настолько важный, что запуститься не может даже встроенный в ELF-ник dynamic linker, которому ldd передаёт управление.
Поправка: `readelf -d /opt/dropbox/dropbox`.
«readelf /opt/dropbox/dropbox» выводит просто справку по readelf, но запустилось с «readelf -a /opt/dropbox/dropbox». Правда там какое-то безумное количество информации, на что обратить внимание? На всякий случай — http://pastebin.com/2UHLVNmh
$ readelf -d /opt/dropbox/dropbox Dynamic section at offset 0x34b510 contains 28 entries: Tag Type Name/Value 0x0000000000000001 (NEEDED) Shared library: [libpthread.so.0] 0x0000000000000001 (NEEDED) Shared library: [libdl.so.2] 0x0000000000000001 (NEEDED) Shared library: [libutil.so.1] 0x0000000000000001 (NEEDED) Shared library: [libm.so.6] 0x0000000000000001 (NEEDED) Shared library: [libssl.so.0.9.8] 0x0000000000000001 (NEEDED) Shared library: [libcrypto.so.0.9.8] 0x0000000000000001 (NEEDED) Shared library: [libc.so.6] 0x000000000000000f (RPATH) Library rpath: [$:$/../lib] 0x000000000000000c (INIT) 0x414220 0x000000000000000d (FINI) 0x697e98 0x0000000000000004 (HASH) 0x400240 0x000000006ffffef5 (GNU_HASH) 0x4026e8 0x0000000000000005 (STRTAB) 0x40c6b8 0x0000000000000006 (SYMTAB) 0x404bb8 0x000000000000000a (STRSZ) 22040 (bytes) 0x000000000000000b (SYMENT) 24 (bytes) 0x0000000000000015 (DEBUG) 0x0 0x0000000000000003 (PLTGOT) 0x94b760 0x0000000000000002 (PLTRELSZ) 6432 (bytes) 0x0000000000000014 (PLTREL) RELA 0x0000000000000017 (JMPREL) 0x412900 0x0000000000000007 (RELA) 0x4127e0 0x0000000000000008 (RELASZ) 288 (bytes) 0x0000000000000009 (RELAENT) 24 (bytes) 0x000000006ffffffe (VERNEED) 0x412710 0x000000006fffffff (VERNEEDNUM) 5 0x000000006ffffff0 (VERSYM) 0x411cd0 0x0000000000000000 (NULL) 0x0
Интересно. А что скажет strace /opt/dropbox/dropbox?
Внезапно, все заработало. Параллельно я решил пойти тупым путем и переустановить все пакеты, которые стояли. Пока мы общались, они скачивались. Как раз когда я запустил strace на dropbox, pacman дошел до буквы l и dropbox заработал — так что, похоже, действительно, не хватало какой-то библиотеки. Теперь запускается firefox, chrome, dropbox, vwmare. В общем, все стало по-прежнему.
В любом случае, огромное спасибо за помощь вам и всем остальным. Жаль только, что причина так и осталась неизвестной..
> Жаль только, что причина так и осталась неизвестной..
если проблема проявлялась только на бинарях — проблема процентов на 95 была в неправильном пути к линкеру (хидер INTERP). такое иной раз случается если /lib или /lib64 — симлинки, и какой-то из них убился
Похоже, вы правы — после установки всех пакетов появился /lib64, которого до этого не было. Спасибо!