Нет такого файла или каталога при запуске скрипта linux

Обновлено: 05.07.2024

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Как это понять, файл есть, но его вдруг нет? Или это какая-то защита, предотвращающая от запуска чего не попадя? Дистрибутив - Debian



ему там может чего надо еще? посмотри ldd photofile что говорит? есть ли у тебя все что нужно?


Похоже, ему твоя glibc не нравится

а что если это файл скормить gdb? может он чего больше скажет?


Ну надо же, они что в Сети фуфло распространяют.

Хотя такая же штука была когда я пытался запустить скачанный с офиц. сайта firefox. Подозрительно всё это.


А ты с архитектурой не промахнулся?


ппц, линуксоиды скачивают и запускают бинарники. Куда катится мир?


А это не баш-скрипт ли часом? (:
Текстовым редактором откройте.

Так бывает, когда неправильно shabang указан.

а чмод + икс не нужно сделать?

>Так бывает, когда неправильно shabang указан.

тогда обычно bad interpreter говорят вроде перед No such file or directory

>а чмод + икс не нужно сделать?

>а чмод + икс не нужно сделать?


-rwxr-xr-x 1 sunny sunny 10771230 Май 19 2008 photofile

ну проглядел, чо



думаешь noexec? там ошибка другая была бы емнип.

file photofile
head -n 1 photofile

>Ну надо же, они что в Сети фуфло распространяют.

Это плохой файл, не исполняемый. Удалите его.

лддэхни его и посмотри какой библиотеки нехватает.


>Как это понять, файл есть, но его вдруг нет? Или это какая-то защита, предотвращающая от запуска чего не попадя? Дистрибутив - Debian

Ну видимо файл запускается, shell читает sha-bang, там написано /bin/bash, запускается /bin/bash ./photfile, но вот эта команда почему-то не видит этого файла. Попробуйте напрямую:

Ну и сам файл поглядите. (xxd | head и file)

Покажи file photofile
А заодно uname -a

Не, лучше наверное не показывай.

Дай угадаю - у тебя amd64?
А ты запускаешь на ней 32-битный бинарник, отсюда проблемы.
Копай в эту сторону.


и оно покажет что к чему и почему.

Судя по размеру, вряд ли


Ygor писал

file photofile

и оно покажет что к чему и почему.

HomeUser писал

Дай угадаю - у тебя amd64? А ты запускаешь на ней 32-битный бинарник, отсюда проблемы. Копай в эту сторону.

У меня на самом деле процессор AMD AM2+ 64 двухядерный. И система вся архитектуры amd64. Но вроде как бы 32-битные программы должны без проблем запускаться на 64-битной платформе, всегда так было. Вот 32-битный skype запускается.

А readelf что показывает? Признаёт этот файл исполняемым?


Попробуйте скормить этот файл /lib/ld-linux* с разными параметрами.

Например, /lib/ld-linux* --list ./photofile


>for GNU/Linux 2.2.5

Может, в этом дело?


Под /lib/ld-linux вы это имели в виду?

Пишет, что какая-то ошибка. И что это означает?


> И что это означает?
Рядом, случаем, нету другого ld-linux? Если нет, поищите в репозитории пакет для совместимости с 32-битными приложениями (странно, почему же skype работает?)

Каждый пользователь, рано или поздно сталкивается с определенными проблемами в своей операционной системе Linux. Это может быть просто неправильное использование команд или их непонимание, так и такие серьезные ошибки Linux, как отсутствие драйверов, неработоспособность сервисов зависание системы и так далее.

Эта статья ориентирована в первую очередь на новичков, которые не знают, что делать когда их будут поджидать проблемы linux, мы дадим общую концепцию и попытаемся показать в какую сторону двигаться дальше. Мы рассмотрим исправление ошибок в linux как простых, так и более сложных. Но давайте сначала определим, какие проблемы linux будем рассматривать, разобьем их на категории:

  • Проблемы с командами в терминале
  • Проблемы с программами
  • Проблемы с драйверами и ядром
  • Проблемы с графической оболочкой
  • Проблемы с диском и файловой системой

Все это мы рассмотрим ниже, но сначала общее введение и немного теории.

Решение проблем Linux

Linux очень сильно отличается от WIndows, это заметно также при возникновении проблем Linux. Вот допустим, произошла ошибка в программе Windows, она полностью закрывается или выдает непонятное число с кодом ошибки и все, вы можете только догадываться или использовать поиск Google, чтобы понять что произошло. Но в Linux все совсем по-другому. Здесь каждая программа создает лог файлы, в которых мы можем при достаточном знании английского или даже без него, выяснить, что произошло. Более того, если программу запускать из терминала, то все ошибки linux и предупреждения мы увидим прямо в окне терминала. и сразу можно понять что нужно делать.

  • Permission Denied - нет доступа, означает что у программы нет полномочий доступа к определенному файлу или ресурсу.
  • File or Directory does not exist - файл или каталог не существует
  • No such file or Directory - нет такого файла или каталога
  • Not Found - Не найдено, файл или ресурс не обнаружен
  • Connection Refused - соединение сброшено, значит, что сервис к которому мы должны подключиться не запущен
  • is empty - означает, что папка или нужный файл пуст
  • Syntax Error - ошибка синтаксиса, обычно значит, что в конфигурационном файле или введенной команде допущена ошибка.
  • Fail to load - ошибка загрузки, означает что система не может загрузить определенный ресурс, модуль или библиотеку (fail to load library) обычно также система сообщает почему она не может загрузить, permission denied или no such file и т д.

Проблемы с командами в терминале

Обычно проблемы с командами в терминале возникают не из-за ошибки linux или потому, что разработчики что-то недоработали, а потому, что вы ввели что-то неправильно или предали не те что нужно опции.

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

Также довольно частой ошибкой при выполнении команд есть неиспользование команды sudo перед самой командой для предоставления ей прав суперпользователя. В таких случаях вы обычно получаете ошибку Permission Denied или просто уведомление, что не удалось открыть тот или иной файл или ресурс: can not open . can not read . и так далее.

Очень распространенной среди новичков ошибкой, есть no such file or directory при попытке выполнить файл, скачанный из интернета. Сразу кажется что это бред, ведь файл существует, но на самом деле оболочка ищет только файлы с флагом исполняемый, а поэтому пока вы не установите этот флаг для файла, он для оболочки существовать не будет.

Проблемы в программах

Если ни с того ни с сего закрывается или не так, как требуется работает, какая-нибудь графическая программа, решение проблем linux начинается из запуска ее через терминал. Для этого просто введите исполняемый файл программы и нажмите Enter. Обычно достаточно начать вводить имя программы с маленькой буквы и использовать автодополнение для завершения ввода названия.

Многие ошибки системы linux, связанные с графической оболочкой вы можете найти в файле

/.xsession-errors в вашей домашней директории. Если оболочка работает медленно, зависает или не работают другие программы, но в других логах причин этому нет, возможно, ответ находится именно в этом файле.

$ sudo systemctl status имя_сервиса

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

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

Проблемы с драйверами и ядром

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

Чтобы иметь возможность удобно листать вывод можно выполнить:

sudo dmesg | less

Или сразу выбрать все ошибки:

sudo dmesg | grep error

Проблемы с графической оболочкой

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

При проблемах с графической оболочкой вы можете всегда переключиться в режим терминала с помощью сочетания клавиш Ctrl+Alt+F1. Далее, вам нужно ввести логин и пароль, затем можете вводить команды терминала.

Посмотреть логи графической оболочки вы можете в том же файле

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

Проблемы с диском и файловой системой

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

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

Выводы

Теперь исправление ошибок Linux будет для вас немного проще. Ошибки системы linux довольно сложная тема и этой информации явно мало, если у вас остались вопросы или есть предложения по улучшению статьи пишите в комментариях!

Прописал в PATH вручную /home/dmitry/.poetry/bin , автоматически, как обещалось при установке этого не произошло. Не помогло. Посоветуйте что делать, пожалуйста!

Здравствуйте! Опишите, пожалуйста, как вы устанавливали poetry. Это можно сделать по-разному и проблемы могут разные возникать соответственно.

Возможно, в PATH путь до /home/dmitry/.poetry/bin и был прописан, но вы увидите это изменение после перезагрузки (или login/logout). Либо установщик добавил путь в файл инициализации не того shell: скажем, вы используете zsh, а установщик дописал строки в .bashrc (файл инициализации bash shell).

curl устанавливал через apt .

Я посмотрел, poetry дописывает изменение PATH в

/.profile . А этот файл читается один раз при логине пользователя. Поэтому в текущем сеансе пользователя вы и не увидите изменений, даже если перезапустите bash.

Я ковырялся с этим вчера вечером, с утра на свежую голову в новом сеансе то же. Путь правда прописан в PATH, но poetry по-прежнему не обнаружен.

За статью благодарю, но ничего не получилось. Даже после создания символической ссылки: ln -s $HOME/.poetry.venv/bin/poetry $HOME/.local/bin при вызове: poetry --version bash говорит, что команда не найдена. Хотя при вызове команды $HOME/.poetry.venv/bin/poetry все работает, сейчас проверил.

А $HOME/.local/bin у вас в PATH прописан?

Стоит прописать. По этому пути часто сохраняются всякие скрипты при установке программ для текущего пользователя (а не для всей системы). Например, программы, написанные на Python и устанавливаемые посредством pip install --user foo тоже туда прописывают скрипты для запуска себя.

/.profile PATH="$HOME/.poetry.venv/bin:$PATH" и теперь все работает. Не знаю насколько такой подход корректен. Экспорт $HOME/.local/bin не помог, bash poetry не видел. Спасибо за направление мысли!

Вот так делать не нужно. Потому что вы таким образом помещаете в начало списка для поиска всё, что есть в окружении $HOME/.poetry.venv/bin . Это плохо, ведь там находятся и Python и pip. Теперь если вы будете запускать команду python из любой директории, то будет запускаться не системный Python, а тот, который расположен в этом конкретном окружении!

Нужно "починить" $HOME/.local/bin . Проверьте, что симлинк ведёт туда, куда нужно, например.

Читайте также: