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

«Нет такого файла или каталога», но он существует
На чтение
26 мин.
Просмотров
15
Дата обновления
11.11.2024

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

  bash: ./arm-mingw32ce-g++: нет такого файла или каталога  

Я использую Ubuntu Linux 10.10. ls -l списки

  -rwxr-xr-x 1 root root 433308 16.10.2010 21:32 arm-mingw32ce-g ++   

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

  sudo  : невозможно выполнить ./arm-mingw32ce-g++: нет такого файла или каталога  

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


Эта ошибка может означать, что ./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 .

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

  file file-name # помог мне понять, что присутствует окончание CRLF  в файле.  

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

  dos2unix filename # действительно помогло мне, и все было хорошо.  

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

3


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

3


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

В моем случае это были окончания строки DOS ( r n вместо n ), что строка shebang ( #!/usr/bin/env python ) может споткнуться. Простой dos2unix myfile.py исправил это.


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

  $ sudo sh arm-mingw32ce-g ++  

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

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


Я получил эту ошибку «Нет такого файла или каталога» , но она существует, потому что мой файл был созданный в Windows, и я попытался запустить его в Ubuntu, и файл содержал недопустимый 15 r везде, где когда-либо была новая строка. Я только что создал новый файл, усекающий ненужные вещи

   sleep: недопустимый интервал времени '15  r'Попробуйте 'sleep --help' для получения дополнительной информации .script.sh: 5: script.sh:/opt/ag/cont: not foundscript.sh: 6: script.sh:/ opt/ag/cont: not foundroot @ Ubuntu14:/home/abc12/Desktop # vi script.sh root @ Ubuntu14:/home/abc12/Desktop # od -c script.sh 0000000 #! /usr/bin/env b0000020 ash  r  nwgethttp:/0000400: 4 1 2 0/ r  n0000410root @ Ubuntu14:/home/abc12/Desktop # tr -d \ 015  script.sh.  fixedroot @ Ubuntu14:/home/abc12/Desktop # od -c script.sh.fixed 0000000 #! /usr/bin/env b0000020 ash  nwgethttp://0000400/ n0000402root @ Ubuntu14:/home/abc12/Desktop # sh -x script.sh.fixed  


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

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

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

  sudo apt-  получить установить dos2unix -ydos2unix test.shsudo chmod u + x test.sh sudo ./test.sh  


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

что я сделал:

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








У меня это сработало.

0


У меня только что возникла эта проблема в 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


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

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

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

  $ readelf -l arm-mingw32ce-g ++ |  интерпретатор grep [Запрос интерпретатора программы:/lib/ld-linux.so.2pting

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

  $ ./patchelf --set-интерпретатор/path/to/newglibc/ld-linux.so.2 arm-mingw32ce-g ++  

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


Я нашел свое решение для моего Ubuntu 18 здесь.

  sudo dpkg --add-architecture i386  

Затем:

  sudo apt-get updatesudo apt-get install libc6: i386 libncurses5: i386 libstdc ++ 6: i386  


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

1


Добавлено здесь для справки в будущем (для пользователи, которые могут попасть в тот же случай): Эта ошибка возникает при работе в Windows (которая вводит дополнительные символы из-за другого разделителя строк, чем в системе Linux) и при попытке запустить этот сценарий (с добавленными дополнительными символами) в Linux. Сообщение об ошибке вводит в заблуждение.

В Windows разделителем строк является CRLF ( r n ), тогда как в Linux это LF ( n ). Обычно это можно выбрать в текстовом редакторе.

В моем случае это произошло из-за работы в Windows и загрузки на сервер Unix для выполнения.

1


Ударьте эту ошибку, пытаясь запустить terraform/terragrunt (Single go двоичный).

Используя which terragrunt , чтобы найти, где находится исполняемый файл, возникла странная ошибка при его запуске в локальном каталоге или с полным путем

  bash: ./terragrunt: нет такого файла или каталога  

Проблема заключалась в том, что было две установки terragrunt, использовались brew uninstall terragrunt , чтобы удалить один, исправленный.

После удаления одного, which terragrunt показал новый путь /usr/bin/terragrunt все работало нормально.



Нет такого файла или каталог в ubuntu

Получение следующего стека ошибок:

dhruv @ dhruv-Inspiron-N5010: ~/Downloads/hadoop-2.7.1/ bin $ cd

dhruv @ dhruv-Inspiron-N5010: ~ $ cd Downloads/hadoop-2.7.1/sbin

dhruv @ dhruv-Inspiron-N5010: ~ /Downloads/hadoop-2.7.1/sbin$ sbin/start-dfs.sh

-bash: sbin/start-dfs.sh: Нет такого файла или каталога

dhruv @ dhruv-Inspiron-N5010: ~/Downloads/hadoop-2.7.1/sbin $ sbin/start-all.sh

-bash: sbin/start-all.sh: Нет такой файл или каталог

dhruv @ dhruv-Inspiron-N5010: ~/Downloads/hadoop-2.7.1/sbin $ ssh localhost

Добро пожаловать в Ubuntu 14.04.3 LTS (GNU/Linux 3.13.0-65-generic x86_64)

  • Документация: https://help.ubuntu.com/

Последний вход: четверг, 8 октября, 10:50:16 2015 с localhost

dhruv @ dhruv-Inspiron-N5010: ~ $ cd Downloads/hadoop-2.7.1/sbin

dhruv @ dhruv-Inspiron-N5010: ~/Downloads/hadoop-2.7.1/sbin $ sbin/start-dfs.sh

-bash: sbin/start-dfs. sh: Нет такого файла или di rectory


Вы уже перешли в каталог sbin, поэтому теперь вам нужно использовать

./start-dfs.sh

вместо

sbin/ start-dfs.sh

1


начать все. sh — это файл, а не каталог, для запуска таких файлов вы должны использовать ‘./’ перед исполняемым файлом,

попробуйте: ./start-all.sh

0 Комментариев
Комментариев на модерации: 0
Оставьте комментарий