"Нет такого файла или каталога", но он существует - программирование
Подтвердить что ты не робот

"Нет такого файла или каталога", но он существует

Я просто хочу запустить исполняемый файл из командной строки, ./arm-mingw32ce-g++, но затем я получаю сообщение об ошибке,

bash: ./arm-mingw32ce-g++: No such file or directory

Я запускаю Ubuntu Linux 10.10. ls -l списки

-rwxr-xr-x 1 root root  433308 2010-10-16 21:32 arm-mingw32ce-g++

Использование sudo (sudo ./arm-mingw32ce-g++) дает

sudo: unable to execute ./arm-mingw32ce-g++: No such file or directory

Я понятия не имею, почему ОС не может даже увидеть файл, когда он есть. Любые мысли?

4b9b3361

Ответ 1

Эта ошибка может означать, что ./arm-mingw32ce-g++ не существует (но это так) или существует и является динамически связанным исполняемым файлом, распознанным ядром, но динамический загрузчик которого недоступен. Вы можете увидеть, какой динамический загрузчик требуется, запустив ldd /arm-mingw32ce-g++; все, что помечено not found, - это динамический загрузчик или библиотека, которую вы должны установить.

Если вы пытаетесь запустить 32-битный двоичный файл на установке amd64:

  • До Ubuntu 11.04 установите пакет ia32-libs.
  • В Ubuntu 11.10 установите ia32-libs-multiarch.
  • Начиная с 12.04, установите ia32-libs-multiarch или выберите разумный набор пакетов :i386 в дополнение к пакетам :amd64.

Ответ 2

Я столкнулся с этой ошибкой, когда пытался создать источник Selenium на Ubuntu. Простая оболочка script с правильным shebang не могла работать даже после того, как у меня были все предпосылки.

file file-name # helped me in understanding that CRLF ending were present in the file.

Я открыл файл в Vim, и я мог видеть это только потому, что однажды отредактировал этот файл на Windows-машине, он был в формате DOS. Я преобразовал файл в формат Unix с помощью команды:

dos2unix filename # actually helped me and things were fine.

Я надеюсь, что мы должны заботиться, когда мы редактируем файлы на разных платформах, мы также должны заботиться о форматах файлов.

Ответ 3

Эта ошибка может возникать и при попытке запустить script и shebang с ошибкой. Убедитесь, что он читает #!/bin/sh, #!/bin/bash или какой-либо интерпретатор, который вы используете.

Ответ 4

У меня было такое же сообщение об ошибке при попытке запустить Python script - это был не использованный прецедент @Warpspace (см. другие комментарии), но это было одним из лучших хитов для моего поиска, поэтому, возможно, кто-то найдет это полезно.

В моем случае окончание строк DOS (\r\n вместо \n) означало, что линия shebang (#!/usr/bin/env python) отключится. Простой dos2unix myfile.py зафиксировал его.

Ответ 5

Я получил ту же ошибку для простого bash script, у которого не было бы 32/64-разрядных проблем. Возможно, это связано с тем, что в программе script, которую вы пытаетесь запустить, есть ошибка. Это сообщение сообщение ubuntu указывает, что с обычными файлами script вы можете добавить 'sh' впереди, и вы можете получить от него отладочный вывод. например.

$ sudo sh arm-mingw32ce-g++

и посмотрим, получаете ли вы какой-либо результат.

В моем случае фактическая проблема заключалась в том, что файл, который я пытался выполнить, был в формате Windows, а не в linux.

Ответ 6

Ниже команда работала на 16.4 Ubuntu

Эта проблема возникает, когда ваш файл .sh поврежден или не отформатирован в соответствии с протоколами Unix.

dos2unix преобразует файл .sh в формат Unix!

sudo apt-get install dos2unix -y
dos2unix test.sh
sudo chmod u+x test.sh 
sudo ./test.sh

Ответ 7

Я получил эту ошибку "No such file or directory", но она существует, потому что мой файл был создан в Windows, и я попытался запустить его на Ubuntu, а файл содержал недействительный 15\r, где бы ни была новая строка. Я просто создал новый файл, обрезающий ненужные вещи.

sleep: invalid time interval ‘15\r’
Try 'sleep --help' for more information.
script.sh: 5: script.sh: /opt/ag/cont: not found
script.sh: 6: script.sh: /opt/ag/cont: not found
[email protected]:/home/abc12/Desktop# vi script.sh 
[email protected]:/home/abc12/Desktop# od -c script.sh 
0000000   #   !   /   u   s   r   /   b   i   n   /   e   n   v       b
0000020   a   s   h  \r  \n   w   g   e   t       h   t   t   p   :   /

0000400   :   4   1   2   0   /  \r  \n
0000410
[email protected]:/home/abc12/Desktop# tr -d \\015 < script.sh > script.sh.fixed
[email protected]:/home/abc12/Desktop# od -c script.sh.fixed 
0000000   #   !   /   u   s   r   /   b   i   n   /   e   n   v       b
0000020   a   s   h  \n   w   g   e   t       h   t   t   p   :   /   /

0000400   /  \n
0000402
[email protected]:/home/abc12/Desktop# sh -x script.sh.fixed 

Ответ 8

У меня была такая же проблема с файлом, который я создал на моем mac. Если я попытаюсь запустить его в оболочке с. /filename, я получил сообщение об ошибке, не найденное в файле. Я думаю, что что-то не так с файлом.

что я сделал:

откройте сеанс ssh на сервере
cat filename
скопируйте вывод в буфер обмена
rm имя файла
коснитесь имени файла
vi имя файла
i для режима вставки
вставить содержимое из буфера обмена
ESC для завершения режима вставки
: WQ

Это сработало для меня.

Ответ 9

У меня только что была эта проблема в mingw32 bash. Я выполнил node/npm из Program Files (x86)\nodejs а затем переместил их в disabled каталог (по сути, удалив их из пути). У меня также были Program Files\nodejs (т.е. 64-битная версия) в пути, но только после версии x86. После перезапуска оболочки bash можно найти 64-битную версию npm. node все время работал правильно (проверено с помощью node -v который изменился при перемещении версии x86).

Я думаю, что bash -r работал бы вместо перезапуска bash: https://unix.stackexchange.com/a/5610

Ответ 10

Как уже упоминалось, это потому, что не может быть найден загрузчик, а не ваш исполняемый файл. К сожалению, сообщение недостаточно ясно.

Вы можете исправить это, изменив загрузчик, используемый вашим исполняемым файлом, см. Мой полный ответ на этот другой вопрос: несколько библиотек glibc на одном хосте

В основном вы должны найти, какой загрузчик он пытается использовать:

$ readelf -l arm-mingw32ce-g++ | grep interpreter
  [Requesting program interpreter: /lib/ld-linux.so.2]

Затем найдите правильный путь для эквивалентного загрузчика и измените свой исполняемый файл, чтобы использовать загрузчик из того пути, которым он действительно является:

$ ./patchelf --set-interpreter /path/to/newglibc/ld-linux.so.2 arm-mingw32ce-g++

Вам, вероятно, нужно будет также указать путь включений, вы узнаете, хотите ли вы этого или нет, после того, как попытаетесь запустить его. Смотрите все детали в этой другой теме.

Ответ 11

У меня была эта проблема, и причина была EOL в некоторых редакторах, таких как Notepad++. Вы можете проверить это в меню Edit/EOL. Unix (LF) должен быть выбран. Надеюсь это будет полезно.